java - Android - 为什么我在 SQLiteOpenHelper onCreate 中收到 NullPointerException?

标签 java android sql sqlite sqliteopenhelper

我已经使用 LogCat 来确定问题行。

我试图在 onCreate 中执行的 SQL 字符串是..

CREATE TABLE Routines(_id integer primary key autoincrement, json TEXT);

当它尝试执行此操作时,出现了问题。

这很可能是导致 NullPointerException 的原因。如果您看不出有什么问题,请继续阅读以了解更多背景知识。

这个数据库还没有被创建,我一直收到一个NullpointerException,我将它与以前的 SQLite 代码进行了比较,这个问题被证明是难以捉摸的。

但是,我提到这个是因为它仍然需要通过 onCreate 方法。我在我的主代码中创建了一个新的 DatabaseOpenHelper(扩展 SQliteOpenHelper)并调用助手的 open() 方法,如下所示。

public void open() throws SQLException
{
    ssDatabase = databaseOpenHelper.getWritableDatabase();
}

如果我没记错的话,因为我的数据库还没有创建(我之前通过卸载它来确保这一点)。 onCreate SQLiteHelper 在调用 open() 方法时被调用。

这是我调用 open 方法的代码。

    try
    {                   
        dbConnector = new DatabaseConnector (this);
        debug = "2 ";

        // This on first start will invoke the database onCreate method - throws SQLException
        dbConnector.open();  /* PROBLEM LINE */
        debug = "3 ";
    }
    catch (Exception e)
    {
        textView1.setText(debug + e.toString());
    }

这是包含我的 DatabaseOpenHelper 和 onCreate 方法的代码

private class DatabaseOpenHelper extends SQLiteOpenHelper
{
    public DatabaseOpenHelper(Context context, String name, CursorFactory factory, int version)
    {
        super(context, name, factory, version); 

        Log.i(TAG, "Constructor");
    }

    // On initial creation of database
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        Log.i(TAG, "Before SQL command");

        String sqlCreateCommand = "CREATE TABLE Routines"
                + "(_id integer primary key autoincrement, "
                + "json TEXT);";

        Log.i(TAG, sqlCreateCommand); 

        // I believe this to be the PROBLEM LINE
        ssDatabase.execSQL(sqlCreateCommand); 

        Log.i(TAG, "Jab done");
    }

    // On upgrade - currently do nothing
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {}      
}   

感谢您的帮助!

最佳答案

好像我没有发表评论的权限。一个问题:ssDatabase.execSQL(sqlCreateCommand); --> 这不应该是 db.execSQL(sqlCreateCommand); 因为参数是 SQLiteDatabase db。其次你使用_id。这个索引不是默认创建的吗?没关系,如果这与它无关。这只是我的想法。 :)

关于java - Android - 为什么我在 SQLiteOpenHelper onCreate 中收到 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953197/

相关文章:

java - 最小的epsilon使得比较结果改变

android - 需要 android 的 PJSIP 示例

android - 从广播接收器获取变量

java - 如何从 fragment 更改菜单?

sql - 将聚合数据存储在表或 View 中?

java - 获取 java.lang.NoClassDefFoundError : Filter exception on Jboss

java - Java 中不存在语言环境

android - 如何将存储在数据库中的图像作为字符串显示为真实图像?

mysql - 如何优化count by max的主从查询?

java - 使用 ICAP 和 Java 发送文件并接收响应