在我的应用程序中sqlite Database
,当我运行应用程序 Logcat 时显示我
close() was never explicitly called on database '/data/data/com.MAT.CanadaImmigrationApp/databases/CanadaianImmigrationApp'
E/Database(13822): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
我在谷歌上搜索,我发现
db.close(); // to close your Database,
cur.close(); //to close your cursor
但是我不知道在哪里添加此代码?
DbHelper.class
public class DbHelper extends SQLiteOpenHelper {
// Database attributes
public static final String DB_NAME = "DB_NAME";
public static final int DB_VERSION = 1;
public static final String TABLE_QUESTIONS = "Questions_Answers";
public static final String COLUMN_CHAPTERS = "Chapters";
public static final String COLUMN_QUESTIONS = "Question";
public static final String COLUMN_CORRECT_ANSWER = "Correct_Answer";
public static final String COLUMN_OPT1 = "Answer1";
public static final String COLUMN_OPT2 = "Answer2";
public static final String COLUMN_OPT3 = "Answer3";
public DbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "create table if not exists " + TABLE_QUESTIONS + " ( " + BaseColumns._ID + " integer primary key autoincrement, "
+ COLUMN_CHAPTERS + " text not null, "
+ COLUMN_QUESTIONS + " text not null, "
+ COLUMN_CORRECT_ANSWER + " text not null, "
+ COLUMN_OPT1 + " text not null, "
+ COLUMN_OPT2 + " text not null, "
+ COLUMN_OPT3 + " text not null);";
// Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data.
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+ TABLE_QUESTIONS);
onCreate(db);
}
}
Db_Adapter.class
public class Db_Adapter {
public static final String TABLE_QUESTIONS = "Questions_Answers";
public static final String COLUMN_CHAPTERS = "Chapters";
public static final String COLUMN_QUESTIONS = "Question";
public static final String COLUMN_CORRECT_ANSWER = "Correct_Answer";
public static final String COLUMN_OPT1 = "Answer1";
public static final String COLUMN_OPT2 = "Answer2";
public static final String COLUMN_OPT3 = "Answer3";
public static SQLiteDatabase databasesql;
private DbHelper Android_OpenDb_Helper;
private Context mycontext;
public static List<String> question_Set;
public static List<String> Answers_Set;
public static List<String> Option1;
public static List<String> Option2;
public static List<String> Option3;
public Db_Adapter( Context context)
{
this.mycontext =context;
}
public void close() {
Android_OpenDb_Helper.close();
}
public DbHelper createDatabase()
{
Android_OpenDb_Helper = new DbHelper(mycontext);
databasesql = Android_OpenDb_Helper.getWritableDatabase();
return Android_OpenDb_Helper;
}
public long addToDB(String chapters, String question,
String correctAnswer, String answer1, String answer2, String answer3)
{
return databasesql.insert(TABLE_QUESTIONS,null, createContentValues(chapters,question,correctAnswer,answer1,answer2,answer3));
}
private ContentValues createContentValues(String chapters, String question,
String correctAnswer, String answer1, String answer2, String answer3)
{
ContentValues myContentVal = new ContentValues();
myContentVal.put(COLUMN_CHAPTERS, chapters);
myContentVal.put(COLUMN_QUESTIONS, question);
myContentVal.put(COLUMN_CORRECT_ANSWER, correctAnswer);
myContentVal.put(COLUMN_OPT1, answer1);
myContentVal.put(COLUMN_OPT2, answer2);
myContentVal.put(COLUMN_OPT3, answer3);
return myContentVal;
}
public Cursor readData()
{
return databasesql.query(TABLE_QUESTIONS, new String[]{COLUMN_CHAPTERS,COLUMN_QUESTIONS,COLUMN_CORRECT_ANSWER,COLUMN_OPT1,COLUMN_OPT2,COLUMN_OPT3}, null, null, null, null, null);
}
public Cursor getQuestion()
{
return databasesql.query(TABLE_QUESTIONS, new String[]{COLUMN_QUESTIONS}, null, null, null, null, null);
}
public Cursor getQuizQuestions(int numQ)
{
return databasesql.rawQuery(
"select * from "+ TABLE_QUESTIONS +" ORDER BY RANDOM() LIMIT "
+ numQ, null);
}
public List<String> getQuestions(String difficulty) {
question_Set = new ArrayList<String>();
Answers_Set = new ArrayList<String>();
Option1= new ArrayList<String>();
Option2 = new ArrayList<String>();
Option3 = new ArrayList<String>();
Cursor c = databasesql.rawQuery(
"select * from "+TABLE_QUESTIONS+" where CHAPTERS = ?",
new String[] { difficulty });
while (c.moveToNext()) {
question_Set.add(c.getString(2).trim());
Answers_Set.add(c.getString(3).trim());
Option1.add(c.getString(4).trim());
Option2.add(c.getString(5).trim());
Option3.add(c.getString(6).trim());
}
return question_Set;
}
public int DropTable()
{
return databasesql.delete(TABLE_QUESTIONS, null, null);
}
}
我称这种方法为:
获取问题:
Cursor cursor = DB_Adapter.getQuestion();
对于获取插入:
DB_Adapter.addToDB(Chapters,Question,CorrectAnswer,Answer1,Answer2,Answer3);
请让我知道我应该在哪里添加db.close();
和 cur.close();
谢谢。