0

作業中のアプリケーションは、動的データではなく静的データを使用しています。したがって、この性質のために、書くのではなく、かなり効率的な方法でデータベースにデータを入力する関数を作成しようとしています

INSERT INTO table (id, name, description, category) VALUES ('1', 'ABC', 'XYZ', 'TRY');

機能は次のとおりです。

// Adding medicine entry
public void addMedicine(String brand, String description, String category) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_BRAND, med.getBrand());
    values.put(KEY_CATEGORY, med.getCategory());
    values.put(KEY_DESCRIPTION, med.getDescription());

    db.insert(TABLE_MEDICINE, null, values);
    db.close();
}


//populating the database
public void populateDB(){
    this.addMedicine(new Medicines("ABC", "XYZ", "ABC"));
    this.addMedicine(new Medicines("Mosard Tab", "Each Film coated tablet contains: Mosapride Citrate Dihydrate - 5mg JP eqv. To Mosapride citrate", "Posted under Tablets"));
}

そして最後に:

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    String CREATE_MED_TABLE = "CREATE TABLE " + TABLE_MEDICINE + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_BRAND + " TEXT,"
            + KEY_DESCRIPTION + " TEXT," + KEY_CATEGORY + " TEXT )";
    db.execSQL(CREATE_MED_TABLE);
    populateDB();
}

しかし、これは私に次のエラーを与えています:

09-18 12:02:29.639: E/AndroidRuntime(13139): FATAL EXCEPTION: main
09-18 12:02:29.639: E/AndroidRuntime(13139): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.geneticalabs/com.geneticalabs.TrailDB}: java.lang.IllegalStateException: getDatabase called recursively

誰でも助けてもらえますか?または、自明ではない方法でデータベースにデータを入力する方法について、他の代替案を提案してください。

また、次の関数を使用してデータをアプリにフェッチしています。

//Getting all the medical entries
public List<Medicines> getAll(){
    List<Medicines> medList = new ArrayList<Medicines>();

    //Select all query 
    String query = "SELECT * FROM "+TABLE_MEDICINE;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor c = db.rawQuery(query, null);

    if(c.moveToFirst()){
        do{
            Medicines med = new Medicines();
            med.setID(Integer.parseInt(c.getString(0)));
            med.setBrand(c.getString(1));
            med.setDescription(c.getString(2));
            med.setCategory(c.getString(3));
            medList.add(med);

        }while(c.moveToNext());
    }
    return medList;
}
4

1 に答える 1

2

新しいものを取得する代わりに、db インスタンスを再利用してみてくださいthis.getWritableDatabase():

public void addMedicine(SQLiteDatabase db, String brand, String description, String category) {
    // all your code
    // but remove this call: db.close();
}

public void populateDB(SQLiteDatabase db){
    this.addMedicine(db, new Medicines("ABC", "XYZ", "ABC"));
    this.addMedicine(db, new Medicines("Mosard Tab", "Each Film coated tablet contains: Mosapride Citrate Dihydrate - 5mg JP eqv. To Mosapride citrate", "Posted under Tablets"));
}

@Override
public void onCreate(SQLiteDatabase db) {
    // your code
    populateDB(db);
}
于 2013-09-18T07:15:25.360 に答える