尝试在sqlite android中选择时发生错误

时间:2019-03-27 14:16:30

标签: android sqlite

所以我最近学会了使用sqlite在android中编写代码,我尝试从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的值,谢谢

3 个答案:

答案 0 :(得分:1)

可能您需要使用'而不是"。因此,将查询更改为以下内容:

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

我建议您像这样使用SQLiteDatabase.query()而不是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

请看看Read information from a database

答案 1 :(得分: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。
注意:在if块中删除该cursor.moveToFirst();,因为它已经执行了。

答案 2 :(得分:0)

如果要从TABLE_CONTACTS获取所有列数据,请使用SELECT * FROM