如何使用SQLiteStatement将空值插入Sqlite

时间:2014-12-17 14:07:41

标签: android android-sqlite sql-insert

我尝试保存到Sqlite Event

public class EventDao{

    private SQLiteStatement insertStatement;
    private SQLiteDatabase db;

    private static final String INSERT =
            "insert into " + EventsTable.TABLE_NAME + "(" + EventsColumns.WHO + ", "
                                                          + EventsColumns.WHAT
                                                          + ") values (?, ?)";

    public EventDao(SQLiteDatabase db) {
        this.db = db;
        Log.w(TAG, EventDao.INSERT);
        insertStatement = db.compileStatement(EventDao.INSERT);
    }

    public long save(Event type) {
        insertStatement.clearBindings();
        insertStatement.bindString(1, type.getmWho());
        insertStatement.bindString(2, type.getmWhat());

        return insertStatement.executeInsert();
    }
//...
}

getmWho()getmWhat()都返回非null值时,一切正常。但是,当我尝试保存Who字段为空(并因此getmWho()返回null)的事件时,我收到错误

java.lang.IllegalArgumentException: the bind value at index 1 is null

如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

使用bindNull()代替bindString()来绑定空值。

或者,由于您在绑定新值之前清除所有绑定,因此不要绑定任何空字符串。如果不将任何值绑定到某个位置,则默认值为null。

答案 1 :(得分:0)

在绑定一个可能为null的值之前,只需询问if(value != null)

我从来没有理解为什么人们经常bindNull()如果以前没有约束任何价值。似乎毫无意义。特别是如果您使用clearBindings()

API reference for clearBindings: 清除所有现有绑定。取消设置绑定被视为NULL。