无法打印ArrayList

时间:2017-06-11 20:12:39

标签: java arraylist

我有一些从数据库中提取数据集的代码。我可以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())。

2 个答案:

答案 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));