将数据插入SqliteDatabase Android时出现NullPointerException

时间:2012-12-21 08:06:18

标签: android

Android 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(),而不是它的对象(db)。这使得   SQLiteDatabase和Cursor对象在Database.java中是静态的   文件。当我将其更改为db.method(),并删除静态   关键字,它工作正常。

感谢您的时间..并为此事感到抱歉。

4 个答案:

答案 0 :(得分:0)

如果我猜对了,你的函数getWritableDatabase()会返回null。

答案 1 :(得分:0)

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

mDbHelper.open(); //whitout this call mdb will be NULL

答案 2 :(得分: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 +")");
}

答案 3 :(得分:0)

中的

 public void onCreate(SQLiteDatabase sqlDB)

你应该指定sqlDB = sqlDB; 那么你可以在insertData()

中使用sqlDB