0

安卓 2.3.3

static String name = "Database";
static int version = 1;

static SQLiteDatabase sqlDB;
static Cursor c;


public Database(Context context) {
    super(context, name, null, version);
    // TODO Auto-generated constructor stub

    sqlDB = getWritableDatabase();

    }

    @Override
    public void onCreate(SQLiteDatabase sqlDB) {
        // TODO Auto-generated method stub


    sqlDB.execSQL("create table if not exists Operations(Command Text, Pos1 Text, " +
                "Pos2 Text, Pos3 Text, Pos4 Text, Pos5 Text, Pos6 Text, Pos7 Text, Pos8 Text, Pos9 Text, Pos10 Text)");

        insertData();
    }

private void insertData() {
        // TODO Auto-generated method stub

        String addQuery ="ADD, add, and, had, ad, anddd, anndd, null, null, null, null";

                sqlDB.execSQL("insert into Operations values("+ addQuery +")"); 
                     //Exception at the above line
}

共有 11 列。

我可以在数据库中插入 NULL 吗?如果是,我尝试将数据插入数据库的方式有什么问题吗?

正如rekire 所指出的,问题似乎出在getWritableDatabase() 上。我正在调用构造函数,Database db = new Database(this); 到目前为止,它在所有其他项目中都有效,因为我已经声明了名称和版本的局部变量并向工厂提供了 null。

回答 ::: 对不起,这是我的错误。我通过使用 Database.method() 而不是 object(db) 在数据库中调用了一个方法。这使得 SQLiteDatabase 和 Cursor 对象在 Database.java 文件中是静态的。当我将其更改为 db.method() 并删除 static 关键字时,它工作正常。

感谢您的宝贵时间.. 很抱歉给您带来麻烦。

4

4 回答 4

0

如果我猜对了,那么您的函数getWritableDatabase()将返回 null。

于 2012-12-21T08:10:24.230 回答
0

在进行查询之前,您需要调用 open() 方法

mDbHelper.open(); //whitout this call mdb will be NULL
于 2012-12-21T08:35:50.443 回答
0
private void insertData() {
    if(sqlDB == null) sqlDB.open();
    String addQuery ="ADD, add, and, had, ad, anddd, anndd, null, null, null, null";
    sqlDB.execSQL("insert into Operations values("+ addQuery +")");
}
于 2012-12-21T08:48:03.513 回答
0

在你的

 public void onCreate(SQLiteDatabase sqlDB)

你应该分配sqlDB = sqlDB; 然后你可以在 insertData() 中使用 sqlDB

于 2012-12-21T08:56:48.710 回答