java - 将 Java 结果集转换为字符串数组

标签 java swing arraylist resultset

我正在编写一个程序,它将查询一个 MS 访问数据库,将查询作为结果集返回,然后我想最终将该结果集转换为一个字符串数组,以便我可以将它传递给一个Swing JComboBox - 因此 ComboBox 将列出查询返回的项目。

我已经能够将结果集的行存储到一个 ArrayList 中,然后将该 ArrayList 转换为一个对象数组,组合框将列出正确的项目,但作为对象。我根本无法将该 ArrayList 转换为 String 数组。有谁知道这是否可能?这是我的一些代码...

// Convert the Resultset into an array list

public ArrayList<ArrayList<Object>> Results2Array(ResultSet rs) throws SQLException {
    ResultSetMetaData metaData = rs.getMetaData();
    int columns = metaData.getColumnCount();

    ArrayList<ArrayList<Object>> al = new ArrayList<ArrayList<Object>>();

    while (rs.next()) {
        ArrayList<Object> record = new ArrayList<Object>();

        for (int i = 1; i <= columns; i++) {
            Object value = rs.getObject(i);
            record.add(value);
        }
        al.add(record);
    }
    return al;
}

// Convert ArrayList to Object Array, and pass into GUI

ArrayList<String> Locations = new ArrayList<String>();
ArrayList<String> Months = new ArrayList<String>();
ArrayList<String> Years = new ArrayList<String>();

try {
    DB.loadDriver();
    DB.makeConnection();
    DB.buildStatement();

    Locations = DB.getLocations();
    Months = DB.getMonths();
    Years = DB.getYears();

    Object[] arrLocations = Locations.toArray();
    Object[] arrMonths = Months.toArray();
    Object[] arrYears = Years.toArray();

    dbGUI ui = new dbGUI(arrLocations, arrMonths, arrYears);
    ui.setVisible(true);

有人可以提供任何建议吗?谢谢!


更新:

这是我收到的堆栈跟踪:

java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.toArray(Unknown Source)
    at kidsfirstdb.Main.main(Main.java:23)

最佳答案

   String[] arrLocations = locations.toArray(new String[0]);

是正确答案。您异常(exception)的原因是所有对象实际上都不是字符串。

你需要改变这个:

   Object value = rs.getObject(i);

为此:

   String value = rs.getString(i);

或者这个:

   String value = rs.getObject(i).toString();

如果您可以返回空列,最后一个将需要空检查。

请注意,toString() 表示可能并非在所有情况下都完全符合您的要求,但它可以帮助您入门。

编辑:如果要填充组合框,每行需要一列,不是吗?如果不是,则需要以某种方式将整行表示为字符串。然后将其放入值中并将值直接放入最终数组列表中,因此您的循环需要如下所示:

    ArrayList<String> al = new ArrayList<String>();
    while (rs.next()) {
            ArrayList<String> record = new ArrayList<String>();
            for (int i = 1; i <= columns; i++) {
                    String value = rs.String(i);
                    record.add(value);
            }
            String value = methodWhichConvertsArrayListToStringTheWayYouNeedItFormatted(record);
            al.add(value);
    }        
    return al;

关于java - 将 Java 结果集转换为字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1685038/

相关文章:

java - Array 和 ArrayList 获取素数有什么区别?

java - 无法使用 Java PreparedStatement 在 MySQL 中存储 UTF-8 内容

java - 如何使用 JTabbedPane 将多个 JPanel (3) 放入一个 JPanel 中?

java - 有什么比从末端迭代 ArrayList 更快的吗?

java - 如何将默认文件名设置为 Swing JFileChooser?

java - 如果在 JTable 中重复,则更新值

python - 在Python中将每日数据汇总并求和到每月

java - 如何在camel测试中配置application.properties?

java - JSF、Servlet 和 JSP 之间有什么区别?

java - 在第二个 Intent 中刷新数组列表