Search code examples
javaandroidsqliteandroid-sqlite

error occur when try to SELECT in sqlite android


so i recently learn to write a code in android using sqlite and i try to select data from sqlite but this error occur

ive tried some suggestion from the internet and read my book but i didnt solve my problem

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;
}

this is 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)

i expected the value of idPen get selected , thank you


Solution

  • Your problem is this line:

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

    cursor.getColumnName(0) returns idPen as this is the name of the only column returned by your query:

    SELECT idPen FROM ....
    

    and your code is trying to cast the string "idPen" to an integer.
    So getColumnName() returns the name of the column at a specified index and not the value of the column.
    You should do

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

    or if the data type of the column idPen is INTEGER then:

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

    Also don't try to get any other columns because your query returns only 1.
    Note: remove that cursor.moveToFirst(); inside the if block because it is already executed.