Saya menggunakan SQLite dengan Android, dan saya ingin tahu cara terbaik untuk mendapatkan id yang dihasilkan dari baris yang saya sisipkan.
Sebuah solusi yang menurut saya membuat pencarian setelah penyertaan, tetapi tidak terlihat sebagai cara terbaik.
Jika menggunakan 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) ;
Jika query exec menggunakan
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);
Jika menggunakan Room
@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); }
sumber
Saya memeriksa sumbernya.
insert
metode menggunakansqlite3_last_insert_rowid
fungsi untuk mengembalikan id. Menurut dokumentasi: https://www.sqlite.org/c3ref/last_insert_rowid.html Id baris adalah kolom tersembunyi atau kolom bertipeINTEGER PRIMARY KEY
jika dideklarasikan.Jadi itu
_ID
biasanya kolom defaultsumber
Saya memiliki sedikit masalah dengan ini di mySQL, LAST_INSERT_ID bukan cara yang dapat diandalkan untuk mendapatkan ID, jika Anda memiliki pengguna yang memalu database, ID yang dikembalikan mungkin bukan ID yang dimasukkan oleh kueri yang Anda jalankan, beberapa pengguna lain mungkin berdampak pada kembalinya id ini. Kami memiliki server dengan rata-rata 7000 pengguna per menit dan selalu tersandung.
Solusi yang kami miliki adalah menggunakan data dari kueri yang Anda sisipkan, lalu mencari hasil tersebut menggunakan data tersebut. Anda tetap melakukan permintaan untuk mencari id terakhir. Jadi Anda sebaiknya melakukan tabel SELECT id FROM di mana field = var dan field = var untuk mendapatkan id. Ini adalah kinerja yang sedikit mengenai kueri, tetapi hasil yang jauh lebih dapat diandalkan dikembalikan.
sumber
Seseorang bisa dengan mudah memasukkan baris terakhir _id menggunakan
last_insert_rowid()
. Kode sampel adalah seperti di bawah ini./** * 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; }
sumber