Android SQLite - 主键描述

时间:2014-04-02 14:30:56

标签: android sqlite primary-key descendant

首先创建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();
    }

有没有人有其他解决方案?

1 个答案:

答案 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();
}