Java 如何将 List <Products> 插入数据库
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18134561/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to insert List <Products> into database
提问by Malwaregeek
I am new to Java. I have created a generic list of Products type ,how can I add it into the database. The list contains objects of Products, and columns in the database are fields of Products class. Even if I separate the list by listvariable.get(0) and so on, I get the object, not the values inside that objects.
我是 Java 新手。我创建了一个通用的产品类型列表,如何将其添加到数据库中。该列表包含 Products 的对象,数据库中的列是 Products 类的字段。即使我通过 listvariable.get(0) 等分隔列表,我也会得到对象,而不是该对象内的值。
UPDATE : Inserted using for loop and getting fields for each objects. Is there any better way
更新:使用 for 循环插入并获取每个对象的字段。有没有更好的办法
import java.util.*;
public class Products {
public static List <Products> li = new ArrayList<Products> ();
static
{
Products o = new Products (1,"Milky Way",12.0,7); // Static because
Products o1 = new Products (2,"Dairy Milk",50.0,17); // these entries
Products o2 = new Products (3,"Borunville",70.0,27); // are mandatory
Products o3 = new Products (4,"Lindt",1022.0,107);
li.add(o);
li.add(o1);
li.add(o2);
li.add(o3);
}
int ItemCode;
String ItemName;
double UnitPrice;
int AvailableCount;
public int v=3;
Products()
{}
Products (int x,String y, double c, int d)
{
ItemCode=x;
ItemName=y;
UnitPrice=c;
AvailableCount=d;
}
public String toString ()
{
return ( ItemName+" "+ ItemCode +" "+ UnitPrice + " "+ AvailableCount);
}
void addProduct()
{
li.add(this);
}
public List <Products> initProducts()
{ return li;
}
}
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Iterator;
public class Shopowner {
public static void main (String ...args)
{
Products o = new Products(6,"Eclairs",12.33,5);
o.addProduct();
System.out.println(new Products().initProducts());
try
{
Connectivity.establishConnection(); // static method for db url and drivers
for (int i =0;i<4;i++)
{
Products x=Products.li.get(i);
String name=x.ItemName;
int id= x.ItemCode;
int count =x.AvailableCount;
double price = x.UnitPrice;
PreparedStatement stm = Connectivity.con.prepareStatement("insert into Products_tbl values (?,?,?,?)");
stm.setInt(1, id);
stm.setString(2, name);
stm.setDouble(3,price);
stm.setInt(4, count);
stm.executeUpdate();
}
}
catch(Exception e)
{e.printStackTrace();}
//System.out.println(new Products().li);
}
}
采纳答案by Luca Basso Ricci
Use batch insert in this manner:
以这种方式使用批量插入:
try {
connection con.setAutoCommit(false);
PreparedStatement prepStmt = con.prepareStatement(
"insert into product(code,name,price,available) values (?,?,?,?");
Iterator<Product> it = li.iterator();
while(it.hasNext()){
Product p = it.next();
prepStmt.setString(1,p.getCode());
prepStmt.setString(2,p.getCode());
prepStmt.setInt(3,p.getPrice());
prepStmt.setBoolean(4,p.isAvailable());
prepStmt.addBatch();
}
int [] numUpdates=prepStmt.executeBatch();
for (int i=0; i < numUpdates.length; i++) {
if (numUpdates[i] == -2)
System.out.println("Execution " + i +
": unknown number of rows updated");
else
System.out.println("Execution " + i +
"successful: " + numUpdates[i] + " rows updated");
}
con.commit();
} catch(BatchUpdateException b) {
// process BatchUpdateException
}