【问题标题】:How to get the id of the lastest object i have just added to the database? [duplicate]如何获取我刚刚添加到数据库中的最新对象的 id? [复制]
【发布时间】:2013-11-14 20:20:36
【问题描述】:

我创建了一个数据库,其中包含名称、信息,并且还为每个保存到数据库的对象提供了一个“_id”。

现在我想用下一个函数在最后得到新添加的对象正在获取的 id - 我已经尝试了下一个代码 - 但我确定这不是正确的方法

public long insertAuto(Student student){
        SQLiteDatabase db = dbOpen.getWritableDatabase();

        ContentValues vals = new ContentValues();
        vals.put(Constants.STUDENT_NAME, student.getName());
        vals.put(Constants.STUDENT_INFO, movie.getInfo());

        db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);

            //this is where i thinks is my mistake! 
        long id = student.getId();

        db.close();

        return  id;
    }

谢谢你的帮助

【问题讨论】:

标签: android database


【解决方案1】:

查看SQLiteDatabase.insert()的文档

它会为你返回新插入的rowId。

public long insertAuto(Student student){
    SQLiteDatabase db = dbOpen.getWritableDatabase();

    ContentValues vals = new ContentValues();
    vals.put(Constants.STUDENT_NAME, student.getName());
    vals.put(Constants.STUDENT_INFO, movie.getInfo());

    long id = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);

    db.close();

    return  id;
}

【讨论】:

    【解决方案2】:

    使用SQLiteDatabase.insert()方法的返回值。

    正如documentation 所述,此方法返回

    the row ID of the newly inserted row, or -1 if an error occurred 
    

    【讨论】:

    • 你的意思是我应该使用'db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);'作为 id 的返回值?
    • 我更新了我的答案,希望现在清楚:)
    【解决方案3】:

    你可以试试这个:

     String query = "SELECT ROWID from TABLE_NAME_STUDENTS order by ROWID DESC limit 1";
    
     Cursor c = db.rawQuery(query);
    
     if (c != null ) {
    
         c.moveToFirst();
         id = c.getLong(0);
     }
    

    【讨论】:

      【解决方案4】:

      1/如果你自己在应用程序中生成id,那么你的做法是正确的。

      lastId = theLastSavedStudentObject.get(id);
      

      2/ 看你的代码,好像是让数据库自动生成id(可能是MySQL自动增量),那么最后一个id必须是从数据库中选择或者从插入函数返回。

      lastSaveId = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);
      

      使用此 SQL 查询直接从数据库查询或查询:

      select max(id) from mytable;   (for autoincrement ID)
      

      【讨论】:

        【解决方案5】:

        每当您在数据库上运行插入查询时,它都会返回当前插入行的行 ID 作为 long 值。

        long id = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);
        return id;
        

        此行 ID 将是唯一的,可用于进一步的查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-08-07
          • 2017-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-23
          • 1970-01-01
          相关资源
          最近更新 更多