Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLiteException: Unrecognized token when reading from database

I've created an SQLite database inside application, populated it and now I'm trying to read from it. The app keeps crashing and this is the logcat I receive:

12-30 05:53:18.008: E/AndroidRuntime(6205): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testparsing/com.example.testparsing.Urnik}: android.database.sqlite.SQLiteException: unrecognized token: "4c" (code 1): , while compiling: SELECT predmet FROM predmeti WHERE dan=PONEDELJEK and ura=2 and oddelek=4c

Function for reading from database:

Cursor getSubject(String dan, int ura, String oddelek){
    String[] columnNames = new String[1];
    columnNames[0] = SQLiteHelper.PREDMET;
    String selection = SQLiteHelper.DAN+"="+dan+" and "+SQLiteHelper.URA+"="+ura+" and "+SQLiteHelper.ODDELEK+"="+oddelek;
    open();
    return db.query(
            SQLiteHelper.IME_TABELE, 
            columnNames, 
            selection, 
            null, null, null, null);
}

How I'm trying to read:

TextView tw1p = (TextView) findViewById(R.id.tview1p);
DatabaseHandler db = new DatabaseHandler(getApplicationContext());

Cursor c = db.getSubject("PONEDELJEK", 2, "4c");
String predmet = c.getString(c.getColumnIndex(SQLiteHelper.PREDMET));
tw1p.setText(predmet);

A screenshot of table, just to prove that oddelek "4c" in fact does exist: enter image description here

like image 614
Guy Avatar asked Dec 30 '13 11:12

Guy


3 Answers

SELECT predmet FROM predmeti WHERE dan=PONEDELJEK and ura=2 and oddelek=4c

You need to quote your string literals, for example:

SELECT predmet FROM predmeti WHERE dan='PONEDELJEK' and ura=2 and oddelek='4c'

But it's better to use ? placeholder for literals:

SELECT predmet FROM predmeti WHERE dan=? and ura=? and oddelek=?

and change your null selectionArgs to

new String[] { dan, Integer.toString(ura), oddelek }
like image 143
laalto Avatar answered Nov 20 '22 03:11

laalto


String selection = SQLiteHelper.DAN+"="+dan+" and "+SQLiteHelper.URA+"="+ura+" and "+SQLiteHelper.ODDELEK+"='"+oddelek+"'";

Replace with this and check

like image 23
Renjith Krishnan Avatar answered Nov 20 '22 04:11

Renjith Krishnan


issue is due to missing quotes only :-

Example

 db.delete(TABLE_NA,E, ADDRESS + "= '" + address + "'", null);

Please check below field + "= '" + address + "'"

{Issue as address is string so it should be under 'address' }

like image 1
sharma_kunal Avatar answered Nov 20 '22 04:11

sharma_kunal