2017-07-23 2 views
0

Ich versuche, die effizienteste Logik für die nächste Situation zu finden.Android sql update oder einfügen

Ich möchte auf meiner Android-App in SQL am häufigsten verwendeten Funktionen/Aktionen von Benutzern zu implementieren.

dbase Struktur:

| _id | act_name (Text eindeutig) | Zähler (Ganzzahl) |

Code: (src https://stackoverflow.com/a/20568176/8006698)

int rowID = (int) db.insertWithOnConflict(TABLE_NAME, null, cv,SQLiteDatabase.CONFLICT_IGNORE); 
if (rowID != -1){ 
    myLog("Written to base with id = " + rowID); 
} else { 
    db.execSQL("UPDATE stats SET counter=counter + 1 WHERE act_name = '" + mAction+"'"); 
    myLog("stats updated"); 
} 

Ich war überrascht, dass 'ExecSQL' nicht Wert zurückgibt als 'Update' Methode. Ich würde verwenden:

int rowID = db.update(...); 
if (rowID == 0) { 
    //if not updated then insert 
    long insertedID = db.insert(...); 
    myLog("Inserted to base "); 
} else 
    myLog("base updated"); 

kann aber hier nicht erhöhen zählen direkt als ‚Zähler = Zähler + 1‘ so habe ich ‚insertWithOnConflict‘ zu verwenden. Ich bin mir nicht sicher, ist es gute Praxis, es zu benutzen. Warte auf deine Ideen.

+0

also alles, was Sie fragen, ist eine Möglichkeit, SQL mit 'Zähler + = 1' zu aktualisieren? –

Antwort

0

Ersetzen Sie diese

db.execSQL("UPDATE stats SET counter=counter + 1 WHERE act_name = '" + mAction+"'"); 

verwenden

ContentValues values=new ContentValues(); 
values.put("counter",1) 
int rowCount=db.update("stats",values,"act_name=?",new String[]{mAction}); 

Sie Aktualisierungszählwert erhalten und tun, was Sie wollen.

+0

Wie kann ich einen Wert von Zähler um 1 (++ Zähler) erhöhen, indem Sie contentvalues ​​verwenden? –

+0

Bevor Sie den Aktualisierungsabfrageaufruf ausführen, müssen Sie den Zähler aus der Tabelle abfragen und den Zähler und den Aktualisierungswertzähler + 1 abrufen. So, int counter = // Wählen Sie Ihren Zählerwert, values.put ("counter", counter + 1); – Santhosh

+0

Danke für die Antwort! Meine Forschung war wie könnte ich Counter aktualisieren mit einer SQL-Abfrage, und erhalten Sie Ergebnis von SQL wie "Hey, ich aktualisierte Ihre Basis")). Also kann ich Logik immer noch nicht optimal finden: int rowcount = (int) db.insertWithOnConflict (meineTabelle, null, contentValue, CONFLICT_IGNORE); if (rowCount == -1) { db.execSQL ("Aktualisierungsabfrage ... '"); } –

Verwandte Themen