Android 如何使用SQLiteStatement向Sqlite插入空值

Android 如何使用SQLiteStatement向Sqlite插入空值,android,android-sqlite,sql-insert,Android,Android Sqlite,Sql Insert,我试图保存到SqliteEvent public class EventDao{ private SQLiteStatement insertStatement; private SQLiteDatabase db; private static final String INSERT = "insert into " + EventsTable.TABLE_NAME + "(" + EventsColumns.WHO + ", "

我试图保存到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
如何解决此问题?

使用
bindNull()
而不是
bindString()
来绑定空值

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

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

我一直不明白,如果以前没有绑定任何值,为什么人们经常使用
bindNull()
。似乎毫无意义。尤其是如果您使用
clearBindings()


清除所有现有绑定。未设置的绑定被视为NULL

也许我是个吹毛求疵的人,但是bindNull()绑定null而不是null的“值”。不能使用insertStatement.bindNull(1,键入.getmWho())。