结果集到Array对象

时间:2013-12-11 11:55:04

标签: java arrays database dialog

所以我有这个代码

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
Object[] possibilities=null;
    try {
        possibilities = getNames();
    } catch (Exception ex) {
        System.out.println("Thiss error "+ex.getMessage());
    }
    String s;
// TODO add your handling code here:
    s = (String) JOptionPane.showInputDialog(this, "Complete the sentence:\n"
            + "\"Green eggs and...\"",
            "Customized Dialog",
            JOptionPane.PLAIN_MESSAGE,
            null,
            possibilities,
            "ham");        // TODO add your handling code here:
}                                        
 public Object[] getNames() throws Exception {
    Object[] possibilities = null;
    int i=0;
    rs = ds.getResultSet("SELECT name FROM staff");
    possibilities= new Object[rs.getMetaData().getColumnCount()]; 
    System.out.println("Result set has data  "+rs.next());
    while (rs.next()) {
        System.out.println("Data from result set  "+rs.getString(1));
        possibilities[i] = rs.getObject(1);
        System.out.println("Data from array   "+possibilities[i]);
        i++;
    }

    return possibilities;
}

我想在工作人员的数据库中获取name(String)的值,所以我可以在Joptionpane中使用它作为一个选项,但是当我执行这个时我得到的就是我得到的

Result set has data  true
Data from result set  jana dfjks
Data from array   jana dfjks
Data from result set  jkdfhjk jfhkjdsf
Thiss error 1

如何从数据库获得超过20个结果的所有结果。

通过更换解决     possibilities = new Object [rs.getMetaData()。getColumnCount()]; 用一个 possibilities = new Object [100];

但我想如何根据返回的结果数量使其动态化

2 个答案:

答案 0 :(得分:1)

列数无关紧要 - 您知道它只有一列,因为您的SELECT语句只选择一列。

您事先不知道将返回多少行。因此,在这里使用数组是不合适的。你需要某种Collection,可能是List。

一些示例代码:

List<String> nameList = new ArrayList<String>();

while (rs.next()) {
    nameList.add(rs.getString(1));
}

现在,您的列表中包含从数据库中提取的所有名称。

答案 1 :(得分:0)

   possibilities= new Object[rs.getMetaData().getColumnCount()]; // it is 1

此处,您已将数组大小分配给列号。但是您将行值放入此数组中。因此,如果IndexOutofBoundsException,它会抛出row number > column number。要解决它,请使用ArrayList代替数组。

  List<Object> possibilities=new ArrayList<>();