SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

setel sqlite db dengan benar di android

Dalam readPos metode, bukan :-

Cursor cursor = db.rawQuery("SELECT " + LAST_BTN + " FROM "
                +TABLE_NAME+" WHERE " + _ID +" =? " });

Anda harus memiliki :-

Cursor cursor = db.rawQuery("SELECT " + LAST_BTN + " FROM "
            +TABLE_NAME+" WHERE " + _ID +" =? ",new String[]{_id});

Kode di atas berfungsi dengan baik sebelum perubahan. Sekarang updatePos memberikan nilai yang benar tetapi readPos selalu mengembalikan nol ....

Menggunakan cursor.getInt(cursor.getColumnIndex(LAST_BTN)) akan, kecuali nilai di kolom LAST_BTN adalah numerik, mengembalikan 0 (tidak dapat mengubah string menjadi angka sehingga mengembalikan 0). Dari uraian Anda tentang masalah tersebut, tampaknya nilai yang disimpan di kolom LAST_BTN tidak sepenuhnya numerik.

  • Jika Anda ingin mendapatkan nilai yang secara unik mengidentifikasi baris, kembalikan id kunci utama ke kolom id.

Anda juga tidak perlu meneruskan last_btn ke readPos metode, jadi bisa menggunakan public int readPos(String _id) alih-alih public int readPos(String _id, int last_btn) .

Selain itu, Anda membiarkan kursor terbuka, terlalu banyak kursor terbuka dan Aplikasi akan macet. Saya sarankan mempertimbangkan hal berikut:-

public int readPos(String _id) {
    int rv = 0;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT " + LAST_BTN + " FROM "
            +TABLE_NAME+" WHERE " + _ID +" =? ",new String[]{_id});
    if(cursor.moveToFirst()) {
        rv = cursor.getInt(cursor.getColumnIndex(LAST_BTN));
    }
    cursor.close();
    return rv;
}

Namun, perubahan di atas TIDAK AKAN menyelesaikan masalah bahwa readPos akan mengembalikan 0 jika nilai yang disimpan di kolom LAST_BTN non-numerik mis. jika "A1234" maka hasilnya adalah 0, jika "1234" maka 1234 akan dikembalikan.

Contoh

Gunakan kode Anda (tetapi dengan metode readPos yang disarankan) lalu gunakan yang berikut:-

    DBHelper dbHelper = new DBHelper(this);
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    db.execSQL("INSERT INTO " + DBHelper.TABLE_NAME
            + "(_id,LAST_BTN,button_no)"
            + "VALUES "
            + "('test1','last_button1','button1')"
            +  ",('test2','last_button2','button2')"
            + ",('test3','last_button3','button3')"
            + ",('test4','199','button4')"
            + ";"
    );

    Log.d("DBINFO","Result of readPos for test1 is " + dbHelper.readPos("test1")); // 0 as last_button1 is not a number
    Log.d("DBINFO","Result of readPos for test2 is " + dbHelper.readPos("test2")); // 0 as last_button2 is not a number
    Log.d("DBINFO","Result of readPos for test3 is " + dbHelper.readPos("test3")); // 0 as last_button3 is not a number
    Log.d("DBINFO","Result of readPos for test4 is " + dbHelper.readPos("test4")); // 199 as 199 is a number
    Log.d("DBINFO","Result of readPos for test5 is " + dbHelper.readPos("test5")); // 0 as no row found

Hasil dalam :-

D/DBINFO: Result of readPos for test1 is 0
D/DBINFO: Result of readPos for test2 is 0
D/DBINFO: Result of readPos for test3 is 0
D/DBINFO: Result of readPos for test4 is 199
D/DBINFO: Result of readPos for test5 is 0

yaitu sesuai dengan komentar test1-test3 kembalikan 0 bukan karena baris tidak ditemukan tetapi karena string yang disimpan di kolom LAST_BTN tidak dapat dikonversi ke angka, jadi alih-alih mogok, API SQLite mengonversinya menjadi 0. test4 diekstraksi dan nilai bukan 0 dikembalikan karena nilai yang disimpan di LAST_BTN dapat dikonversi (mewakili) ke angka. tes5 tidak ada dalam database sehingga 0 dikembalikan karena baris tidak ditemukan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ruang Android:Bagaimana Cara Memigrasikan Penggantian Nama Kolom?

  2. Tambahkan Kolom ke Tabel yang Ada di SQLite

  3. Bagaimana cara membuat tabel dengan dua atau lebih kunci asing menggunakan Android Room?

  4. Cara mendapatkan baris di SQLite dengan indeks (bukan dengan id)

  5. Ekspor Database SQLite Ke File CSV