Java 数据库表未在SQLite Android中显示

Java 数据库表未在SQLite Android中显示,java,android,sqlite,nullpointerexception,android-sqlite,Java,Android,Sqlite,Nullpointerexception,Android Sqlite,在这里我做的是数据库游标的功能,这是经常使用的项目 以下是我的DAL代码: public Cursor SelectQuery(String table){ Cursor cursor=SQLiteDb.query(table,null,null,null,null,null,null,null); return cursor; } 通过调试,SQLiteDB在mainactivity中变为null 代码: 以便获得总行数,但表不在其中。此处ConstantsValues.TabDat

在这里我做的是数据库游标的功能,这是经常使用的项目

以下是我的DAL代码:

public Cursor SelectQuery(String table){
  Cursor cursor=SQLiteDb.query(table,null,null,null,null,null,null,null);
  return cursor;
}
通过调试,SQLiteDB在mainactivity中变为null

代码:

以便获得总行数,但表不在其中。此处ConstantsValues.TabData具有表名。 其中,如此处代码所示:

public ArrayList AllSelectQryForTabEmpData1() {
  ArrayList<Employee> data = new ArrayList();

  Cursor cursor = SQLiteDb.query(ConstantsValues.TabData, null, null, null, null, null, null, null);
  while (cursor.moveToNext()) {
    String id = cursor.getString(cursor.getColumnIndex(ConstantsValues.ID));
    String name = cursor.getString(cursor.getColumnIndex(ConstantsValues.NAME));
    String value= cursor.getString(cursor.getColumnIndex(ConstantsValues.VALUE));

    data.add(new Employee(id, name,value));
  }
  cursor.close();
  return data;
}
我正在获取SQLiteDb中的表。看来做游标有点不对劲

这是我的日志:

您需要首先实例化SQLiteDatabase,如下所示:

// Create and/or open the database for writing
SQLiteDatabase db = getWritableDatabase();
openDB();
Cursor cursor = SQLiteDb.query(ConstantsValues.TabData, null, null,
                                null, null, null, null, null);
...
更新:

对于简单的修复,您可以将openDB方法更改为注意:未测试:

public void openDB() {
  if(sqliteDB == null) {
    sqliteDB= new DBHelper(context).getWritableDatabase();
  } else {
    if(!sqliteDB.isOpen(){
       // reopen again. 
       // NOTE: This should be changed to the method which you use to open the db.
       sqliteDB= new DBHelper(context).getWritableDatabase();
    }
  }
}
然后在每次使用SQLiteDb时调用它,如下所示:

// Create and/or open the database for writing
SQLiteDatabase db = getWritableDatabase();
openDB();
Cursor cursor = SQLiteDb.query(ConstantsValues.TabData, null, null,
                                null, null, null, null, null);
...

我认为数据库连接有问题。请特别遵循本教程DBHelper.java类。他们是如何建立数据库连接的。


通过使用getWritableDatabase,您可以对数据库执行读写操作。

已编辑…我的问题SqliteDB为空,请正确初始化它。您可以初始化演示代码,以便我能够理解…原因:java.lang.NullPointerException,db为空?是的…@DonaldWuWell我在AllSelectQryForTabEmpData1中的另一个代码工作正常…但我想还不是这个,这些代码片段来自两个不同的java类。可能是,在一个连接中创建了连接,但在另一个连接中没有@是的,我刚刚在其他java类中初始化了它…**arr_emp**=ban.AllSelectQryForTabEmpData1;请确保在使用SQLiteDB之前已建立连接。如果需要,请再次调用openDb方法。你是对的,谢谢:1票赞成..:
openDB();
Cursor cursor = SQLiteDb.query(ConstantsValues.TabData, null, null,
                                null, null, null, null, null);
...
SQLiteDatabase db = this.getWritableDatabase();