2017-12-28 6 views
-1

Ich bekomme java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase beim Einfügen in TABLE_STOCKUNIT. Wenn Sie in einfügen, gibt es kein solches Problem. Erzählen Sie mir bitte, warum das Problem auftritt, weil db.close() nach der db.insert() aufgerufen wird?java.lang.IllegalStateException beim Einfügen in die Datenbank

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

Sie definiert haben, nicht das, was 'db' in der zweiten ist' –

+0

ich irgendwo anders auf die Datenbank zu schließen erraten try' zu blockieren, bevor die zweite erfolgt. Versuchen Sie, 'db.isOpen()' zum Debuggen hinzuzufügen. –

+0

@ R2R nicht sehen, wie dieser ein dupe ist, da es ein offensichtlicher Tippfehler ist –

Antwort

0

Synchronisieren ur ersten SQLiteDatabase dB Einfügungs wie diese, dieser Aufruf sicherstellen, dass die oberste Priorität, die der Haupt-Thread gegeben wird und jede andere Operation von jedem anderen Thread angehalten wird (wenn überhaupt), bis das Einsetzen stattfindet :

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

    } 
Verwandte Themen