2017-07-09 4 views
1

Ich kehre mehrere Zeilen von mysql mit JSON, aber nur eine Zeile zu sqlite akzeptiert wird, wie kann ich alles davon einfügen:Legen Sie mehrere Zeilen in SQLite Inhalt Werte

MainActivity.java:

  ..... 
     if (!error) { 

         // user successfully exist in database 
         JSONObject user = jObj.getJSONObject("user"); 
         String id = user.getString("id"); 
         String sutdentId = user.getString("sutdentId"); 
         String full_name = user.getString("full_name"); 
         String year = user.getString("year"); 
         String school = user.getString("school"); 
         String level = user.getString("level"); 

         // pass id ,fullname ,year ,school and level to 
     sqlite 
         db.addUser(id, sutdentId, full_name, year, school, 
level); 

     ..... 

SqliteHandle.java, wobei das Verfahren des Einführens und Tabellenerstellung zu halten, verwendet wird:

 public void addUser(String id, String sutdentId, String full_name 
    ,String 
     year, String school, String level) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_userId, id); 
    values.put(KEY_Student, sutdentId); 
    values.put(KEY_Names, full_name); 
    values.put(KEY_Year, year); 
    values.put(KEY_School, school); 
    values.put(KEY_Level, level); 
long Id = db.insert(TABLE_USER, null, values); 
     Log.d(TAG, "New user inserted into sqlite: " + Id); 
     if (Id > 0) { 
      Log.d(TAG, "New user inserted into database: " + Id); 
     } 
     else{ 
      Log.d(TAG, "OOps! No data inserted in mysql "); 
     } 
    db.close(); // Closing database connection 
    } 
+0

es ist ein bisschen schwer gegeben zu sagen, dass die Code-Formatierung alle ausgeschaltet ist, aber es scheint, dass Sie die Insert-Funktion sind Aufruf nur einmal – lelloman

+0

Wo Sie durch die mehrere Ergebnisdatensatz von MySQL Looping? In MainActivity.java - alles, was ich sehe, ist ein einzelner Aufruf Ihrer AddUser-Funktion. – QuickNull

+0

@ QuickNull, ja ist ein einzelner Anruf ist ein Grund, warum ich wissen muss, wie ich es loopen kann –

Antwort

0

Sie müssen über eine Schleife Ihre jsonArray, um alle Zeilen einzufügen.
Sie können eine kompilierte Anweisung verwenden, um die Ausführung viel schneller zu machen.

Der Code sieht in etwa wie folgt aus:

//a field that holds the compiled statement 
private SQLiteStatement insStmt = null; 

//assuming you have "JSONArray users" loaded; 
for (int i = 0 ; i < users.length(); i++) { 
    JSONObject obj = users.getJSONObject(i); 
    String id = obj.getString("id"); 
    String studentId = obj.getString("studentId"); 
    String full_name = obj.getString("full_name"); 
    String year = obj.getString("year"); 
    String school = obj.getString("school"); 
    String level = obj.getString("level"); 
    addUser(id, sutdentId, full_name, year, school, level); 
} 

Nun ist die addUser Funktion wird wie folgt aussehen (mit kompilierten Anweisung).

function addUser(String id, String sutdentId, String full_name 
    ,String year, String school, String level) { 

    if (insStmt == null) { //compile it once 
     String query = "INSERT into "+TABLE_NAME+"(id, studentId, full_name, year, school, level) VALUES (?,?,?,?,?,?)"; 
     insStmt = myDataBase.compileStatement(query); 
    } 

    //bind the arguments 
    insStmt.bindAllArgsAsStrings(String[]{id, studentId, full_name, year, school, level}); 
    //execute 
    insStmt.execute(); 
} 
+0

Dieses Array 'String []' zeigt einen Fehler an. aber über loop die 'jsonArray' war bereits loop, das problem war, dass ich es nicht in den post enthalten –

+0

So jetzt funktioniert es oder nicht? –

+0

Noch nicht, gibt mir einen Fehler, wie ich es oben sagte –

Verwandte Themen