2010-08-28 7 views
5

Moim ostatecznym celem jest ograniczenie liczby rekordów, które można utworzyć, aby móc mieć wersję próbną mojej aplikacji. Myślę, że mogę to zrobić po prostu zwracając zmienną typu int w ciągu instrukcji sqlite i używając prostej instrukcji IF, aby ustalić, czy powinien zostać utworzony nowy rekord.Zwróć liczbę rekordów w zmiennej, Sqlite, Android, Java

nazywam tak:

 
int jcount = 0; 
      mDbHelper.countjournals(jcount); 

Teraz próbuję wykonać to

 
public int countjournals(int jcount){ 
      mDb.execSQL(jcount + " = SELECT COUNT(*) FROM "+DATABASE_JOURNAL_TABLE); 
      return jcount; 
     } 

błąd, że otrzymaliśmy:

 

08-27 22:42:32.417: ERROR/AndroidRuntime(3976): android.database.sqlite.SQLiteException: near "0": syntax error: 0 = SELECT COUNT(*) FROM journals 

+0

myślę będziesz musiał podać dodatkowe informacje, aby uzyskać akceptowalną odpowiedź –

+0

wybrałam moją odpowiedź, ponieważ to właśnie dla mnie zadziałało. Chociaż wygląda, przynajmniej dla mnie, że wszyscy powinni pracować. – Brian

Odpowiedz

14

Obie odpowiedzi przewidziane wydawało mi się, że powinno działać, ale nie mogłem im. Znalazłem trzecie rozwiązanie, które działa na mnie.

 
    public long countjournals() { 

      return DatabaseUtils.queryNumEntries(mDb,DATABASE_JOURNAL_TABLE); 

     } 
+0

Bardzo niesamowite, brakowało mi klasy DatabaseUtils – orip

3

Zapytanie jest nieprawidłowy, lepiej sposób zrobienia tego, czego potrzebujesz:

public int countjournals() { 
     Cursor dataCount = mDb.rawQuery("select count(*) from" + DATABASE_JOURNAL_TABLE, null); 
     dataCount.moveToFirst(); 
     int jcount = dataCount.getInt(0); 
     dataCount.close(); 
     return jcount; 
    } 

Nota boczna: Należy również pamiętać, że nie można używać zmiennych pierwotnych jako odniesień (i z twojego kodu wygląda na to, że próbujesz to zrobić), również nie możesz przekazywać odniesień do zapytań SQLite. Zamiast tego wystarczy przypisać wynik metody (zapytanie) do swojej zmiennej.

+0

brak błędów, ale tylko daje mi liczbę 1, gdy jest ich więcej. – Brian

+0

Może to być z dwóch powodów: 1 - jest tylko jeden rekord, 2 - prawdopodobnie jest ich więcej, ale tylko 1 został już zatwierdzony do bazy danych. Fragment kodu jest prawie w 100% kopią mojej produkcji, więc jestem całkowicie pewien, że jest poprawny. –

+0

Dla mnie wygląda na to, że powinno działać. Co masz na myśli przez już popełnione? – Brian

6
public int countjournals() { 
    SQLiteStatement dbJournalCountQuery; 
    dbJournalCountQuery = mDb.compileStatement("select count(*) from" + DATABASE_JOURNAL_TABLE); 
    return (int) dbJournalCountQuery.simpleQueryForLong(); 
} 
+0

, co powinno być zdefiniowane jako dbJournalCountQuery? – Brian

+0

zaktualizowany kod, SQLiteStatement dbJournalCountQuery; –

+0

To również działa. Ale nadal uzyskuję tylko 1, gdy są 4 – Brian

1

Wystarczy wstawić spację po from startowym to działa .....

Cursor dataCount = mDb.rawQuery("select count(*) from " + DATABASE_JOURNAL_TABLE, null); 
Powiązane problemy