我的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);
}
}
答案 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)
,
所以唯一的问题是你只是错过了模型类的空构造函数
尝试添加空构造函数,然后重试。删除以前的数据。
希望它会有所帮助!!!