我用
定义了一个变量Object[] data;
如何在下一步填写数据?
我想做这样的事情:
public Object[] select() {
Object[] data; // Here I definded it
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM CUSTOMERS");
while (rs.next()) {
/* data = {(rs.getString("fname"), (rs.getString("lname")); */
// I know it's wrong, but how can I fill it with data from a database?
}
rs.close();
stmt.close();
} catch (SQLException ex) {
System.out.println("error while selecting");
System.err.println(ex);
}
return data;
}
// -----
// somewhere else
model.addRow(DB.INSTANCE.select());
答案 0 :(得分:4)
这是
data[i++] = new Object[] {rs.getString("fname"), rs.getString("lname")};
但坦率地说,我会考虑创建新课程的选择。我甚至有一个奇特的名字:Customer
。
这样你的主循环看起来就像那样:
while (rs.next()) {
data[i++] = new Customer(rs.getString("fname"), s.getString("lname"));
}
现在您可能会问i
是什么,以及我们如何创建data
?所有好问题。您事先不知道结果集将持续多长时间,因此数组不是一个好主意。请尝试使用List
:
public List<Customer> select() {
List<Customer> data = new ArrayList<Customer>(); // Here you define it
// some code
while (rs.next()) {
data.add(new Customer(rs.getString("fname"), (s.getString("lname")));
}
// etc.
return data;
}
请注意,您几乎可以大声朗读:data
,请添加新的Customer
。
最后,我强烈建议您查看finally
关键字:它可以节省您在奇怪和间歇性错误上花费的时间。
希望有所帮助。
答案 1 :(得分:0)
我认为在这种情况下使用数组列表会更好(因为您可能没有“SELECT * FROM CUSTOMERS”查询将返回多少数据)并使用其.add方法而不是使用本机数组。
尝试:
ArrayList<Object> myArray = new ArrayList<Object>();
while(...){
myArray.add(anything that has type Object);
}