2017-06-05 1 views
-2

Ich bin neu bei Android. Ich habe noch nicht mit SQLite DBs gearbeitet.
Ich denke, das ist eine sehr grundlegende Frage, aber ich bin nicht in der Lage, die Lösung zu finden.SQLiteDatabase.execSQL (Abfrage) - Mehrere SQL-Befehle innerhalb der onCreate() -Methode funktioniert nicht

Der Code ist hier (annehmen Erklärungen)

public void onCreate(SQLiteDatabase db) { 

    String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + FORMULA + "(" 
      + CAT_CD + " TEXT ," + S_CAT_CD + " TEXT, PRIMARY 
KEY(CAT_CD,S_CAT_CD))"; 
    db.execSQL(CREATE_CATEGORIES_TABLE); 

    String CREATE_CAT_DESC_TABLE="CREATE TABLE "+ FORMULA_CAT_DESC + " 
("+CAT_CD+" TEXT PRIMARY KEY, "+ DESC +" TEXT) "; 
    db.execSQL(CREATE_CAT_DESC_TABLE); 

    String CREATE_CURRENCY_TABLE="CREATE TABLE "+ VI_CURRENCY + "("+ 
CURRENCY_CD +" TEXT PRIMARY KEY, "+ CURRENCY_SIGN +" TEXT) "; 
    db.execSQL(CREATE_CURRENCY_TABLE); 

    String query= "INSERT INTO "+ VI_CURRENCY +" ("+CURRENCY_CD +", 
"+CURRENCY_SIGN+ ") VALUES " + 
      "('INR', '₹'), " + 
      " ('USD','$') " + 
      "('JPY','¥') "; 
    db.execSQL(query); 
} 

Die ersten drei Befehle erfolgreich ausgeführt, während sie durch den Einsatz Befehl ausführt, SQLite eine exeption wirft.

+0

Verwenden Sie LogCat, um die Java-Stack-Ablaufverfolgung zu untersuchen, die mit Ihrem Absturz verbunden ist: https://StackOverflow.com/questions/23353173/universe-myapp-has-stopped-how-can-i-solve-this – CommonsWare

+1

Sie versuchen zu Fügen Sie mehrere Zeilen ein, indem Sie einen einzelnen SQL-Befehl ausführen. –

Antwort

1

Sie könnten eine SQL-Anweisung für jeden Datensatz erstellen

String query1 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('INR', '₹')" ; 

String query2 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('USD','$')" ; 

String query3 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('JPY','¥')" ; 

db.execSQL(query1); 
db.execSQL(query2); 
db.execSQL(query3); 

oder mehrere Werte in einer Anweisung, mit der richtigen sintax setzen Sie es so sein würde:

String query = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + 
      "('INR', '₹'), " + 
      "('USD','$'), " + 
      "('JPY','¥')"; 
db.execSQL(query); 

Für weitere Informationen besuchen SqlLite

+0

Ich möchte Hunderte von Datensätzen einfügen Also sollte ich Hunderte von Abfragen schreiben? Ich denke, das ist keine gute Lösung. –

+0

Ich aktualisierte die Antwort, Sie hatten einen Syntaxfehler – fn5341

+0

Ohh..thank Sie. Jetzt funktioniert die Abfrage erfolgreich. –

1

Wenn Sie mehrere Datensätze einfügen möchten, sollten Sie Daten in einem Hashwertobjekt im Schlüsselwertpaar verwenden. Verwenden Sie Iterator auf demselben und fügen Sie Daten in die Tabelle ein.

 Map<String,String> myMap = new HashMap<>(); 
     myMap.put("INR","₹"); 
     myMap.put("USD","$"); 
     myMap.put("JPY","¥"); 


Iterator it = myMap.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pair = (Map.Entry)it.next(); 
     String query1 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "("+ pair.getKey()+ "," + pair.getvalue()+)" ; 
    db.execSQL(query1); 
    it.remove(); // avoids a ConcurrentModificationException 
} 
0

In Android, den Betrieb zu schreiben ist langsam, also in Ihrem Fall, wenn Sie Hunderte von Daten haben, können Sie Transaktionen in SQLite-Datenbank verwenden.

db.beginTransaction(); 
try { 
    for(/*your loop*/) { 
     String query = /*your query*/ 

     db.execSQL(query); 
    } 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 

Weitere Einzelheiten entnehmen this, offizielle doc.

Verwandte Themen