Saya mencoba membuat formulir Login sederhana, di mana saya membandingkan id login dan kata sandi yang dimasukkan di layar login dengan yang disimpan di database.
Saya menggunakan kueri berikut:
final String DATABASE_COMPARE =
"select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ;
Masalahnya adalah, saya tidak tahu, bagaimana saya bisa menjalankan kueri di atas dan menyimpan hitungan yang dikembalikan.
Berikut tampilan tabel database (saya berhasil membuat database dengan sukses menggunakan metode execSQl)
private static final String
DATABASE_CREATE =
"create table users (_id integer autoincrement, "
+ "name text not null, uname primary key text not null, "
+ "pwd text not null);";//+"phoneno text not null);";
Dapatkah seseorang dengan baik hati membimbing saya tentang bagaimana saya dapat mencapai ini? Jika memungkinkan, berikan cuplikan contoh untuk melakukan tugas di atas.
SELECT COUNT(*)
danqueryNumEntries()
daripada mengambil semua catatan dan melihat berapa banyak yang ada, yaitu.cursor.getCount()
@scottyab parametrized DatabaseUtils.queryNumEntries (db, table, whereparams) ada di API 11 +, yang tanpa whereparams ada sejak API 1 . Jawabannya harus membuat Cursor dengan db.rawQuery:
Cursor mCount= db.rawQuery("select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass +"'", null); mCount.moveToFirst(); int count= mCount.getInt(0); mCount.close();
Saya juga menyukai jawaban @ Dre, dengan kueri berparameter.
sumber
mCount.getInt()
adalahcolumnindex
. Terima kasih atas bantuannya!Gunakan SQLiteStatement .
misalnya
SQLiteStatement s = mDb.compileStatement( "select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass + "'; " ); long count = s.simpleQueryForLong();
sumber
?
s dalam kueri lalu menggunakanbindString(int, String)
danbindLong(int, long)
untuk menyisipkan nilai. Lihat disini .Lihat rawQuery (String, String []) dan dokumentasi untuk Cursor
Pernyataan DADABASE_COMPARE SQL Anda saat ini tidak valid,
loginname
danloginpass
tidak akan di-escape, tidak ada spasi antaraloginname
danand
, dan Anda mengakhiri pernyataan dengan); dari pada ; - Jika Anda masuk sebagai bob dengan kata sandi kata sandi, pernyataan itu akan berakhir sebagaiselect count(*) from users where uname=boband pwd=password);
Selain itu, Anda mungkin harus menggunakan fitur selectionArgs, daripada menggabungkan nama login dan loginpass.
Untuk menggunakan selectionArgs, Anda harus melakukan sesuatu seperti
final String SQL_STATEMENT = "SELECT COUNT(*) FROM users WHERE uname=? AND pwd=?"; private void someMethod() { Cursor c = db.rawQuery(SQL_STATEMENT, new String[] { loginname, loginpass }); ... }
sumber
Dengan asumsi Anda sudah memiliki
db
koneksi Database ( ), menurut saya cara paling elegan adalah tetap menggunakanCursor
kelas, dan melakukan sesuatu seperti:sumber
cara mendapatkan kolom hitung
final String DATABASE_COMPARE = "select count(*) from users where uname="+loginname+ "and pwd="+loginpass; int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null);
Ini alternatif paling ringkas dan tepat. Tidak perlu menangani kursor dan penutupnya.
sumber
Jika Anda menggunakan ContentProvider, Anda dapat menggunakan:
sumber
Jika Anda ingin mendapatkan jumlah record maka Anda harus menerapkan grup pada beberapa bidang atau menerapkan kueri di bawah ini.
Suka
db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);
sumber
Cara lain akan menggunakan:
pada kursor seperti:
Jika Anda bisa berpikir untuk menjauh dari kueri mentah.
sumber
int nombr = 0; Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null); nombr = cursor.getCount();
sumber