【问题标题】:Java Mysql table data output formattingJava Mysql表数据输出格式化
【发布时间】:2017-06-12 14:22:01
【问题描述】:

这是我的 MySql 表:

我想在命令行中显示查询的输出,如下所示:

我已经编写了下面的代码来循环,但我只得到第一行,我需要修改什么??

                ResultSet rs2 = stmt.executeQuery(table_retrive);
                String[] cols = new String[itemList.size()];
                int[] rec =new int[itemList.size()];

                for (int i = 0; i < itemList.size(); i++) {

                     while (rs2.next()) {
                        cols[i] =(String) itemList.get(i);
                        rec[i] = rs2.getInt(cols[i]);
                        System.out.println(rec[i]+" ");
                       }
                        }

【问题讨论】:

    标签: java mysql sql database jdbc


    【解决方案1】:

    你的两个循环是错误的。从i=0 开始,然后遍历整个ResultSet,填充你的第一个数组位置。完成此操作后,i 将递增,您尝试再次迭代ResultSet,但光标位于ResultSet 的末尾,因此rs2.next() 返回false,代码将不会被执行.

    所以你有两个解决方案:

    1. 正确处理循环。不幸的是,我不知道,无论如何你都在尝试做什么,因为这是一些没有 OOP 的类 C 代码,它不显示语义,然后你有这个 itemList,它似乎保存了预设值,你读出了这个列表,将哪一列用于i-th 位置。这似乎很奇怪。也许切换循环可以达到预期效果:从while 开始并嵌套for。
    2. 在while 之后用rs2.beforeFirst() 重置ResultSet 的光标。警告:这可能会引发SQLFeatureNotSupportedException。并非所有数据库都可以向后移动光标。这当然是一个非常丑陋的解决方案,因为您应该首先解析整行一次。

    【讨论】:

      【解决方案2】:

      尝试使用 printf() 或 format() 方法。与 c lang 中的 printf 方法相同。您可以传递参数和差异。看link1 还有link 2

      Example : System.out.printf("%d%5s%10d", 5,"|",10);
      output : 5    |        10
      

      【讨论】:

        【解决方案3】:

        使用这个我得到了所有的值,但在一行中:

                       while (rs2.next()) {
                        for (int i = 0; i < itemList.size(); i++) {
        
                                cols[i] =(String) itemList.get(i);
                                rec[i] = rs2.getInt(cols[i]);
                                System.out.print(rec[i]+" ");
                                      }
                                }
        

        但我需要像行一样划分。

        【讨论】:

          【解决方案4】:

          内部循环的使用是你的问题。

          您可以增强您的代码以删除代码中第二个循环的使用,它基本上什么都不做。您可以遍历您的结果集,并在同一循环中使用递增的变量来相应地保存值。

          显示的代码在您的问题中实现了一半,因此很难准确地告诉您需要做什么。不过,这里尝试为您解决问题:

          while (rs2.next()) {
              System.out.println(rs2.getInt(1) + "\t |" + rs2.getString(2) + "\t |" + rs2.getString(3));
          }
          

          根据问题表中的列名,假设column2和column3是String的。

          您可以在此代码中添加必要的细节以根据您的用例完成它,但我只是以一行显示记录为例。

          编辑:

          OP 有他自己的编程方式,但为了满足他在评论中提出的问题 - 你可以这样做。

          while (rs2.next()) {
              for (int i = 0; i < itemList.size(); i++) 
              { 
                  cols[i] =(String) itemList.get(i); 
                  rec[i] = rs2.getInt(cols[i]); 
                  System.out.print(rec[i]+"\t |"); 
              }
              System.out.println();
          }
          

          【讨论】:

            猜你喜欢
            • 2011-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-19
            • 1970-01-01
            • 2021-02-16
            • 1970-01-01
            相关资源
            最近更新 更多