삽입 후 생성된 ID 가져오기
Android에서 SQLite를 사용하고 있는데 삽입한 행의 ID를 얻는 가장 좋은 방법을 알고 싶습니다.
찾고 싶은 솔루션이 포함되어 있습니다만, 최선은 아닌 것 같습니다.
메서드는id
삽입된 행 또는-1
삽입 중 오류가 발생한 경우.
long id = db.insert(...);
여기서 db는SQLiteDatabase
.
ContentValues를 사용하는 경우:
DBHelper db =new DBHelper();// your dbHelper
ContentValues values = new ContentValues();
values.put("firstName","Ahmad");
values.put("lastName","Aghazadeh");
long insertedId= db.getSQLiteDatabase().insert("user", "", values) ;
쿼리 exec이 사용되는 경우select last_insert_rowid()
String sql = "INSERT INTO [user](firstName,lastName) VALUES (\"Ahmad\",\"Aghazadeh\"); select last_insert_rowid()";
DBHelper itemType =new DBHelper();// your dbHelper
c = db.rawQuery(sql, null);
if (c.moveToFirst())
result = c.getLong(0);
회의실을 사용하는 경우
@Entity
class User {
@PrimaryKey(autoGenerate = true)
public int id;
//...
}
@Dao
public interface UserDao{
@Insert(onConflict = OnConflictStrategy.REPLACE)
long insert(User user);
// Insert multiple users
@Insert(onConflict = OnConflictStrategy.REPLACE)
long[] insert(User... user);
}
출처를 확인했습니다. insert
메서드 사용sqlite3_last_insert_rowid
ID를 반환하는 함수입니다.매뉴얼에 따르면 https://www.sqlite.org/c3ref/last_insert_rowid.html 행 ID는 숨겨진 열 또는 유형의 열입니다.INTEGER PRIMARY KEY
선언되면요.
대부분의 SQLite 테이블의 각 엔트리(제외)
WITHOUT ROWID
tables)에는 "rowid"라고 불리는 고유한 64비트 부호 정수 키가 있습니다.rowid는 명시적으로 선언된 열에서도 사용되지 않는 한 항상 ROWID, OID 또는 _ROWID_라는 이름의 선언되지 않은 열로 사용할 수 있습니다.테이블에 유형의 열이 있는 경우 해당 열은 rowid의 다른 별칭입니다.
이게 디폴트입니다._ID
보통 컬럼
mySQL, LAST_INSERT_에서 많은 문제가 발생했습니다.ID는 신뢰할 수 있는 ID를 가져오는 방법이 아닙니다.데이터베이스를 망치하는 사용자가 있는 경우 반환된 ID가 실행한 쿼리에 의해 삽입된 ID가 아닐 수 있으며, 다른 여러 사용자가 이 ID의 반환에 영향을 미칠 수 있습니다.1분에 평균 7000명의 유저가 있는 서버는, 항상 실패해 버렸습니다.
우리의 해결책은 당신이 삽입한 쿼리의 데이터를 사용하여 그 데이터를 사용하여 결과를 검색하는 것이었습니다.어쨌든 당신은 마지막 아이디를 찾는 요청을 하고 있습니다.따라서 SELECT ID FROM 테이블(field=var 및 field=var)을 실행하여 ID를 가져옵니다.쿼리에 약간의 퍼포먼스가 있었지만 훨씬 더 신뢰할 수 있는 결과가 반환되었습니다.
마지막으로 삽입된 행 _id는 다음을 사용하여 얻을 수 있습니다.last_insert_rowid()
샘플 코드는 다음과 같습니다.
/**
* Return Last inserted row id(auto incremented row) (_id)
* @return
*/
public int getLastAddedRowId() {
String queryLastRowInserted = "select last_insert_rowid()";
final Cursor cursor = database.rawQuery(queryLastRowInserted, null);
int _idLastInsertedRow = 0;
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
_idLastInsertedRow = cursor.getInt(0);
}
} finally {
cursor.close();
}
}
return _idLastInsertedRow;
}
언급URL : https://stackoverflow.com/questions/5409751/get-generated-id-after-insert
'sourcecode' 카테고리의 다른 글
mockito를 사용한 개인 메서드 테스트 (0) | 2022.09.22 |
---|---|
PHP 문자열 끝에 있는 모든 특정 문자를 제거하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
MariaDB에 의해 암호화된 유휴 데이터를 확인하는 방법 (0) | 2022.09.22 |
문자열의 특수 문자를 대체하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
$CI = & get_sublic(); 설명 (0) | 2022.09.21 |