Я знаю, что этот вопрос, возможно, задавали много раз. Я впервые использую SQLite
в Android. Моя проблема в том, что я хочу сохранить объект при нажатии на кнопку. Я искал на github
и читал статьи о SQLite
. До сих пор я могу сохранить это object
, но не могу получить его, потому что я получаю CursorIndexOutOfBoundsException
при использовании функции getSkip
. кроме того, я не знаю, правильный ли мой код или нет.
Вот мой класс
public class SkippedQuestions {
public static final String TABLE_NAME = "skiptable";
public static final String ID = "id";
public static final String QUESTION = "question";
public static final String ANSONE = "answerone";
public static final String ANSTWO = "answertwo";
public static final String ANSTHREE = "answerthree";
public static final String ANSFOUR = "answerfour";
private int id;
private String question,ans1,ans2,ans3,ans4;
public static final String CREATE_TABLE =
"CREATE TABLE "+TABLE_NAME+"("+
ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
+QUESTION+" TEXT,"
+ ANSONE +" TEXT,"
+ ANSTWO +" TEXT,"
+ ANSTHREE +" TEXT,"
+ ANSFOUR +" TEXT)";
public static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + TABLE_NAME;
public SkippedQuestions() {
}
public SkippedQuestions(int id,String question,String ans1,String ans2,String ans3,String ans4) {
this.id=id;
this.question = question;
this.ans1=ans1;
this.ans2=ans2;
this.ans3=ans3;
this.ans4=ans4;
}
//Then my setter and getter
Мой Database
класс
public class DatabaseHelper extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "skip_db";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SkippedQuestions.CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SkippedQuestions.SQL_DELETE_ENTRIES);
onCreate(db);
}
public boolean insertSkip(String quest,String ans1,String ans2,String ans3,String ans4) {
// get writable database as we want to write data
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(SkippedQuestions.QUESTION,quest);
values.put(SkippedQuestions.ANSONE,ans1);
values.put(SkippedQuestions.ANSTWO,ans2);
values.put(SkippedQuestions.ANSTHREE,ans3);
values.put(SkippedQuestions.ANSFOUR,ans4);
//insert row
db.insert(SkippedQuestions.TABLE_NAME,null,values);
return true;
}
public Cursor getSkip(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT * FROM " + SkippedQuestions.TABLE_NAME + " WHERE " +
SkippedQuestions.ID + "=?", new String[]{Integer.toString(id)});
return res;
}
public ArrayList<SkippedQuestions> getAllSkipped() {
ArrayList<SkippedQuestions> skippes = new ArrayList<>();
// Select All Query
String selectQuery = "SELECT * FROM " + SkippedQuestions.TABLE_NAME + " ORDER BY " +
SkippedQuestions.ID + " DESC";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
SkippedQuestions skippedQuestions = new SkippedQuestions();
skippedQuestions.setId(cursor.getInt(cursor.getColumnIndex(SkippedQuestions.ID)));
skippedQuestions.setQuestion(cursor.getString(cursor.getColumnIndex(SkippedQuestions.QUESTION)));
skippedQuestions.setAns1(cursor.getString(cursor.getColumnIndex(SkippedQuestions.ANSONE)));
skippedQuestions.setAns2(cursor.getString(cursor.getColumnIndex(SkippedQuestions.ANSTWO)));
skippedQuestions.setAns3(cursor.getString(cursor.getColumnIndex(SkippedQuestions.ANSTHREE)));
skippedQuestions.setAns4(cursor.getString(cursor.getColumnIndex(SkippedQuestions.ANSFOUR)));
skippes.add(skippedQuestions);
} while (cursor.moveToNext());
}
// close db connection
db.close();
// return notes list
return skippes;
}
Вот это exception
произошло
i
здесь представлены в индексе ArrayList
моего object'.
And I tried to put 0 instead of
i`, и я получаю то же исключение
Cursor rs = db.getSkip(i);
String quest = rs.getString(rs.getColumnIndex(SkippedQuestions.QUESTION));
if (!rs.isClosed()) {
rs.close();
}