2011-12-30 4 views
1

Я искал это на SO и видел это (и тому подобное): sql direct way to get number of rows in table, однако Select показан как токен, как есть. Я попытался использовать mDb.execSQL(), но возвращает только void. Любая помощь в том, как это сделать, будет оценена по достоинству. Код:
public int getRowNumber() {return mDb.execSQL ("SELECT COUNT (*) FROM notes");} Я получаю сообщение об ошибке «Не удается вернуть результат void».Как получить количество строк в базе данных SQL? (Android SDK)

+1

Какой у вас код? Он не должен возвращать пустоту. Метод в указанном вами ответе правильный –

+0

public int getRowNumber() { \t return mDb.execSQL («SELECT COUNT (*) FROM notes»);} Я получаю сообщение об ошибке «Не удается вернуть результат void». Спасибо, что посмотрели. – jersam515

+0

снова прочитайте документацию ... execSQL не для запросов !!!!!!! – Selvin

ответ

2

ошибки вы получаете означает, что ваш метод не может возвращать void. сам execSQL возвращает пустоту, и вы возвращаетесь та же пустотой из вашего собственного метода, который объявляется возвращать INT:

mDB.execSQL(...); // returns void 
return mDB.execSQL(...); // re-returns void 

public int foo() { 
    return void; // error! 
} 

d.android.com link for reference.


Я знаю, что ты уже принял, но вот быстрый & грязный метод тест, который делает то, что вы как бы нужно сделать:

public int testCount() { 
    Cursor c = m_db.rawQuery("select count(*) from mytable", null); 
    int tst = 0; 
    if (c.moveToNext()) { 
     tst = c.getInt(c.getColumnIndex("count(*)")); 
    } 
    c.close(); 
    return tst; 
    } 
+0

Спасибо, как мне заставить его не возвращать пустоту и возвращать результат того, что я ее выполнил? – jersam515

+1

Если вы не можете изменить тип возврата 'execSQL', вам нужно будет сделать что-то еще, например' query', и прочитать возвращенный Cursor, чтобы найти значение int результата, а затем вернуть это из вашего метода. – Pedantic

+0

Большое вам спасибо. – jersam515

1

mDB.execSQL (...); возвращает void и ваш запрос возвращает запрос, поэтому вы получаете ошибку. Вместо этого вы можете использовать запрос (или) rawQuery, например mDb.rawQuery («SELECT COUNT (*) AS cnt FROM notes», null); который возвращает Cursor, из Cursor получает 'cnt'.

+0

Спасибо. – jersam515