Używam poniższego kodu do pobrania rekordu sqlite w mojej aplikacji na Androida. Ten kod pobiera wartości liczbowe, ale nie pobiera wartości alfanumerycznych.

Np.: gdy „tempno” wynosi 2, rekord jest pobierany, ale nie jest pobierany, gdy „tempno” wynosi 2A.

Wszystkie używane przeze mnie zmienne są typu danych „String”.

public Map<String, Object> getDetails(String tempno) throws SQLException{
    Map<String, Object> map = new HashMap<String, Object>();
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "=" + tempno, null, null, null, null, null);

Dzwonię poniżej kodu z innej klasy.

Daj mi znać, gdzie idę źle.

Map<String, Object> temp = dbAdapt.getDetails(tempno);

Poniżej znajduje się błąd w Logcat

  09-26 18:42:52.108: E/AndroidRuntime(2363): android.database.sqlite.SQLiteException: unrecognized token: "2A": , while compiling: SELECT DISTINCT source, destination, routelength, note FROM route WHERE routeno=2A
0
User210282 26 wrzesień 2012, 18:21

2 odpowiedzi

Najlepsza odpowiedź

Zmień to do tego:

public Map<String, Object> getDetails(String tempno) throws SQLException{       
  Map<String, Object> map = new HashMap<String, Object>();     
  Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "='" + tempno+"'", null, null, null, null, null); 


//ROUTENO + "='" + tempno+"'", 

To jest szybkie i brudne rozwiązanie, ale działa. Nie jest to typowy sposób umieszczania wartości w ciągu sql.

2
s_bei 26 wrzesień 2012, 18:26

Użyj podstawienia parametru query zamiast własnego:

public Map<String, Object> getDetails(String tempno) throws SQLException{
    Map<String, Object> map = new HashMap<String, Object>();
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "= ?", new String[] { tempno }, null, null, null, null);
0
323go 26 wrzesień 2012, 18:48