2016-05-19 4 views
1

Я новичок в SQLITE DB
Я использую эти строки кода для создания БД, таблицы и вставки, извлечения данныхОшибка чтения данных из `Sqlite` DB

try { 
    SQLiteDatabase db = openOrCreateDatabase("Custom_Database", MODE_PRIVATE, null); 
    db.execSQL("Create Table If Not Exists Age (FirstName Varchar, LastName Varchar, age int(3));"); 
    db.execSQL("Insert into Age Values ('Inzimam', 'Tariq', 22);"); 
    Cursor c = db.rawQuery("Select * From Age", null); 
    c.moveToFirst(); 
    Toast.makeText(getApplicationContext(), c.getString(c.getColumnIndex("pName")) + " " + c.getString(c.getColumnIndex("fName")), Toast.LENGTH_SHORT).show(); 
    Toast.makeText(getApplicationContext(), "Database Created Your code is working ! ", Toast.LENGTH_SHORT).show(); 
    c.moveToNext(); 
    db.close(); 
}catch (Exception e){ 
    Toast.makeText(getApplicationContext(), "Error : " +e.getMessage(), Toast.LENGTH_LONG).show(); 
} 

Но он бросает exception Не удалось выполнить строку 0, столбец -1 с CursorWinsow. Убедитесь, что курсор инициализирован правильно, прежде чем получать доступ к данным .

Я думаю, что c.moveToFirst(); должен делать эту работу для этого Но его не делать, почему?

Как работает тот же код в другом проекте. В чем причина его ошибки в этом приложении?

Edit: После сохранения FisrtName и LastName в строки и использования строк в тосте работает отлично, как

String name = c.getString(0); 
String father = c.getString(1); 
Toast.makeText(getApplicationContext(), "Name = " + name + " " + father, Toast.LENGTH_SHORT).show(); 

Но я интересно, в чем разница, получая данные в Toast или Strings

Спасибо

ответ

0

попробуйте этот способ используя do => в то время как:

if (c.moveToFirst()) { //looping through all rows 
     do { 
    Toast.makeText(getApplicationContext(), c.getString(c.getColumnIndex("pName")) + " " + c.getString(c.getColumnIndex("fName")), Toast.LENGTH_SHORT).show(); 
    Toast.makeText(getApplicationContext(), "Database Created Your code is working ! ", Toast.LENGTH_SHORT).show(); 

     } while (c.moveToNext()); 
    } 
    c.close(); 
    db.close(); 

также вам нужно добавить:

 db = this.getWritableDatabase(); 

перед:

Cursor c = db.rawQuery("Select * From Age", null); 
+0

Добавляя 'дб = this.getWritableDatabase();' ее дает синтаксическую ошибку «Не удалось разрешить' getWritableDatabase(); 'метод –

+0

попробуйте без этой строки и скажите мне, где вы используете это в фрагменте или действии –

+0

Я попробовал его в' onCreate() 'method –

Смежные вопросы