【发布时间】:2017-06-11 20:12:38
【问题描述】:
我有一些从数据库中提取数据集的代码。我可以 Println 每个元素,所以我知道它可以从数据库中出来。
如果我这样做:
public ArrayList<String[]> selectsingle(String query) throws SQLException{
ArrayList <String[]> result = new ArrayList<String[]>();
connect();
stat = con.createStatement();
ResultSet rs = stat.executeQuery(query);
int columnCount = rs.getMetaData().getColumnCount();
while(rs.next()){
String[] row = new String[columnCount];
for (int i=0; i <columnCount ; i++){
row[i] = rs.getString(i + 1);
System.out.println(row[i]);
}
result.add(row);
System.out.println(Arrays.toString(row));
}
disconnect();
return result;
}
然后最后的println 给了我我的数组和每个元素。
当我想将数组传回调用函数时,问题就来了,我只得到内存位置,我根本无法println 元素。我一生都无法弄清楚我哪里出错了,因为它似乎是结果。添加让我失望!
调用这个的代码:
private void TableCustMouseClicked(java.awt.event.MouseEvent evt) {
try {
ArrayList<String[]> result = new ArrayList<String[]>();
result = db.selectsingle("SELECT * FROM CUSTOMER WHERE ID = " + TableCust.getValueAt(TableCust.getSelectedRow(), 0));
System.out.println(result.toArray());
} catch (SQLException ex) {
Logger.getLogger(panelCustMain.class.getName()).log(Level.SEVERE, null, ex);
}
无论我如何处理结果,我总是得到这个:
3 - 元素
先生-元素
抢 - 元素
人 - 元素
[3, Mr, Rob, Man] - println(row)(如预期)
[Ljava.lang.Object;@502f737f - 添加行并返回结果数组后的 println(result.toArray())。
【问题讨论】:
-
你能告诉我们据称没有正确打印元素的代码吗?
-
“我只获取内存位置”,这表明您可能会看到
Type@hexHashCode,但这很奇怪,因为您在代码中使用了Arrays.toString(row);,这表明您已经意识到了这个问题。那么为什么不再使用Arrays.toString(row);呢? -
"当我想将数组传递回调用函数时" 你的意思是在
selectsingle的调用者中,在你没有显示的代码中,你有打印返回的ArrayList<String[]>时遇到问题?如果是这样,为什么这会让您感到困惑,因为您似乎已经知道需要使用Arrays.toString()才能正确打印数组? -
这不是内存位置,而是哈希码,但请在问题中包含输出以使其更清楚
-
@Ypsilon 不要(尝试)在评论中发布代码。删除该评论,并编辑问题以澄清它。