Saya mencoba membuat jadwal. Masalahnya adalah saya tidak lulus if(cursor.moveToFirst()) dan setiap kali mengembalikan nol. Saya ingin mengatur string dalam TextView. Basis data saya: masukkan deskripsi gambar di sini

Ini adalah kode databasehelper saya:

` publik String abcd() {

    sqLiteDatabase = this.getReadableDatabase();
    Cursor cursor = sqLiteDatabase.rawQuery("SELECT COLUMN_MONDAY FROM SCHEDULE_TABLE WHERE COLUMN_MONDAY = ? ", null);
    String getmonday = null;


    if(cursor.moveToFirst()) {
        do {

            getmonday = cursor.getString(cursor.getColumnIndex("COLUMN_MONDAY"));
            

        } while (cursor.moveToNext());
    }


    cursor.close();
    sqLiteDatabase.close();
    return getmonday;`

Ini adalah bagaimana saya memasukkan data:

            try {
                //Checken welches Item beim spinnerDay ausgewählt ist und dann in die Datenbank einfügen

                if(spinnerDay.getSelectedItem().equals("Monday")) {
                    scheduleClass = new ScheduleClass(et_Subject.getText().toString(), null, null, null, null, null, null, Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }
                else if(spinnerDay.getSelectedItem().equals("Tuesday")){
                    scheduleClass = new ScheduleClass(null, et_Subject.getText().toString(), null, null, null, null, null, Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }
                else if(spinnerDay.getSelectedItem().equals("Wednesday")){
                    scheduleClass = new ScheduleClass(null, null, et_Subject.getText().toString(), null, null, null, null, Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }
                else if(spinnerDay.getSelectedItem().equals("Thursday")){
                    scheduleClass = new ScheduleClass(null, null, null, et_Subject.getText().toString(), null, null, null, Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }
                else if(spinnerDay.getSelectedItem().equals("Friday")){
                    scheduleClass = new ScheduleClass(null, null,null, null,  et_Subject.getText().toString(), null, null, Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }
                else if(spinnerDay.getSelectedItem().equals("Saturday")){
                    scheduleClass = new ScheduleClass(null, null, null, null, null,  et_Subject.getText().toString(), null, Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }
                else {
                    scheduleClass = new ScheduleClass(null, null, null, null, null,  null, et_Subject.getText().toString(), Integer.parseInt(spinnerHour.getSelectedItem().toString()), Integer.parseInt(et_Room.getText().toString()), -1);
                    Toast.makeText(ScheduleEingebenActivity.this, scheduleClass.toString(), Toast.LENGTH_LONG).show();
                }


            }catch (Exception e) {
                Toast.makeText(ScheduleEingebenActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
                scheduleClass = new ScheduleClass(null, null, null, null, null, null, null,0, 0, -1);
            }

            ScheduleDatabaseHelper scheduleDatabaseHelper = new ScheduleDatabaseHelper(ScheduleEingebenActivity.this);

            boolean success = scheduleDatabaseHelper.addOne(scheduleClass);

            Toast.makeText(ScheduleEingebenActivity.this, "Success" + success, Toast.LENGTH_LONG).show();
1
Maurice 7 Januari 2021, 15:44

3 jawaban

Jawaban Terbaik

? adalah placeholder yang nilainya harus Anda berikan dalam argumen ke-2 rawQuery().

Tetapi jika yang Anda inginkan hanyalah nilai non null dari kolom COLUMN_MONDAY maka tidak perlu meneruskan nilai parameter apa pun.
Pernyataan sql Anda dapat ditulis sebagai:

SELECT COLUMN_MONDAY FROM SCHEDULE_TABLE WHERE COLUMN_MONDAY IS NOT NULL

Jadi kode Java Anda seharusnya:

Cursor cursor = sqLiteDatabase.rawQuery("SELECT COLUMN_MONDAY FROM SCHEDULE_TABLE WHERE COLUMN_MONDAY IS NOT NULL", null);

Tapi ini, kemungkinan besar akan mengembalikan lebih dari 1 baris, dalam hal ini tidak jelas nilai mana dari semua baris ini yang harus dikembalikan.
Loop dalam kode Anda akan mengembalikan nilai terakhir.

1
forpas 7 Januari 2021, 13:22

SELECT COLUMN_MONDAY FROM SCHEDULE_TABLE WHERE COLUMN_MONDAY = ?

Tidak ada hubungannya dengan java, dan semuanya dengan SQL. WHERE x = NULL tidak mungkin cocok; setiap operasi boolean normal di mana satu atau kedua sisinya NULL, akan selalu diselesaikan ke NULL (yang tidak cocok, jika Anda memasukkannya ke dalam klausa WHERE). Anda sedang mencari WHERE COLUMN_MONDAY IS NULL, dan Anda tidak dapat menggunakan ? untuk itu.

if(cursor.moveToFirst()) {
  do {
    getmonday = cursor.getString(cursor.getColumnIndex("COLUMN_MONDAY"));
  } while (cursor.moveToNext());
}

Anda membuatnya rumit.

while (cursor.moveToNext()) {
   // do stuff here
}

Kursor dimulai 'sebelum baris pertama', jadi 'moveToNext' memindahkannya ke baris pertama (kecuali kueri tidak memberikan hasil, tentu saja).

Dari kode penambahan Anda:

scheduleClass = new ScheduleClass(null, null, null, null, null, null, null,0, 0, -1);

Jadi jika 'ada yang tidak beres', Anda menambahkan baris kosong ke DB aplikasi Anda?

Ketika pengecualian terjadi dan Anda tidak benar-benar tahu mengapa, hal terburuk yang dapat Anda lakukan adalah melanjutkan dengan kode secara membabi buta. Penangan pengecualian apa pun di mana Anda tidak tahu harus selalu, selalu diakhiri dengan throw. Biasanya throw new RuntimeException("Uncaught", e);. Perbaiki bagian ini, untuk kepentingan pengguna Anda.

1
rzwitserloot 7 Januari 2021, 13:06
Cursor cursor = sqLiteDatabase.rawQuery("SELECT COLUMN_MONDAY FROM SCHEDULE_TABLE WHERE COLUMN_MONDAY = ? ", null);

Anda memiliki satu variabel ? dalam kueri tetapi tidak ada nilai untuk mengikatnya. Anda memberikan nilai ke rawQuery sebagai larik dalam argumen kedua, mis.

Cursor cursor = sqLiteDatabase.rawQuery("SELECT COLUMN_MONDAY FROM SCHEDULE_TABLE WHERE COLUMN_MONDAY = ? ",
    new String[] { "Hello" });

Dari komentar:

Terima kasih atas jawabannya, tetapi saya ingin mencari di mana COLUMN_MONDAY != null. Atau saya hanya salah paham?

Dalam hal ini, ubah = ? dalam SQL menjadi IS NOT NULL dan hapus pengikatan variabel.

1
laalto 7 Januari 2021, 13:24