2016-12-22 4 views
-1

INSERT OR REPLACEクエリが機能していないようです。データベースに値を挿入するだけで更新することはありません。私はそれが日付をチェックするようにしたいと思います。同じ日付を見つけると、値を更新し、新しい行を挿入しません。ここで SQLite INSERT OR 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ですが)、このようなものとして解決されます:Aが数値配列である

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

[0]、Bは数値配列である[1 ]、 '2016年12月23日には' [2]、Cは数値配列にある数値配列である[3]、Dは数値配列である[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'はvaluesArray [0]、AはvaluesArray [1]、BはvaluesArray [2]、CはvaluesArray [3]、DはvaluesArray [4]

関連する問題