2017-05-07 24 views
1

所以我有這個如何從調用構造函數的JAVA列表中調用特定的對象?

public class Client { 

    private String name; 
    private List<Product> purchase = new ArrayList<Product>(); 

    Client(){} 

    Client (String name, List<Product> purchase){ 
     this.name = name; 
     this.purchase = purchase; 
    } 

} 

和主要我想創建一個新的客戶端,並把它放在數據庫中。

public class Main { 

    public static void main(String[] args) { 

     InterDao daoProduct = new ProductDAOImpl(); 
     Product product1 = new Product(12,"waffle","2017-05-03",5); 
     Product product2 = new Product (5,"fff","2017-05-08",7); 

     List<Product> products = new ArrayList<Product>(); 

     products.add(product1); 
     products.add(product2); 
     daoProduct.create(product1); 

     InterDao daoClient = new ClientDAOImpl(); 
     Client client1 = new Client("John", product1); 

     daoClient.create(client1); 

    } 

} 

顯然,

Client client1 = new Client("John", product1);

不起作用。我嘗試過調用特定產品的方法很多,但都沒有成功。請給我一些想法。

這給了我這個錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: The constructor Client(String, Product) is undefined

+0

我想你想'客戶端客戶端1 =新的客戶端(「約翰福音」 ,products);' – Guy

+0

這樣就不會產生錯誤,但會產生以下錯誤:無效的參數值:java.io.NotSerializableException –

回答

0

你的構造函數採用的產品列表。 你必須改變這樣的:

Client (String name,Product purchase){ 
    this.name = name; 
    products.add(purchase); 
} 
+0

在客戶端中,我沒有聲明產品。我代之以 '客戶端(字符串名稱,產品購買){ \t \t this.name = name; \t \t addProduct(0,purchase); \t}' –

+0

但在主我得到這個'無效的參數值:java.io.NotSerializableException' –

+0

你必須在你的類產品中實現接口序列化。你也可以看看這裏[鏈接](http://stackoverflow.com/questions/13895867/java-io-notserializableexception) – SF23

0

要麼通過產品作爲第二個參數,或者你需要改變你的構造函數的簽名,把第二個參數作爲產品的實例。

您能指定解決方案的意圖嗎?在單一通話中是否爲每個客戶保存一個產品或每個客戶的產品清單?

+0

我想創建客戶端並添加到它購買的特定產品。在我的數據庫中,我有桌面產品(ID,項目,數量,日期)和桌面客戶端(名稱,產品中所有列的外鍵) –

+0

然後,您只需更改您的客戶端類。實例變量應該是Product實例而不是列表。其次,你的構造函數應該有兩個參數 - 名稱,產品。 – Nipun

0

你要通過List<Products>到你的構造函數,而不是Product對象(實例),或者你必須修改你的構造是這樣的:

Client (String name, Product purchase){ 
    this.name = name; 
    this.purchase.add(purchase); 
} 
+0

我這樣做了,但仍然給我SQL錯誤。 '無效的參數值:java.io.NotSerializableException' 和'由...引起:java.io.NotSerializableException:project.Product' –

+0

你能告訴我'daoClient.create'函數體嗎? ......我認爲有一些事情你必須檢查你的SQL INSERT或存儲過程PARAMS – Ali

+0

'公共無效創建(客戶端的obj){ \t \t嘗試{ \t \t \t \t \t \t連接的myconn = DriverManager的.getConnection(「jdbc:mysql:// localhost:3306/project」,「root」,「pass」); \t \t \t的PreparedStatement myStmt = myConn.prepareStatement( 「插入到客戶端」 + \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t 「(名稱,cl_id,cl_item,cl_quantity,cl_date)」 + \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t「values(?,?,?,?,?)」); \t \t \t \t \t \t myStmt.setString(1,obj.getName()); \t \t \t myStmt.setObject(2,obj.getProduct(obj)); \t \t \t myStmt.executeUpdate(); \t \t \t \t \t \t System.out.println(「insert complete」); \t \t \t \t } \t \t \t趕上(例外EXC){ \t \t \t exc.printStackTrace(); \t \t \t \t} \t \t \t}' –

相關問題