2012-11-02 12 views
7

Jeśli używasz metod SQLite na Androida w metodach rawQuery() lub execSQL(), kiedy powinieneś używać średnika, aby zakończyć wyciąg?Android i SQLite: kiedy używać średników do wyciągów końcowych?

Na przykład na this tutorial autor używa średnika w instrukcji create table (przez execSQL), ale nie w instrukcji select (via rawQuery). Na przykład:

CREATE tabela:

private static final String DATABASE_CREATE = "create table " 
     + TABLE_COMMENTS + "(" + COLUMN_ID 
     + " integer primary key autoincrement, " + COLUMN_COMMENT 
     + " text not null);"; 
database.execSQL(DATABASE_CREATE); 

Wybierz komunikat:

Cursor cursor = getReadableDatabase(). 
    rawQuery("select * from todo where _id = ?", new String[] { id }); 

Czy to przypadek, że oświadczenia wykorzystujące metodę execSQL() trzeba średnik na końcu, ale wypowiedzi za pomocą metoda rawQuery() nie działa?

Odpowiedz

12

Instrukcje SQLite są kończone średnikiem (;). Jeśli jest określony, oznacza to, że jest to koniec polecenia, i że więcej poleceń może podążać za tym średnikiem. Jeśli nie zostanie podany żaden średnik, cały ciąg zostanie uznany za polecenie.

W tym przypadku średnik w oświadczeniu CREATE nie ma znaczenia, ponieważ nic nie podąża za nim.

+1

Gotcha. Dopóki wysyłam jedno polecenie, średnik jest całkowicie opcjonalny? –

+0

@DanielS Prawidłowe. – Eric

+0

Myślę, że to jest to. Jeśli używasz SQL z wiersza poleceń, musisz wstawić średnik, bez względu na wszystko. Wiele interfejsów API SQL wydaje się wskazywać średnik na końcu, jeśli go tam nie ma. –

2

Nigdy nie użyłem średnika w obu i działa

+1

To działa ponieważ za każdym razem przekazujesz tylko jedno zapytanie. – ST3

Powiązane problemy