1

我已经使用 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)
    {}      
}   

谢谢您的帮助!

4

1 回答 1

4

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

于 2012-12-19T13:30:26.180 回答