【发布时间】:2012-12-06 20:28:33
【问题描述】:
我已经使用 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();
}
如果我没记错的话,因为我的数据库还没有创建(我通过之前卸载它来确定)。调用 open() 方法时会调用 onCreate SQLiteHelper。
这是我调用 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)
{}
}
感谢您的帮助!
【问题讨论】:
-
完整的堆栈跟踪也会很有用:)
-
您是否尝试调试您的代码以找到它?
-
嗯,如果你的意思是“问题”选项卡中的错误,那么这条路径根本没有。我所指的唯一例外是我在 TextView 上显示的.. 可能有点菜鸟的事情要做:P 在我的 LogCat 上,除了我自己的标签之外,这个例外被捕获。
-
是的,我已经尝试了一段时间 LogCatting 并使用 Eclipse 调试器。但是使用 Eclipse 调试器,当我来到 execSQL 行时,它会给出这个 Class File Editor - Source not found 消息,我不太了解它或如何解释它
标签: java android sql sqlite sqliteopenhelper