2011-10-19 24 views
0

sqliteデータベースのテーブルに行を挿入しようとしていますが、insertOrThrow()メソッド(Class Sqlitedatabase)を呼び出すと、この例外が発生します: "ここで開かれたカーソルまたはデータベースオブジェクト」android sqliteの例外カーソルまたはデータベースが閉じられません

私は理由を理解していない:ここ

はメインクラスのコードです:

  ........ 
     ContentValues values = new ContentValues(); 
     values.put("nome", info.getString("nome")); 
     values.put("ingredienti", info.getJSONObject("ingredienti").toString()); 
     values.put("descrizione", info.getString("descrizione")); 
     values.put("persone", info.getString("persone")); 
     values.put("tempo", info.getString("tempo")); 
     values.put("facilita", info.getString("facilita")); 
     if(info.getString("url_foto")!="/images/ricettapredefinita.jpg") 
      values.put("foto", true); 
     else 
      values.put("foto", false); 
     values.put("categoria", info.getString("categoria")); 
     values.put("zona", info.getString("regione")); 
     values.put("ethnos", info.getString("etnica")); 
     values.put("voto", info.getString("voto")); 
     // Open database 
     DbAdapter mDbHelper = new DbAdapter(Main.this); 
     mDbHelper.open_w(); 
     long ritorno=mDbHelper.createRecipe(values); 

これらはDbAdapterクラスのための主な方法です

private static final String DATABASE_CREATE = 
    "CREATE TABLE recipes (" + 
    "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 
    "nome VARCHAR(255) NOT NULL," + 
    "ingredienti TEXT NOT NULL," + 
    "descrizione TEXT " + 
    "persone SMALLINT," + 
    "tempo TINYINT(3)," + 
    "facilita SMALLINT," + 
    "foto BOOL," + 
    "voto TINYINT(3)," + 
    "categoria VARCHAR(255)," + 
    "zona VARCHAR(255)," + 
    "ethnos VARCHAR(255));"; 
public long createRecipe(ContentValues info) { 
    return mDb.insertOrThrow(DATABASE_TABLE, null, info); 
} 
private static class DatabaseHelper extends SQLiteOpenHelper { 
    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS notes"); 
     onCreate(db); 
    } 
} 
public DbAdapter open_w() throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 

誰でも問題の可能性について考えていますか?

+0

アクティビティの停止または破棄メソッドでデータベースを閉じます。 mDbHelper.close() – user370305

+0

アプリケーションごとに1つのDBインスタンスしか作成しない、参照:http://stackoverflow.com/questions/7444327/how-to-initialize-sqlite-database-once-from-a-helper-class-in -android/7446028#7446028 –

+0

どうすればいいのですか? DBのインスタンスはいくつ作成できましたか? –

答えて

1

最後にmDbHelper.close()を追加してください。

+0

何が終了しましたか?今私は、createrecipe()内のデータベースを開いて閉じようとしましたが、うまくいきませんでした。 –

1

mDbHelper.close()を追加する必要があります。あなたがもっとmDbHelperを必要としないと確信しているとき。 私はこれを行うことで同じ問題を解決しました。私はあなたのために働くことを望む。

関連する問題