使用糖ORM的批量插入不起作用

时间:2017-07-01 14:08:57

标签: android android-7.0-nougat sugarorm

我的Android应用中有一个数据库,在安装App时必须包含一些预定义的数据。要做到这一点,我想做"批量插入"使用Sugar ORM。似乎SugarORM文档中的示例代码在语法和实现中都有一些错误,或者它不完整!有谁知道插入批量数据的实用方法?

文档代码:

List<Book> books = new ArrayList<>();
books.add(new Book("isbn123", "Title here", "2nd edition"))
books.add(new Book("isbn456", "Title here 2", "3nd edition"))
books.add(new Book("isbn789", "Title here 3", "4nd edition"))
SugarRecord.saveInTx(books);

似乎SugarRecord类中没有saveInTx!

我的代码:

import com.orm.SugarRecord;
import com.orm.dsl.Table;
import com.orm.dsl.Unique;

import java.util.ArrayList;
import java.util.List;


@Table()
public class Foods extends SugarRecord{
    @Unique
    private String foodName;
    private String calorie;

    public Foods(String foodName, String calorie) {
        this.foodName = foodName;
        this.calorie = calorie;
    }

    public void putData(){
    List<Foods> foods = new ArrayList<>();
    foods.add(new Foods("Lamb Chops", "12"));
    foods.add(new Foods("Onion", "32"));
    foods.add(new Foods("Apple", "43"));
    SugarRecord.saveInTx(foods);    
}
}

1 个答案:

答案 0 :(得分:1)

你不能说像似乎SugarRecord类中没有saveInTx!,有一种方法适用于SugarRecord类,即

@SuppressWarnings("deprecation") 
    public static <T> void saveInTx(Collection<T> objects) { 
        SQLiteDatabase sqLiteDatabase = getSugarContext().getSugarDb().getDB(); 
        try { 
            sqLiteDatabase.beginTransaction(); 
            sqLiteDatabase.setLockingEnabled(false); 
            for (T object: objects) { 
                save(object); 
            } 
            sqLiteDatabase.setTransactionSuccessful(); 
        } catch (Exception e) { 
            Log.i("Sugar", "Error in saving in transaction " + e.getMessage()); 
        } finally { 
            sqLiteDatabase.endTransaction(); 
            sqLiteDatabase.setLockingEnabled(true); 
        } 
    }

我试过这个,它运行正常。只需使用“Sugar”关键字过滤Logcat,同时保存记录。你会发现I/Sugar: Foods saved : 1之类的东西  您还可以在表格中看到已添加的计数:

  long foodCount= SugarRecord.count(Foods.class);
  Log.i("Foods", "Foods " + foodCount);

因此,如果您没有通过SugarRecord.listAll(oods.class)

获取数据
  

所以唯一的问题是你只是错过了模型类的空构造函数

尝试添加空构造函数,然后重试。删除以前的数据。

希望它会有所帮助!!!