Android SQLite数据库仅包含空值

时间:2015-05-08 11:34:55

标签: android arrays database sqlite null

我试图将数组中的值插入到SQLite数据库中。 问题是该函数只能插入null值,即使该数组不包含这些值。

插入功能:

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

3 个答案:

答案 0 :(得分:0)

在for循环之外写下db.insert。所以values只被插入一次。你所做的是第一次插入值,值为1.在插入的第二次插入1和2.在第三次插入1,2和3.现在你的表将如下所示:

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

这是因为您在values循环之外定义了for,并将值添加到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());
    }

}

答案 1 :(得分: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)";

答案 2 :(得分: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());
    }
}