Java 将数据插入数据库-最好的方法是什么
我必须在数据库中插入50-500个联系人的信息。我有4个数组列表,分别包含image、name、number和bool变量 数据中的每一行由所有4个ArrayList和一个SNO组成。请参考下图 我的问题是,假设我从用户的联系人列表中检索到500个联系人。我有一个函数,一次将每一行插入到表中并调用500次,这是一件好事吗?或者还有别的办法吗?一个简单的想法是将所有ArrayList组合在一起,将其传递给函数并在那里检索数据,然后将insert语句重复500次 在性能方面,什么更好Java 将数据插入数据库-最好的方法是什么,java,android,database,Java,Android,Database,我必须在数据库中插入50-500个联系人的信息。我有4个数组列表,分别包含image、name、number和bool变量 数据中的每一行由所有4个ArrayList和一个SNO组成。请参考下图 我的问题是,假设我从用户的联系人列表中检索到500个联系人。我有一个函数,一次将每一行插入到表中并调用500次,这是一件好事吗?或者还有别的办法吗?一个简单的想法是将所有ArrayList组合在一起,将其传递给函数并在那里检索数据,然后将insert语句重复500次 在性能方面,什么更好 for(in
for(int i =0; i < 500; i++)
{
dbObj.insert_row(par1, par2, par3, par4, ...);
}
for(int i=0;i<500;i++)
{
dbObj.插入_行(par1、par2、par3、par4等);
}
或
函数插入_行(组合数组列表)
{
对于(inti=0;i将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();
}
String sql=“插入到……值(?,?,?)”;
//取得联系等
PreparedStatement stmt=conn.prepareStatement(sql);
对于(int i=0;i<500;i++)
{
stmt.setString(1,name.get(i));
stmt.setNumber(2,number.get(i));
...
stmt.executeUpdate();
}
将数据插入数据库-最好的方法是什么
我建议您创建自己的对象来表示您的表,其中对象的属性将等于表中的列,即e.q
public class Contact {
private String name;
private String number;
private String image;
private boolean conn;
//getters and setters
}
现在,您的方法听起来像“意大利面条代码”。不需要有四个ArrayList,这种设计既不高效也不正确
现在,您将拥有一个包含500个child的Contact对象的ArrayList
插入的最佳方式是什么
当然,将插入打包到一个事务中
,这样可以快速加快插入速度,并且处理数据库的主要步骤变得更加安全,这样您就不必担心丢失数据库完整性的可能性
交易示例(我个人示例项目中的一种方法):
public boolean insertTransaction(int count)抛出SQLException{
布尔结果=假;
试一试{
db=openWrite(DataSource.getInstance(mContext));
ContentValues=新的ContentValues();
如果(db!=null){
db.beginTransaction();
for(int i=0;i
若要在数据库中插入500条记录,则应使用事务处理
database.beginTransaction();
try {
// perform inserts
database.setTransactionSuccessful();
finally {
database.endTranasction();
}
如前所述,创建自己的类来表示一行或使用
SQlite不能像MySQL那样在一个查询中插入许多行,但是有一种方法可以让您阅读
如果您决定使用此链接中描述的方法,最好创建一个函数来生成此查询,并只运行一次。否则,正如其他人已经提到的,您可以使用事务来提高多个插入的性能。首先,将4个ArrayList替换为自定义类类型的1个ArrayList。您可以构建一个INSERT
查询以插入多行:非常感谢您的输入。等待期结束后,我们将接受您的回答。事务的范围是什么?如果单个插入失败,是否所有插入都失败?这就是事务的工作方式,如果一个插入失败,所有插入都将被取消。或者所有操作都成功执行,或者什么都没有。我知道那么,我想问你这是否是正确的逻辑。插入是如何关联的?我认为每个插入都是独立的。事务的使用将保证数据的一致性。重要的是。我的意思是事务在这里是不必要的。他插入了500个不同的行。如果一个插入没有通过(重复键、其他违反约束等)它不应影响其他插入。但使用此设置,如果一个插入失败,您将回滚并取消所有插入。此外,本例中的插入已经是ACID(他没有显示任何证据表明插入会影响任何其他内容)
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);
}
}
database.beginTransaction();
try {
// perform inserts
database.setTransactionSuccessful();
finally {
database.endTranasction();
}