2013-05-29 13 views
6

kiedy wykonuję to zapytanie otrzymuję "android.database.sqlite.SQLiteException: brak takiej kolumny" jaki jest błąd?android.database.sqlite.SQLiteException: brak takiej kolumny

public Cursor Getupdate(String rid) throws SQLException 
     { 

Cursor m1Cursor = db.rawQuery("SELECT _id FROM Meeting where meet="+rid , null); 
    if (m1Cursor != null) {   
     if(m1Cursor.getCount() > 0) 
     { 

      m1Cursor.moveToFirst(); 
     } 
    } 
return m1Cursor; 
} 

logcat

05-28 01:22:27.999: E/AndroidRuntime(1411): FATAL EXCEPTION: main 
05-28 01:22:27.999: E/AndroidRuntime(1411): android.database.sqlite.SQLiteException: no such column: ttyuhomk: , while compiling: SELECT _id FROM Meeting where meet=rage 

Odpowiedz

24

Dla danych typu łańcuch zawsze używać cytatów jak ten ' "+ pozbyć +"'” od RID jest String masz błąd.

Należy użyć + pozbyć tylko wtedy pozbyć się int.

+0

uratowałeś mnie! thnxx drodzy !! –

16

trzeba użyć apostrofu (') tam, gdzie sprawdzanie pkt .. jak

db.rawQuery("SELECT _id FROM Meeting where meet='"+rid+"'" , null); 
+0

WEL Pokazałem l. Co jeśli rid był typem int? czy napiszę to jako "SELECT _id FROM Meeting gdzie meet =" + rid – user3833732

4

Albo, jeszcze lepiej, użyj PreparedStatement i powiązać zmienne. Uwalni ci struny i daty. Pomoże to również w przypadku problemów z iniekcją SQL.

Czy są jeszcze osoby, które o tym nie wiedzą?

5

można również używać w takim stanie.

db.rawQuery("SELECT _id FROM Meeting where meet=?" , 
      new String [] {rid}); 

będzie to również rozwiązanie dla problemu SQL injection.

+1

Argumenty '?' Są dobre, po prostu nie ma przeciążenia 'String.valueOf (String)' – laalto

+1

Oh! Przepraszam. W rzeczywistości wygląda na to, że wygląda to tak, jak db.rawQuery ("SELECT _id FROM Meeting, gdzie meet =?", New String [] {rid}); Dziękuję za uwagę dla mojego kodu. –

+0

Świetna odpowiedź. Po prostu potrzebujesz wyjaśnienia, w jaki sposób może pomóc rozwiązać problem z iniekcją SQL – VVB

Powiązane problemy