java - 仅选择查询中的 SQLite java.lang.NullPointerException

标签 java sqlite select jdbc

我添加了 sqlite-jdbc-3.7.2.jar 来构建路径。我使用插入查询。当我用记事本打开wellec.db时,我可以看到记录。但我的选择不起作用。

此处 WellInfo 类属性

public Integer wellID;
public Integer measurement;
public String wellname;
public Integer wellstatus;
public String licenseno;
public String gl;
public String kb;
public String spuddate;
public String drillingenddate;
public String totaldepth;
public String notes;
public String easting;
public String northing;
public String coordinatesystem;
public Integer islogadd;

这是我的可创建的sql

          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:wellec.db");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");

          stmt = c.createStatement();

          String sql = "CREATE TABLE IF NOT EXISTS WELLINFO " +
                    "(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ," +
                    " WELLNAME           CHAR(90)    NOT NULL, " +
                    " WELLSTATUS   INT NOT NULL," +
                    " MEASUREMENT INT NOT NULL," +
                    " ISLOGADD INT NOT NULL," +
                    " GL           CHAR(50)    NOT NULL, " +
                    " KB           CHAR(50)    NOT NULL, " +
                    " SPUDDATE           CHAR(50)    NOT NULL, " +
                    " TOTALDEPTH           CHAR(50)    NOT NULL, " +
                    " LICENSENO           CHAR(50)    NOT NULL, " +
                    " DRILLINGENDDATE           CHAR(50)    NOT NULL, " +
                    " NOTES           CHAR(150)    NOT NULL, " +
                    " EASTING           CHAR(50)    NOT NULL, " +
                    " NORTHING           CHAR(50)    NOT NULL, " +
                    " COORDINATESYSTEM CHAR(50)    NOT NULL)";
          stmt.executeUpdate(sql);
...//other tables sql and stmt.executeUpdate(sql)
 stmt.close();
 c.commit();

这是我正在运行的插入查询。 WellInfo wi 作为参数

        Connection c = null;
        Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:wellec.db");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");

          stmt = c.createStatement();
          String sql = "INSERT INTO WELLINFO " +
                    "(ID, WELLNAME, WELLSTATUS , MEASUREMENT, ISLOGADD , GL, KB, SPUDDATE, TOTALDEPTH, " +
                    "LICENSENO , DRILLINGENDDATE, NOTES, EASTING, NORTHING, COORDINATESYSTEM) " +
                    "VALUES (NULL,'" + wi.wellname + "'," + wi.wellstatus + "," + wi.measurement + "," +
                            "" + wi.islogadd +",'" + wi.gl + "','" + wi.kb + "','" + wi.spuddate + "'," +
                                    "'" + wi.totaldepth + "','" + wi.licenseno + "','" + wi.drillingenddate + "', " +
                                            "'" + wi.notes + "','" + wi.easting + "','" + wi.northing + "','" + wi.coordinatesystem + "');";
          stmt.executeUpdate(sql);

          stmt.close();
          c.commit();

        } catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Records created successfully");

        return 0;

这是我的选择

    Connection c = null;
    Statement stmt = null;
    WellInfo[] wi = new WellInfo[60000];
    WellInfo[] wi2 = new WellInfo[0];

    int i = 0;
    try {
      Class.forName("org.sqlite.JDBC");
      c = DriverManager.getConnection("jdbc:sqlite:wellec.db");
      //c.setAutoCommit(false);
      System.out.println("Opened database successfully");


      stmt = c.createStatement();
      ResultSet rs = stmt.executeQuery("select * from WELLINFO"); 
      //c.commit();

      //if(rs.getRow() > 0)
          while ( rs.next() ) { //HERE IS THE PROBLEM
                 wi[i].wellID = rs.getInt("ID");
                 i++;
          }

      wi2 = new WellInfo[i];
      for(int j = 0; j < i - 1; j++){
          wi2[j] = wi[j];
      }

      rs.close();
      stmt.close();

      return wi2;
    } catch ( Exception e ) {
      System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      System.exit(0);
    }

    System.out.println("Operation done successfully");
    return wi2;

抱歉没有具体说明问题。这是:

SELECT QUERY 问题,当我调用 rs.next() 时,出现错误 java.lang.NullPointerException。

最佳答案

wi[i] is null => 在实例化 wi 之前不能调用 wi[i].wellID [i],你应该做类似的事情

wi[i] = new WellInfo() 然后调用 wi[i].wellID

关于java - 仅选择查询中的 SQLite java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18780193/

相关文章:

python - 如何在 Python 中比较两个 SQLite 数据集并搜索相似之处?

mysql - 根据日期获取 MySQL 中的最新行(按另一列分组)

postgresql - 选择范围集合中的值

java - 使用 JSON 文件中的 ListView 的 Android 搜索功能(困难)

python - Django: DatabaseError: near "񐁓񐁌��...��1": 语法错误

java - 如何在java eclipse中将其他maven项目的依赖添加到我当前的maven项目中?

sqlite 匹配数字

使用 select() 调用的并发 UDP 服务器

java - 为什么我们可以向 LinkedList 添加 null 值,尽管在 Deque 接口(interface)中强烈反对这样做?

java - Android - 添加按钮后应用程序不断崩溃