#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»))