我正在尝试从数据库连接创建此数据并使用结果填充数组。我只需要帮助填充" DestinationItem []"来自下面的SQL。
//DestinationBean.java
// Manual Array works but I need this to be populated from DB using the below Query and DB Connection info.
private DestinationItem[] destinationResults = new DestinationItem[]{
new DestinationItem("58285", "Dodge Grand Caravan"),
new DestinationItem("57605", "Dodge SX 2.0"),
new DestinationItem("58265", "Chrysler 300 Touring")
};
public DestinationItem[] getdestinationResults() {
return destinationResults;
}
public class DestinationItem {
String destid;
String commdefid;
public DestinationItem(String destid, String commdefid) {
this.destid = destid;
this.commdefid = commdefid;
}
// Getter/Setter below
// END
我需要使用此DB连接逻辑并填充" DestinationItem []"上面的数组,我需要帮助。
//DBConnection
public static ArrayList<CustomerBean> getCustomer() {
try {
Class.forName("oracle.jdbc.OracleDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:oracle:thin:", "BLAH", "BLAH");
PreparedStatement ps = con.prepareStatement("select destination_id, commdef_id from BLAH.destination");
ArrayList<CustomerBean> al = new ArrayList<CustomerBean>();
ResultSet rs = ps.executeQuery();
boolean found = false;
while (rs.next()) {
CustomerBean e = new CustomerBean();
e.setDestId(rs.getString("destination_id"));
e.setDestId(rs.getString("commdef_id"));
al.add(e);
found = true;
}
rs.close();
if (found) {
return al;
} else {
return null; // no entires found
}
} catch (Exception e) {
System.out.println("Error In getCustomer() -->" + .getMessage());
return (null);
}
}
答案 0 :(得分:0)
这是一个应该做你需要的代码片段:
List<DestinationItem> destinationsList = new ArrayList<DestinationItem>();
while (rs.next()) {
destinationsList.add(new DestinationItem(
rs.getString("destination_id"), rs.getString("commdef_id")));
}
rs.close();
// if you need to convert the list into an array, you can do it like this:
DestinationItem[] destinationsArray = destinationsList.toArray(
new DestinationItem[destinationsList.size()]);
一些注意事项:
最简单的方法是使用动态数据结构(例如List
)来检索ResultSet
中的数据,因为这样您就不需要关心从{0}返回的行数了迭代前的数据库。
最好不要从返回null
s的方法(例如List
方法)返回getCustomer()
。如果未找到任何数据,只需返回空List
。当不需要null
检查时,这将使客户端代码更简单。
您应该关闭在方法中打开的Connection con
和PreparedStatement ps
资源。一个常见的习惯用法是在数据访问方法中使用这样的结构:
Connection con = null;
PreparedStatement ps = null;
try {
// initialize and use 'con' and 'ps'
} finally {
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
}
如果您使用的是Java 7或更高版本,则可以使用try-with-resources statement以更优雅的方式执行此操作。
最后,您应该考虑从方法中抛出一个可能的(已检查的)catch (Exception e)
,或者如果您不想更改方法签名,则应该考虑SQLException
而不是SQLException
。进入RuntimeException
。一般情况下,你不应该抓住你不能(或不)处理方法的Exception
。在这些情况下,最好让问题冒泡到客户端代码而不是默默地忽略它。