我正在學習Java,現在我正在學習JDBC。我想我已經掌握瞭如何使用resultset對象,但是我想確保我做對了。從結果集中創建對象。我做對了嗎?
請參閱下面的代碼。它在名爲「餐館」的數據庫中查詢名爲「菜單」的表。該表有四列:
- id_menu整數,該表的主鍵。
- 名字符串,菜單項的名稱(如「雙層吉士漢堡」)
- DESCR字符串,菜單項的說明(如「在全麥饃兩個全牛肉餅「)。
- 價格雙,項目(如價格。5.95)(注意:我知道我可以使用的錢的類型,但我試圖保持簡單)
這裏是在Java一個menuItem對象的代碼。表格中的每一行都應該用來創建一個menuItem對象:
public class menuItem {
public int id = 0;
public String descr = "";
public Double price = 0.0;
public String name = "";
public menuItem(int newid, String newdescr, Double newprice, String newname){
id = newid;
descr = newdescr;
price = newprice;
name = newname;
}
}
爲了簡化這個練習,一切都是公開的。
下面就來填充數據庫的代碼。目前,這個代碼是主類中的一個方法。
public static ArrayList<menuItem> reQuery() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException{
ArrayList<menuItem> mi = new ArrayList<menuItem>();
//Step 1. User Class.forname("").newInstance() to load the database driver.
Class.forName("com.mysql.jdbc.Driver").newInstance();
//Step 2. Create a connection object with DriverManager.getConnection("")
//Syntax is jdbc:mysql://server/database? + user=username&password=password
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/miguelel_deliveries?" + "user=root&password=");
//Step 3. Create a statement object with connection.createStatement();
Statement stmt = conn.createStatement();
//Step 4. Create variables and issue commands with the Statement object.
ResultSet rs = stmt.executeQuery("Select * from menu");
//Step 5. Iterate through the ResultSet. Add a new menuItem object to mi for each item.
while(rs.next()){
menuItem item = new menuItem(rs.getInt("id_menu"),rs.getString("descr"),rs.getDouble("price"),rs.getString("name"));
mi.add(item);
}
return mi;
}
此代碼有效。我最終得到了一個menuItem的ArrayList,以便每個元素對應於表中的一行。但這是最好的方式嗎?我可以將它推廣到一種處理ResultSets的方式嗎?
對於數據庫中的每個表或視圖,創建一個具有與表格列相同屬性的Java類。
將表內容加載到ResultSet對象中。
使用而(ResultSet.next())通過ResultSet迭代,在用於在ResultSet每個項目步驟1創建(從類)的新對象。
隨着每個新對象的創建,將其添加到類的ArrayList中。
根據需要操縱的ArrayList。
這是一種有效的方法嗎?有沒有更好的方法來做到這一點?
這屬於上[codereview.se] –
感謝。我不知道Code Review甚至在那裏。我準備了另外三個問題,「這個代碼有效,但它是最好的方式」,就像這個。我將在Code Review上發佈它們,而不是Stack Overflow。隨時關閉此問題,並再次感謝。 – Bagheera