2017-03-06 5 views
3

Ich habe eine Methode, um Werte in sqlite in einer Klasse einzufügen. Und in der Haupttätigkeit analysiere ich json Werte und versuche, die Werte in sqlite in einer Schleife einzufügen, da ich mehr als eine Reihe einfügen muss. Aber nur eine Zeile wird in die Datenbank aufgenommen.wie man mehrere Reihen in sqlite android einfügt

Methode mehrere Zeilen hinzuzufügen, ist wie folgt: Ich versuche Werte in sqlite Tabelle hinzuzufügen

public void addSession(String sessionname,String start_time,String end_time,String id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     try { 
      db.beginTransaction(); 
      String sql = "Insert into session (id, sessionname,start_time, end_time) values(?,?,?,?)"; 
      SQLiteStatement insert = db.compileStatement(sql); 
      insert.bindString(1, id); 
      insert.bindString(2, sessionname); 
      insert.bindString(3, start_time); 
      insert.bindString(4, end_time); 
      insert.execute(); 
      db.setTransactionSuccessful(); 
     } catch (Exception e) { 
      Log.w("Appet8:",e); 
     } finally { 
     db.endTransaction(); 
     } 
    } 

in folgenden for-Schleife:

JSONObject jsonObject = new JSONObject(response); 
JSONArray foodsessions = jsonObject.getJSONArray("foodsessions"); 
for(int i=0;i<foodsessions.length();i++) { 
        JSONObject session_object = foodsessions.getJSONObject(i); 
        String session = session_object.getString("sessionname"); 
        String start_time = session_object.getString("start_time"); 
        String end_time = session_object.getString("end_time"); 
        String session_id = session_object.getString("id");         
db.addSession(session,start_time,end_time,session_id); 
         }      
+0

Dieser Thread könnte Ihnen helfen: https://stackoverflow.com/q/1609637/468724 –

Antwort

3

eine bessere Struktur würde Erstellen Sie eine Db-Referenz außerhalb der Methode und übergeben Sie sie als Referenz:

SQLiteDatabase db = this.getWritableDatabase(); 
db.beginTransaction(); 

// your for loop 

db.setTransactionSuccessful(); 
db.endTransaction(); 

============== Bitte überprüfen Sie unter dem für Einsatz mit mehreren Reihen verwendet:

// adb is SQLiteOpenHelper 
JSONObject jsonObject = new JSONObject(response); 
JSONArray foodsessions = jsonObject.getJSONArray("foodsessions"); 
int length = foodsessions.length(); 

for (int i = 0; i < length; i++) { 
    JSONObject o = foodsessions.getJSONObject(i); 
    String session = session_object.getString("sessionname"); 
    String start_time = session_object.getString("start_time"); 
    String end_time = session_object.getString("end_time"); 
    String session_id = session_object.getString("id");  

    SQLiteDatabase db = adb.getWritableDatabase(); 

    ContentValues newValues = new ContentValues(); 
    newValues.put(adb.ATTRIBUTE_session, session); 
    newValues.put(adb.ATTRIBUTE_start_time, start_time); 
    newValues.put(adb.ATTRIBUTE_end_time, end_time); 
    newValues.put(adb.ATTRIBUTE_session_id, session_id); 

    long res = db.insertWithOnConflict(adb.TABLE_NAME, null, newValues, SQLiteDatabase.CONFLICT_REPLACE); 
    db.close(); 
} 

Eine bessere Lösung rohe Abfrage verwendet wird vermieden, wenn es sein kann, erfolgt nach der von SQLiteDatabase bereitgestellten Methode.

+0

Nicht in der Lage, 'db.beginTransaction();' außerhalb der Klasse zu erhalten. For Schleife ist in anderen Klasse –

+0

überprüfen Sie bitte mein Update, sollte es in Ordnung sein, wenn Sie ContentValues ​​ – Alan

+0

Danke verwenden. Deine Lösung hat funktioniert. :) –

2

die Sie interessieren,

public void addSession(String session,String start_time,String end_time,String session_id) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("sessionname", session); 
    values.put("start_time", start_time); 
    values.put("end_time",end_time); 
    values.put("id",session_id); 

    // insert row 
    db.insert(TABLE_DATA, null, values); 
} 
+0

Davon kann ich nur eine einzige Zeile einfügen –

0

dies ist einfacher:

INSERT INTO tb_units (sort, name, isdef) VALUES 
(1, "عدد",1), 
(2, "کیلوگرم",1), 
(3, "گرم",1), 
(4, "کیلومتر",1), 
(5, "متر",1), 
(6, "متراژ",1), 
(7, "مگابایت",1), 
(8, "کیلوبایت",1), 
(9, "مثقال",1), 
(10, "شاخه",1), 
(11, "صفحه",1), 
(12, "رول",1), 
(13, "بسته",1), 
(14, "کارتن",1), 
(15, "دستگاه",1), 
(16, "پاکت",1), 
(17, "مورد",1), 
(18, "جعبه",1), 
(19, "تن",1), 
(20, "قطعه",1), 
(21, "حلقه",1), 
(22, "تخته",1), 
(23, "جلد",1), 
(24, "لیتر",1), 
(25, "مترمکعب",1), 
(26, "مترمربع",1), 
(27, "دست",1), 
(28, "جین",1), 
(29, "اشتراک",1), 
(30, "سری",1), 
(31, "گیگابایت",1), 
(32, "جلسه",1), 
(33, "جفت",1), 
(34, "قراض",1), 
(35, "ساعت",1), 
(36, "تن",1); 

und uns abfragen mit db.execSQL

Verwandte Themen