ошибка возникает при попытке выбора в sqlite Android

#java #android #sqlite #android-sqlite

#java #Android #sqlite #android-sqlite

Вопрос:

итак, я недавно научился писать код на Android с использованием sqlite, и я пытаюсь выбрать данные из sqlite, но возникает эта ошибка

я попробовал некоторые предложения из Интернета и прочитал свою книгу, но я не решил свою проблему

 public Penyakit getPenyakit1(String namaGejal){
  SQLiteDatabase db = this.getReadableDatabase();
  String query = "SELECT idPen FROM "   TABLE_CONTACTS   " WHERE "   
  namapen   " =""   namaGejal   """;
  Cursor cursor = db.rawQuery(query,null);
  Penyakit penyakit = new Penyakit();
  if(cursor.moveToFirst()){
    cursor.moveToFirst();
    penyakit.set_nomber(Integer.parseInt(cursor.getColumnName(0)));
    penyakit.set_namaPen(cursor.getColumnName(1));
    penyakit.set_idPenyakit(Integer.parseInt(cursor.getColumnName(2)));
    penyakit.set_namGej(cursor.getColumnName(3));
    penyakit.set_idGejala(Integer.parseInt(cursor.getColumnName(4)));
    cursor.close();
  } else {
    penyakit=null;
  }
  return penyakit;
}
  

это logcat

 Process: com.example.lordbramasta.pakar, PID: 18914
java.lang.NumberFormatException: For input string: "idPen"
    at java.lang.Integer.parseInt(Integer.java:615)
    at java.lang.Integer.parseInt(Integer.java:650)
    at  com.example.lordbramasta.pakar.DBAdapter.getPenyakit1(DBAdapter.java:79)
  

я ожидал, что значение idPen будет выбрано, спасибо

Комментарии:

1. работает ли ваш sql, если вы помещаете его непосредственно в свою базу данных в виде запроса?

2. да, это так, я использую Db browser для sqlite @Livo

3. какая ошибка возникает? у вас есть какой-либо журнал?

4. @PierGiorgioMisley я обновил, извините, я забыл

5. может быть, использовать их `` вокруг idPen?

Ответ №1:

Ваша проблема в этой строке:

 penyakit.set_nomber(Integer.parseInt(cursor.getColumnName(0)));
  

cursor.getColumnName(0) возвращает idPen , поскольку это имя единственного столбца, возвращаемого вашим запросом:

 SELECT idPen FROM ....
  

и ваш код пытается преобразовать строку "idPen" в целое число.
Таким образом, getColumnName() возвращает имя столбца с указанным индексом, а не значение столбца.
Вы должны сделать

 penyakit.set_nomber(Integer.parseInt(cursor.getString(0)));
  

или, если тип данных столбца idPen является INTEGER , то:

 penyakit.set_nomber(cursor.getInt(0));
  

Также не пытайтесь получить какие-либо другие столбцы, потому что ваш запрос возвращает только 1.
Примечание: удалите это cursor.moveToFirst(); внутри блока if, потому что он уже выполнен.

Комментарии:

1. я попробовал ваше предложение, но возникла новая ошибка, ошибка: java.lang. Исключение IllegalStateException: не удалось прочитать строку 0, столбец 2 из CursorWindow. Убедитесь, что курсор инициализирован правильно, прежде чем обращаться к данным из него.

2. Мое предложение касается ошибки, которую вы упомянули в своем вопросе. Если вы изменили свой код и теперь столкнулись с другой ошибкой, отправьте другой вопрос с соответствующим кодом и новой ошибкой.

Ответ №2:

Вероятно, вам нужно использовать ' вместо " . Итак, измените запрос на следующий:

 String query = "SELECT idPen FROM "   TABLE_CONTACTS   " WHERE "   
namapen   " ='"   namaGejal   "'";
  

Я предлагаю вам использовать SQLiteDatabase.запрос () вместо rawQuery, подобный этому:

 // Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
    "idPen"
    };

// Filter results WHERE "namapen" = 'namaGejal'
String selection = "namapen"   " = ?";
String[] selectionArgs = { namaGejal };

// How you want the results sorted in the resulting Cursor
String sortOrder = null; // null for default order

Cursor cursor = db.query(
    TABLE_CONTACTS,         // The table to query
    projection,             // The array of columns to return (pass null to get all)
    selection,              // The columns for the WHERE clause
    selectionArgs,          // The values for the WHERE clause
    null,                   // don't group the rows
    null,                   // don't filter by row groups
    sortOrder               // The sort order
    );


  // do something with the cursor
  

Пожалуйста, взгляните, прочитайте информацию из базы данных

Ответ №3:

Если вы хотите получить данные всех столбцов из вашего TABLE_CONTACTS используйте SELECT * FROM

Комментарии:

1. нет, я не хочу получать все данные, я хочу получить конкретные данные из таблицы tb_penyakit имя столбца idPen

2. Хорошо, в этом случае курсор вернет вам строки с одним столбцом — idPen. Вы можете получить только это значение, используя, например, cursor.getString(0)

3. я пытался использовать cursor.getString, но в приложении с ошибкой что-то вроде не удалось прочитать строку 0, столбец 4 из CursorWindow

4. И какова позиция столбца «idPen» в вашей схеме?

5. С другой стороны, попробуйте использовать cursor.getString(курсор.getColumnIndex(«idPen»))