在我的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