从Oracle数据库填充数组

时间:2015-04-14 19:43:53

标签: java database oracle

我正在尝试从数据库连接创建此数据并使用结果填充数组。我只需要帮助填充" 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);
    }
}

1 个答案:

答案 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 conPreparedStatement 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。在这些情况下,最好让问题冒泡到客户端代码而不是默默地忽略它。