Проблема с выбором SQLite

#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();
      }
   }
 

}