Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何插入列表<;产品>;进入数据库_Java_Mysql_List_Jdbc - Fatal编程技术网

Java 如何插入列表<;产品>;进入数据库

Java 如何插入列表<;产品>;进入数据库,java,mysql,list,jdbc,Java,Mysql,List,Jdbc,我是Java新手。我已经创建了一个产品类型的通用列表,如何将其添加到数据库中。该列表包含产品的对象,数据库中的列是Products类的字段。即使我用listvariable.get(0)等分隔列表,我也会得到对象,而不是对象中的值 更新:使用for循环插入并获取每个对象的字段。还有更好的办法吗 import java.util.*; public class Products { public static List <Products> li = new ArrayLi

我是Java新手。我已经创建了一个产品类型的通用列表,如何将其添加到数据库中。该列表包含产品的对象,数据库中的列是Products类的字段。即使我用listvariable.get(0)等分隔列表,我也会得到对象,而不是对象中的值

更新:使用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);


    }
}
import java.util.*;
公共类产品{
publicstaticlist li=newarraylist();
静止的
{
产品o=新产品(1,“银河”,12.0,7);//静态原因
Products o1=新产品(2,“牛奶”,50.0,17);//这些条目
产品o2=新产品(3,“Borunville”,70.0,27);//为强制性产品
产品o3=新产品(4,“Lindt”,1022.0107);
li.添加(o);
添加(o1);
li.添加(o2);
添加(o3);
}
int项目代码;
字符串ItemName;
双倍单价;
国际可用帐户;
公共INTV=3;
产品()
{}
产品(整数x、字符串y、双c、整数d)
{
ItemCode=x;
ItemName=y;
单价=c;
可用数量=d;
}
公共字符串toString()
{
返回(ItemName+“”+ItemCode+“”+UnitPrice+“”+AvailableCount);
}
void addProduct()
{
加上(这个);
}
公共产品列表()
{返回李;
}
}
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.util.Iterator;
公营店主{
公共静态void main(字符串…参数)
{ 
产品o=新产品(6,“ECLARS”,12.33,5);
o、 addProduct();
System.out.println(newproducts().initProducts());
尝试
{
Connectivity.buildConnection();//数据库url和驱动程序的静态方法

对于(int i=0;i使用批插入的方式:


试试看{
连接con.setAutoCommit(假);
PreparedStatement prepsmt=con.PreparedStatement(
“在产品(代码、名称、价格、可用)中插入值(?,?,?”;
迭代器it=li.Iterator();
while(it.hasNext()){
产品p=it.next();
setString(1,p.getCode());
setString(2,p.getCode());
prepsmt.setInt(3,p.getPrice());
prepStmt.setBoolean(4,p.isAvailable());
prepsmt.addBatch();
}      
int[]numUpdates=prepsmt.executeBatch();
对于(int i=0;i
我可以看到3个问题。1)如何插入2)如何获取值,3)如何改进代码(你这是什么意思?)也许你应该一次只解决一个问题。我可以从列表中获取值,打印对象并覆盖toString方法就足够了。我的问题是如何将列表插入数据库。从有经验的人那里得到一些好的建议也无妨:)我的第一个建议是创建
getItemCode()
etc方法,返回每个
Products
对象的值。看看这个例子:Java持久化API(JPA)用于将对象持久化到数据库中。它是一个很好的API,为您做了很多工作。您的对象(产品和店主)直接映射到数据库。这样就可以使用getter和setter来获取和设置数据库中的对象。选中它outPreparedStatement stm=Connectivity.con.prepareStatement(“插入到产品中的值(?,,,,?)”);可以移动到循环外
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
}