2014-11-04 1 views
1

내 안드로이드 응용 프로그램에서 sqlite 데이터베이스를 사용하지만 SQLite에서 데이터를 읽는 쿼리를 사용할 때 오류가 발생합니다. 이 테이블을 만드는 내 코드입니다. 내 SQLite는 DB에서 데이터를 읽기 위해이 방법을 사용하고, 그것은 나에게 "없습니다에 다시 개방 이미 닫힌 객체를"오류를 제공 이제 "닫힌 개체를 다시 열 수 없습니다"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(); 
} 

.

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; 
    } 

Google을 통해 문제를 해결하려했지만 도움이되지 않았습니다. P .: SQLite db에서 데이터를 읽는 것과 같은 작업을 수행하는 여러 가지 방법이 있습니다. 모두 잘 작동합니다. 이 오류에서만 오류가 발생합니다.

편집 :이 방법은 때문에 코드 줄의 발생

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; 
    } 

답변

0

잘 작동 :

public void close() { 
ourHelper.close(); 
} 

당신은 데이터베이스를 닫은 후 다시 액세스하려면.

+0

을 "DB"에 대한 쿼리를 실행의 SQLiteDatabase dB = ourHelper.getWriteableDatabase 당신이 쿼리 직전를 추가하십시오. 권리? – Yamna

+0

이 메서드로 데이터베이스를 닫은 다음 다른 메서드를 사용하여 데이터베이스에 액세스하려고하면 문제가 발생합니다. ourHelper.close()에 대한 의견을 보내주십시오. 그리고 무슨 일이 일어나는가 보자. – SteBra

+0

내가 확인하자. – Yamna

0

"ourDatabase"와 같은 더 많은 코드가 필요합니다. 그 방법을 실행하기 전에 어딘가에서 닫힌 것처럼 들립니다. 이 문제는 다음 작동 안 같은 DB에서 데이터를 읽기 위해 사용하고 다른 방법의 경우,

public boolean mod_app_symps(String l, String modfinalMed) { 
    SQLiteDatabase db = outHelper.getWriteableDatabase(); 
    String[] modalation = new String[] { MOD_ID, MOD_MEDICINE }; 
    Cursor c24; 
    boolean iscontain = false; 
    c24 = db.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; 
} 
관련 문제