在我的android應用程序中,我使用sqlite數據庫,但使用查詢從SQLite中讀取數據時,它給了我錯誤。這是我創建表的代碼。「無法重新打開一個已經關閉的對象」,當從sqlite讀取數據時android
package com.example.mydb;
public class Dbadapter {
private static final String DATABASE_NAME = "mydb";
private static final int DATABASE_VERSION = 5;
private static final String DATABASE_TABLE18 = "modalation_medicine_table";
private static final String MOD_ID = "modalation_previousss_id";
private static final String MOD_MED_ID = "modalation_medicine_id";
private static final String MOD_MEDICINE = "modalation_medicine";
private static final String CREATE_DATABASE_TABLE18 = "CREATE TABLE IF NOT EXISTS "
+ DATABASE_TABLE18
+ " ("
+ MOD_MED_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ MOD_MEDICINE
+ " text, "
+ MOD_ID
+ " integer, "
+ " FOREIGN KEY ("
+ MOD_ID
+ ") REFERENCES "
+ DATABASE_TABLE5
+ " ("
+ MODALATION_KEY_ID
+ "));";
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_DATABASE_TABLE18);
ContentValues modalation_medicine = new ContentValues();
modalation_medicine.put(MOD_MEDICINE, "Natrum Muriaticum");
modalation_medicine.put(MOD_ID, 1);
db.insert(DATABASE_TABLE18, null, modalation_medicine);
modalation_medicine.put(MOD_MEDICINE, "Calcarea Carbonica");
modalation_medicine.put(MOD_ID, 1);
db.insert(DATABASE_TABLE18, null, modalation_medicine);
modalation_medicine.put(MOD_MEDICINE, "Phosphorus");
modalation_medicine.put(MOD_ID, 1);
db.insert(DATABASE_TABLE18, null, modalation_medicine);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE18);
}
}
public Dbadapter(Context c) {
ourContext = c;
}
public Dbadapter open() throws SQLException{
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close() {
ourHelper.close();
}
現在,當使用這種方法從我的SQLite數據庫讀取數據M,它給了我一個錯誤「無法重新打開已關閉的對象」。
public boolean mod_app_symps(String l, String modfinalMed) {
String[] modalation = new String[] { MOD_ID, MOD_MEDICINE };
Cursor c24;
boolean iscontain = false;
c24 = ourDatabase.query(DATABASE_TABLE18, modalation, "modalation_previousss_id = ? AND modalation_medicine = ?",new String[] { l , modfinalMed } , null, null, null);
if(c24.getCount() > 0) {
iscontain = true;
}
return iscontain;
}
我試圖通過谷歌解決問題,但沒有任何幫助! P:我有許多其他方法正在做同樣的工作,即從SQLite數據庫讀取數據,並且它們都正常工作。該錯誤僅在此方法中才會出現。
編輯:此方法能正常工作
public String[] getmodMed(long l) {
String[] modalation_med = new String[] { MOD_ID, MOD_MEDICINE};
Cursor c19 = ourDatabase.query(DATABASE_TABLE18, modalation_med, MOD_ID + "='" + l + "'" , null, null, null, null);
String mod_medicine[]= new String[c19.getCount()];
int imodmedicine = c19.getColumnIndex(MOD_MEDICINE);
if(c19 != null){
c19.moveToFirst();
while(!c19.isAfterLast()) {
for(int i =0; i< c19.getCount(); i++) {
mod_medicine[i]= c19.getString(imodmedicine);
c19.moveToNext();
} }
}
return mod_medicine;
}
如果是這樣的問題,則是m用來讀取來自同一DB數據不能正常工作的其他方法。對? – Yamna 2014-11-04 15:30:08
好吧,如果您用此方法關閉數據庫,然後嘗試使用任何其他方法訪問它,問題就會發生。 嘗試評論ourHelper.close();並看看會發生什麼 – SteBra 2014-11-04 15:32:18
好吧,讓我檢查! – Yamna 2014-11-04 15:32:52