2015-05-08 43 views
1

我想從一個數組插入到SQLite數據庫的值。 問題是該函數只能插入null值,即使該數組不包含這些值。Android的SQLite數據庫只包含空值

的接入功能:

public void addArrayEntry(String [] response){ 
    try { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     //System.out.println(response.length); 
     for (int i=1; i<response.length; i++){ 
      values.put(temperature,response[i]); 
      db.insert(tableStatistics,null,values); 
     } 

     db.close(); 
    } 

    catch (Exception e){ 
     Log.e("Error in insert", e.toString()); 
    } 

} 

String createTable = "CREATE TABLE statistics (" + 
      "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      "temperature REAL, "+ 
      "light INTEGER, "+ 
      "humidity INTEGER)"; 

數組值:

05-08 14:24:21.405 10720-10720/org.security.andreiism.iotsecurity I/System.out﹕ 23.798828125 
05-08 14:24:21.405 10720-10720/org.security.andreiism.iotsecurity I/System.out﹕ 744 
05-08 14:24:21.405 10720-10720/org.security.andreiism.iotsecurity I/System.out﹕ 424 
+0

這裏看起來很好 - 也許問題在別處?或嘗試調試,以找到'db.insert'在'values'中的確切內容 – rzysia

+0

我將序列從0開始,「溫度」字段的類型改爲「TEXT」,輸出相同。 – andcsie

+0

嘗試將'ContentValues values = new ContentValues();'移動到'for'循環中 –

回答

0

寫你db.insert以外的for循環。所以values只能插入一次。你所要做的就是在第一次插入數值時讓數字1表示。在第二次插入時,插入1和2.第三次插入1,2和3.現在你的數據表如下所示:

id| temperature 
1 |1 
2 |1 
3 |2 
4 |1 
5 |2 
6 |3 

這是因爲你定義valuesfor循環,並添加值,它像一個ArrayList。但是直到下一次循環纔會被刪除。因此,新值將被添加到values之前,並且所有值將一起添加到列表中。

那麼你的方法應該是這樣的:

public void addArrayEntry(String [] response){ 
    try { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     //System.out.println(response.length); 
     for (int i=1; i<response.length; i++){ 
      values.put(temperature,response[i]); 

     } 
     db.insert(tableStatistics,null,values); 
     db.close(); 
    } 

    catch (Exception e){ 
     Log.e("Error in insert", e.toString()); 
    } 

} 
0

下面的變化嘗試...

public void addArrayEntry(String [] response){ 
try { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    //System.out.println(response.length); 
    for (int i=0; i<response.length; i++) { 
     values.put(temperature,response[i]);    
    } 

    db.insert(tableStatistics,null,values); 
    db.close(); 
} 

catch (Exception e){ 
    Log.e("Error in insert", e.toString()); 
} 

} 

String createTable = "CREATE TABLE statistics (" + 
     "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     "temperature REAL, "+ 
     "light INTEGER, "+ 
     "humidity INTEGER)"; 
+0

ContentValues鍵是否必須是唯一的? –

+0

我嘗試了替換函數,但輸出是相同的。 – andcsie

0

謝謝大家的幫助。我終於成功地使用函數插入所需的值:

public void addArrayEntry(String [] response) { 
    try { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(temperature, response[1]); 
     values.put(light, response[2]); 
     values.put(humidity, response[3]); 
     db.insert(tableStatistics, null, values); 
     db.close(); 
    } catch (Exception e) { 
     Log.e("Error in insert", e.toString()); 
    } 
}