0

「InitDatabase()」は「inserRecord()」と呼ばれますが、毎回例外が表示され、insertRecord ()で DB(データベース) を閉じるコードがあるcloseDatabase()も呼び出しました。

1. データ実行時の挿入中のエラー:

プログラムの開始時にinsertRecord()を使用してレコードを入力しますが、これは正常に機能しますが、実行時にレコードを挿入すると新しい行IDが返されますがselect * from table、最後に挿入されたレコードは表示されません

2. カーソルを HashMap に格納します。

そのアプリで必要に応じて、カーソルをさらにハッシュマップに保存するのは良いことですか。

public SQLiteDatabase initDatabase(){
    Log.v("XIG","creating or opening database.");
    db_helper= new DatabaseHelper(context,dbname,1);
    DB = context.openOrCreateDatabase(dbname,SQLiteDatabase.CREATE_IF_NECESSARY, null);
    DB.setVersion(1);
    DB.setLocale(Locale.getDefault());
    DB.setLockingEnabled(true);
    DB = db_helper.getWritableDatabase();
    return DB;
}


public void insertRecord(String Table,String columnId[],String value[],String typeOfValue[]){
    initDatabase();
    Log.v("XIG","creating new record.");
    ContentValues new_record = new ContentValues();
    for(int i=0; i<columnId.length; i++){
        if(typeOfValue[i].equals("INT")){
            new_record.put(columnId[i],Integer.parseInt(value[i]));
        }
        else{
            new_record.put(columnId[i],value[i]);
        }
    }
    long rowid;
    try{
        DB.beginTransaction();
        rowid = DB.insert(Table,null,new_record);
        DB.setTransactionSuccessful();
    }
    finally{
        DB.endTransaction();
    }
    Log.v("XIG","inserted rowid in "+Table+": "+rowid);
    closeDatabase();
}

例外:

initDatabase() method shows exception :
07-12 13:15:32.415: E/SQLiteDatabase(13643): close() was never explicitly called on database '/data/data/com.app/databases/mydb3' 
07-12 13:15:32.415: E/SQLiteDatabase(13643): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
4

4 に答える 4

0

更新のたびにデータベースを開いたり閉じたりしないでください。

アプリケーションの起動時にデータベースを 1 回開きます。わざわざデータベースを閉じないでください。全体で単一のデータベース接続を再利用します。この方法では、コードがはるかに単純になり、何も失うことはありません。

于 2012-07-12T09:58:05.733 に答える