获取刚刚插入的行

时间:2014-07-07 10:20:42

标签: android sqlite

我想获取刚刚插入的行的id。

目前,我正在使用此代码:

public long createEntryApp(String str_manid, String str_jobid, String str_engid, String str_app_type, 
        String str_appliances_model, String str_appliances_serial, String str_appliances_service_interval, String str_app_date)
{
    String lastRowId = "";

    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();

    //inserting values in columns
    cv.put(KEY_APPLIANCES_MODEL, str_appliances_model);
    cv.put(KEY_MANUFACTURERROWID, str_manid);
    cv.put(KEY_APPLIANCES_TYPE, str_app_type);
    cv.put(KEY_JOBADDRESSFK, str_jobid);
    cv.put(KEY_APPLIANCES_SERIAL, str_appliances_serial);
    cv.put(KEY_APPLIANCES_SERVICE_INTERVAL, str_appliances_service_interval);
    cv.put(KEY_APPLIANCES_DATE, getDateTime());

    // getting the row id that has just been inserted

    String query = "SELECT KEY_APPLIANCES_ROWID from TBL_APPLIANCES order by KEY_APPLIANCES_ROWID DESC limit 1"; 
    Cursor c = ourDatabase.rawQuery(query, null);   // error is here
    if (c != null && c.moveToFirst()) {
        long lastId = c.getLong(0);
        lastRowId= String.valueOf(lastId);
    }
        Log.d("check last Row id", lastRowId); //checking if it's retrieved

    return ourDatabase.insert(TBL_APPLIANCES, null, cv);
}

其中KEY_APPLIANCES_ROWID = rowId列及其AUTOINCREMENTED        TBL_APPLIANCES =表名  错误说:没有TBL_APPLIANCES这样的表,但它在我的数据库中。  请提前帮助并表示感谢:)

2 个答案:

答案 0 :(得分:0)

TBL_APPLIANCES(和KEY_*)是Java代码中的变量名,其包含SQL标识符。

因此,请替换

"SELECT KEY_APPLIANCES_ROWID from TBL_APPLIANCES order by KEY_APPLIANCES_ROWID DESC limit 1"; 

类似

"SELECT " + KEY_APPLIANCES_ROWID + " from " + TBL_APPLIANCES + " order by " + KEY_APPLIANCES_ROWID + " DESC limit 1";

另一方面,您在插入任何内容之前都在进行查询,因此无法返回您想要的内容。

此外,查询刚刚插入的值有点多余。你已经知道了。 insert()返回生成的rowid。

答案 1 :(得分:0)

如果你使用

,你可以很容易地实现它

db.insert() 而不是db.rawQuery()

来自docs

           返回         
  • 新插入行的行ID,如果发生错误,则为-1