从列表中将数据插入到数据库中

时间:2014-10-24 21:21:07

标签: java android database eclipse sqlite

我在将列表中的数据插入db SQLite时遇到问题。列表的某些元素为null,然后当我要使用此元素时,我会看到一个空指针异常。我可以做什么来存储db这个数据,即使有些是null ??

这是代码:

private void insertDB() {
    for(int i = 0; i < listA.size(); i++) {
        int check = dbPF.createPF(listA.get(i).getA(), listA.get(i).getB(), listA.get(i).getC(), listA.get(i).getD());
    }
 }

public int createPF(int a, String b, String c, String d) {
    ContentValues initialValues = createContentValuesPF(a, b, c, d);
    return (int) database.insert(tableA, null, initialValues);
}

private ContentValues creaContentValuesPod(int a, String b, String c, String d) {
       ContentValues values = new ContentValues();
       values.put(key1, a);
       values.put(key2, b);
       values.put(key3, c);
       values.put(key4, d);
       return values;
}

当列表中的一个节点为null时,Eclipse返回NullPointerException,但我想在db中存储空值。我能做什么?

感谢所有

4 个答案:

答案 0 :(得分:0)

首先,你需要确保在你的表中创建语句中没有“not null”。 使用ContentValues时,只需跳过您想要为null的字段。

看看这个问题。它会给你你想要的。 Insert Nulls in SQLite DB

答案 1 :(得分:0)

如果您使用的是PreparedStatement,则可以通过利用setNull API将空数据插入数据库。以下是一个例子

            preparedStatement.setNull(parameterIndex,Types.DATE);

答案 2 :(得分:0)

检查它是否为null,然后将空值放入数据库。

private void insertDB() {
    String a = "";
    String b = "";
    String c = "";
    String d = "";
    for(int i = 0; i < listA.size(); i++) {
        if(listA.get(i) != null){
            a = listA.get(i).getA();
            b = listA.get(i).getB();
            c = listA.get(i).getC();
            d = listA.get(i).getD();   
        }
        int check = dbPF.createPF(a, b, c, d);
    }
 }

private ContentValues creaContentValuesPod(int a, String b, String c, String d) {
   ContentValues values = new ContentValues();
   values.put(key1, a);

   if(b.equals(""){
      values.put(key2, null);
   }else{
      values.put(key2, b);
   }
   if(c.equals(""){
      values.put(key3, null);
   }else{
      values.put(key3, c);
   }
   if(d.equals(""){
      values.put(key4, null);
   }else{
      values.put(key4, d);
   }
   return values;

}

我放了一个空字符串。 我有一个问题,为什么你有一个列表空指针引用?这不是一个好的方法。

答案 3 :(得分:0)

如果列表项为null,则无法调用getA()等。

如果您拥有null项目,则需要执行其他操作:

private void insertDB() {
    for(int i = 0; i < listA.size(); i++) {
        int check = dbPF.createPF(listA.get(i));
    }
}

public int createPF(MyObject item) {
    ContentValues initialValues = createContentValuesPF(item);
    return (int) database.insert(tableA, null, initialValues);
}

private ContentValues creaContentValuesPod(MyObject item) {
    ContentValues values = new ContentValues();
    if (item != null) {
        values.put(key1, item.getA());
        values.put(key2, item.getB());
        values.put(key3, item.getC());
        values.put(key4, item.getD());
    } else {
        values.putNull(key1); // or whatever value(s) you want
    }
    return values;
}