#android #sqlite
#Android #sqlite
Вопрос:
Я написал метод, который должен возвращать строку с данными из запроса select, но он работает не так, как хотелось бы, вот метод:
public String selectorDanych(String kolumna, String log){
String test = "Select " kolumna " from " Usr_TABLE " where " colLogin " ='" log "';";
Cursor cursor2 = sqLiteDatabase.rawQuery(test, null);
return cursor2.toString();
}
он возвращает какую-то строку, но это не то, что я хочу [строка, которую он возвращает, это что-то вроде «SQLite.database.@» и т. д
Комментарии:
1. Попробуйте проголосовать за ответ, плиз.
Ответ №1:
Вы возвращаете внутреннее имя курсора, полученное из запроса, а не какие-либо данные из результатов запроса.
Вы должны использовать что-то вроде:
cursor2.moveToFirst(); // position the cursor at the first returned row
String col = cursor2.getString(the_index_of_the_column_you_want);
cursor2.close();
return col;
Убедитесь, что вы проверили наличие ошибок (возможно, строки вообще не возвращаются), и прочитайте Cursor
документы API.
Ответ №2:
Перепишите свой код как
public String selectorDanych(String kolumna, String log){
String test = "Select " kolumna " from " Usr_TABLE " where " colLogin " ='" log "';";
Cursor cursor2 = sqLiteDatabase.rawQuery(test, null);
//Write these codes
if(cursor2.moveToFirst()) {
cursor2.close(); //You should close your cursor
return cursor2.getString(0); //index of your kolumna field
} else {
cursor2.close(); //You should close your cursor
return null; //Return some error msg, to notify that data not found
}
}
Ответ №3:
Вы можете использовать приведенный ниже код. Вы можете перехватить исключение после блока try. Даже если вы этого не сделаете, вам гарантировано, что close() на курсоре будет вызван! Я также предлагаю всегда использовать английские имена для ваших переменных.
public String selectorDanych(String kolumna, String log){
String test = "Select " kolumna " from " Usr_TABLE " where " colLogin " ='" log "';";
Cursor cursor2 = sqLiteDatabase.rawQuery(test, null);
if (cursor2 != null amp;amp; cursor2.moveToFirst()) {
try { //use try - finally to close the cursor in the finally block
int index_kolumna = cursor2.getColumnIndexOrThrow(kolumna);
String kolumna_val = cursor2.getString(index_kolumna);
} finally {
if (cursor2 != null amp;amp; !cursor2.isClosed()) {
cursor2.close();
}
}
}