2017-12-28 29 views
-1

TABLE_STOCKUNITに挿入するとjava.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabaseが得られます。 TABLE_PRODUCTに挿入すると、そのような問題はありません。db.insert()の後にdb.close()が呼び出されるため、問題が発生する理由を教えてください。java.lang.IllegalStateExceptionデータベースに挿入するとき

public long addProduct(ProductDescription product, int quantity) { 
    long rows; 
    SQLiteDatabase db=null; 
     try { 
      db = this.getWritableDatabase(); 
      ContentValues value = new ContentValues(); 
      value.put("producttype_id", 0); 
      value.put("barCode", product.getId()); 
      value.put("name", product.getName()); 
      value.put("value", product.getPrice()); 
      value.put("measure_id", 0); 
      value.put("precision", 0); 
      rows = db.insert(TABLE_PRODUCT, null, value); 


     } catch (Exception e) { 
      e.printStackTrace(); 
      return -1; 
     } 

     try { 
      ContentValues value = new ContentValues(); 
      value.put("stock_id", 0); 
      value.put("product_id", getProductByBarCode(product.getId()).getKey()); 
      value.put("qty", quantity); 
      long row = db.insert(TABLE_STOCKUNIT, null, value); //java.lang.IllegalStateException 


      db.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return -2; 
     } 


    return rows; // return rows inserted. 
} 
+3

あなたは、私が二番目が行われる前に、データベースを閉じてどこかに推測何 'db'が第二' try'ブロック –

+0

にある定義されていません。デバッグに 'db.isOpen()'を追加してみてください。 –

+0

@ R2Rこれは明白なタイプミスであるので、これがどのように欺瞞であるかわかりません –

答えて

0

は、この呼び出しは挿入が行われるまで(もしあれば)停止され、メインスレッドと他のスレッドによって、他のすべての操作により、最最も優先されていることを確認するために、このようウル最初SQLiteDatabaseのデシベルの挿入を同期:

synchronized(db) { 
     try { 
     db = this.getWritableDatabase(); 
     ContentValues value = new ContentValues(); 
     value.put("producttype_id", 0); 
     value.put("barCode", product.getId()); 
     value.put("name", product.getName()); 
     value.put("value", product.getPrice()); 
     value.put("measure_id", 0); 
     value.put("precision", 0); 
     rows = db.insert(TABLE_PRODUCT, null, value); 


    } catch (Exception e) { 
     e.printStackTrace(); 
     return -1; 
    } 

    } 
関連する問題