2013-08-08 4 views
0

Я новичок в Java. Я создал общий список типов продуктов, как я могу добавить его в базу данных. Список содержит объекты Products, а столбцы в базе данных - это поля класса Products. Даже если я отделяю список от listvariable.get (0) и т. Д., Я получаю объект, а не значения внутри этих объектов.Как вставить Список <Products> в базу данных

UPDATE: Вставляется с использованием цикла 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); 


    } 
} 
+0

Я вижу 3 вопроса. 1) Как вставить 2) Как получить значения и 3) Как улучшить код (и что вы подразумеваете под этим?) Возможно, вам стоит просто решить одну проблему за раз. – iCantSeeSharp

+0

Я могу получить значения из списка, распечатать объекты и до верхового метода toString. Мой вопрос заключается в том, как вставить список в базу данных. И никогда не помешает получить хорошие предложения от людей, у которых есть опыт :) – Malwaregeek

+0

Моим первым предложением было бы создать методы 'getItemCode()' и т. Д., Которые возвращают значения каждого объекта 'Продукты'. Взгляните на этот пример: http://docs.oracle.com/javaee/6/tutorial/doc/gjbbp.html – iCantSeeSharp

ответ

5

Использование пакетной вставки таким образом:


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 
} 
Смежные вопросы