我尝试保存到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
如何解决这个问题?
答案 0 :(得分:6)
使用bindNull()
代替bindString()
来绑定空值。
或者,由于您在绑定新值之前清除所有绑定,因此不要绑定任何空字符串。如果不将任何值绑定到某个位置,则默认值为null。
答案 1 :(得分:0)
在绑定一个可能为null的值之前,只需询问if(value != null)
。
我从来没有理解为什么人们经常bindNull()
如果以前没有约束任何价值。似乎毫无意义。特别是如果您使用clearBindings()
。
API reference for clearBindings: 清除所有现有绑定。取消设置绑定被视为NULL。