所以我最近学会了使用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的值,谢谢
答案 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
答案 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