我有一些从数据库中提取数据集的代码。我可以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 - 元素
先生 - 元素
Rob - 元素
男人 - 元素
[3,Mr,Rob,Man] - println(行)(如预期的那样)
[Ljava.lang.Object; @ 502f737f - 将行添加并返回到结果数组后的println(result.toArray())。
答案 0 :(得分:3)
就像你正在使用&#34; Arrays.toString()&#34;在String []数组中,在foreach中使用它:
result.forEach(strArray -> System.out.println(Arrays.toString(strArray)));
解释如下:
&#34; System.out.println()&#34;对包含对象引用的变量执行的方法实际上是在场景后面调用对象的toString()方法。
在你的例子中,String []数组是你的对象,但是它的toString()方法没有被覆盖,而是从Object类继承(导致java中的所有数组都不覆盖它),因此是一个toString调用Object的()打印类全名+ @ + hashcode结果。在你的例子中,String [] array的toString()print是 - &gt; &#34; [Ljava.lang的对象强>; @ 502f737f&#34 ;. &#34;对象&#34;打印类是因为你使用了&#34; result.toArray()&#34;,它刚刚创建了一个对象数组(同样的问题)。
内部方法成功打印结果的唯一原因是因为你正在调用Arrays.toString()迭代&amp;调用array的对象的toString()方法并最终返回它们的String表示。
所以只需在外部调用方法中使用它。
关于String []的更完整的解释(不要重复,请参阅&#34;数组类型的成员&#34;), - &gt; https://stackoverflow.com/a/13780418/992200
BTW,建议的答案从不同行的ArrayList中打印每个数组,你可以使用高效的StringBuilder \ StringBuffer \ StringJoiner(选择你需要的那个)在同一行打印它。答案 1 :(得分:0)
你应该遍历这个arraylist以打印每一行:
result = db.selectsingle("SELECT * FROM CUSTOMER WHERE ID = " + TableCust.getValueAt(TableCust.getSelectedRow(), 0));
for(int i= 0;i<result.size();i++)
System.out.println(result.get(i));