所以我有这个代码
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];
但我想如何根据返回的结果数量使其动态化
答案 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<>();