execSQL(UPDATE...) funkt. nicht in der App, aber in der Konsole

  • Antworten:0
  • Bentwortet
Fabian K.
  • Forum-Beiträge: 5

11.03.2011, 23:30:13 via Website

Tag zusammen,

Ich bekomme von einem REST-Service im JSON-Format eine ganze Reihe an Daten. Diese sollen Vorhandene Datensätze in meiner Datenbank teilweise updaten.

1public void setDetails(JSONArray jsonArray) {
2 int timestamp = 0;
3 String sql = null;
4 String spaltenName = null;
5 String uuid = null;
6 String schluessel = null, value = null;
7
8 dbConn = db.getWritableDatabase();
9
10 try {
11 for(int i = 0; i < jsonArray.length(); i++) {
12 JSONObject details = jsonArray.getJSONObject(i);
13 value = details.getString("value");
14 timestamp = details.getInt("timestamp");
15
16 JSONObject detailsPK = details.getJSONObject("detailsPK");
17 uuid = detailsPK.getString("uuid");
18 schluessel = detailsPK.getString("schluessel");
19
20 if(schluessel.equals("power")) spaltenName = DetailsTbl.POWER;
21 else if(schluessel.equals("State")) spaltenName = DetailsTbl.STATE;
22 else if(schluessel.equals("Phase")) spaltenName = DetailsTbl.PHASE;
23 else if(schluessel.equals("Cooking Function")) spaltenName = DetailsTbl.FUNCTION;
24 else if(schluessel.equals("Temperature")) spaltenName = DetailsTbl.TEMP;
25 else spaltenName = null;
26
27 Log.d(TAG, "schluessel: " + schluessel);
28 Log.d(TAG, "value: " + value);
29 Log.d(TAG, "uuid: " + uuid);
30 Log.d(TAG, "timestamp: " + timestamp);
31 Log.d(TAG, "spaltenName: " + spaltenName);
32 if(spaltenName == null) {
33 sql = null;
34 } else {
35 sql = "UPDATE " + DetailsTbl.TABLE_NAME + " " +
36 "SET " + spaltenName + " = '" + value + "' , " + DetailsTbl.TIMESTAMP + " = '" + timestamp + "' " +
37 "WHERE " + DetailsTbl.UUID + " = '" + uuid + "'";
38 Log.d(TAG, "sql: " + sql);
39 Log.d(TAG, "*************************");
40 dbConn.execSQL(sql);
41 }
42 }
43 } catch (JSONException e) {
44 e.printStackTrace();
45 } catch (Exception e) {
46 e.printStackTrace();
47 }
48 }

Die Log-Ausgabe für zwei Schleifendurchläufe sieht so aus:

1schluessel: power
2value: 4.0
3uuid: ec27d88e-378c-4fb0-8749-b174902a2e28
4timestamp: 1297965132
5spaltenName: power
6sql: UPDATE details SET power = '4.0' , timestamp = '1297965132' WHERE uuid = 'ec27d88e-378c-4fb0-8749-b174902a2e28'
7*************************
8schluessel: power
9value: 0.0
10uuid: ab9519db-7a14-4e43-ac3a-ade723802194
11timestamp: 1297965132
12spaltenName: power
13sql: UPDATE details SET power = '0.0' , timestamp = '1297965132' WHERE uuid = 'ab9519db-7a14-4e43-ac3a-ade723802194'
14*************************

Wenn ich das SQL-Stmt. aus dem Log kopiere, und in der Konsole einfüge, funktionierts!
Hab's auch schon mit ContentValues und update(...) versucht - selbes Ergebnis...

Irgendjemand eine Idee woran das liegt und was ich dagegen tun könnte?

Vielen Dank schon mal für eure Hilfe!
VG


// In einer anderes Activity war noch der ChildCursor vom CursorTreeAdapter der ExpandableList geöffnet... nachdem ich den in der onDestroy() geschlossen habe funktionierts nun!

— geändert am 12.03.2011, 00:06:25

Antworten