2016-12-22 3 views
-1

Мой запрос INSERT или REPLACE не работает. Он только вставляет значения в базу данных, но никогда не обновляется. Я бы хотел, чтобы он проверял дату, если она находит ту же дату, тогда она просто обновит значения и не добавит новую строку.SQLite INSERT ИЛИ REPLACE только вставляет и никогда не заменяет

Вот мой запрос:

Set<Map.Entry<String, Object>> s=contentValues.valueSet(); 
       Iterator itr = s.iterator(); 
       String[] valuesArray; 
       List<String> valuesList = new ArrayList<String>(); 
       while(itr.hasNext()) 
       { 
        Map.Entry me = (Map.Entry)itr.next(); 
        Object value = me.getValue(); 
        valuesList.add(String.valueOf(value)); 
       } 
       valuesArray = valuesList.toArray(new String[valuesList.size()]); 

       Date unformatedDate = new Date(valuesArray[2]); 
       SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); 
       String formatedDate = DATE_FORMAT.format(unformatedDate); 
       valuesArray[2] = formatedDate; 

       db.execSQL("INSERT OR REPLACE INTO history (_id, totalElevation, datetime, totaldistance, averageSpeed) VALUES ((SELECT _id FROM history WHERE datetime = ?),?,?,?,?)", valuesArray); 

И вот моя структура таблицы:

sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS history (" + 
      "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      "datetime DATE, " + 
      "totaldistance DOUBLE, " + 
      "totalElevation DOUBLE," + 
      "averageSpeed DOUBLE" + 
      ");"); 
+0

mysql или SQLite? – GurV

+0

sqlite извините ... ну в заголовке –

+0

Каково фактическое значение даты, используемое в подзапросе? Он существует в базе данных? –

ответ

1

Вы передаете дату к неправильному заполнителем третьего (valuesArray[2]), вместо первый (valuesArray[0]).

Параметры: Позиционный.
Существует соотношение 1: 1 между положением в запросе или командой и положением в массиве (индексы начинаются с).

Ваша команда SQL (опять же, это не запрос - запросы только SELECT) будут решены, как-то вроде этого:

INSERT OR REPLACE INTO history (_id, totalElevation, datetime, totaldistance, averageSpeed) VALUES 
    ((SELECT _id FROM history WHERE datetime = A), B, '2016-12-23', C, D) 

Где А в valuesArray [0], B находится в valuesArray [1 ], '2016-12-23' в valuesArray [2], с находится в valuesArray [3], D в valuesArray [4]

в то время как вам нужна команда, которая выглядит следующим образом:

INSERT OR REPLACE INTO history (_id, totalElevation, datetime, totaldistance, averageSpeed) VALUES 
    ((SELECT _id FROM history WHERE datetime = '2016-12-23'), A, B, C, D) 

Где '2016-12-23' находится в значенияхArray [0], A находится в значениях Array [1], B находится в значенияхArray [2], C находится в значениях Array [3], D находится в значенияхArray [4]

Смежные вопросы