首先创建id生成器:
private int generateId() {
// if the table is empty returns -1
int result = -1;
String sql = "SELECT id FROM table order by id asc";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
//if any id is decremented
if (cursor.moveToFirst())
result = (cursor.getInt(0) -1);
cursor.close();
db.close();
return result;
}
这将是我们的初始价值 我们可以用另一个值替换它
// if the table is empty returns -1
int result = -1;
然后在插入中使用它:
public void add(Type type) {
int id = this.generateId();
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("id", id);
cv.put("value",type.value)
...
db.insert(table, null, cv);
cv.clear();
db.close();
}
有没有人有其他解决方案?
答案 0 :(得分:0)
两次打开/关闭数据库效率低下;并且有一个helper来从查询中读取单个值。
无论如何,您可以将计算移动到SQL中:
db = getWritableDatabase();
try {
long id = DBUtils.longForQuery(db,
"SELECT IFNULL(MIN(id) - 1, 0) FROM MyTable", null);
cv.put("id", id);
...
} finally {
db.close();
}