[英]Insert data into Database - What is the best way to do it
我必须在数据库中插入50-500个联系人的信息之间的任意位置。 我有4个arraylists分别包含图像,名称,数字,布尔变量。
数据中的每一行都由所有4个数组列表和一个SNO的组合组成。 请参考下图。
我的问题是,假设我有500个从“用户的联系人”列表中检索到的联系人。 我有一个函数可以一次将每一行插入表中并调用500次,这是件好事吗? 或还有其他方法吗? 一个普通的想法是将所有数组列表组合在一起,将其传递给函数并在其中检索数据,并重复执行插入语句500次。
在性能方面哪个更好?
for(int i =0; i < 500; i++)
{
dbObj.insert_row(par1, par2, par3, par4, ...);
}
要么
function insert_row(Combined ArrayLists)
{
for(int i=0; i<500; i++)
{
db.execSql(//Insert Statement);
}
}
将数据插入数据库-最好的方法是什么
我建议您创建自己的对象,该对象将代表您的表,其中对象的属性将等于表中的列,即
public class Contact {
private String name;
private String number;
private String image;
private boolean conn;
//getters and setters
}
现在,您的方法听起来像是“意大利面条代码”。 不需要有四个ArrayList,并且此设计效率不高且不正确。
现在,您将拥有一个带有500个孩子的Contact对象的ArrayList。
插入的最佳方法是什么?
可以肯定的是,将您的插入内容包装到一个TRANSACTION
,可以快速地加快插入速度,并且处理数据库的主要目的变得更加安全,因此您不必担心丢失数据库完整性的可能性。
交易示例(我的个人示例项目中的一种方法):
public boolean insertTransaction(int count) throws SQLException {
boolean result = false;
try {
db = openWrite(DataSource.getInstance(mContext));
ContentValues values = new ContentValues();
if (db != null) {
db.beginTransaction();
for (int i = 0; i < count; i++) {
values.put(SQLConstants.KEY_TYPE, "type" + i);
values.put(SQLConstants.KEY_DATE, new Date().toString());
db.insertOrThrow(SQLConstants.TEST_TABLE_NAME, SQLConstants.KEY_TYPE, values);
values.clear();
}
db.setTransactionSuccessful();
result = true;
}
return result;
}
finally {
if (db != null) {
db.endTransaction();
}
close(db);
}
}
将4个数组转换为一个对象数组可以使代码更好。 但是您可以创建这些对象而无需这样做。
准备带有绑定变量(?或:vars)的sql语句,然后通过为每一行设置绑定变量在循环中多次执行该语句。
String sql = "insert into..... values (?,?,?,?)";
// Get connection etc
PreparedStatement stmt = conn.prepareStatement(sql);
for(int i =0; i < 500; i++)
{
stmt.setString(1, name.get(i));
stmt.setNumber(2, number.get(i));
...
stmt.executeUpdate();
}
如果您要将500条记录插入数据库,则应使用事务处理
database.beginTransaction();
try {
// perform inserts
database.setTransactionSuccessful();
finally {
database.endTranasction();
}
如前所述,创建自己的类来表示一行或使用ContentValues类 SQlite不能像在MySQL中那样在一个查询中插入许多行,但是有一些解决方法,您可以在这里阅读。
如果您决定使用此链接中描述的方法,则最好创建一个函数来生成此查询并仅运行一次。 否则,正如其他人已经提到的那样,您可以使用事务来提高许多插入的性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.