【问题标题】:How to display or print the contents of a database table as is?如何按原样显示或打印数据库表的内容?
【发布时间】:2013-03-04 21:50:16
【问题描述】:

我想使用 Java 代码从数据库中获取一个表。我尝试的示例代码只有两列。我希望获取的数据与表格中的完全一样。 我该怎么做?

这段代码只给了我两行,并排 -

while (rs.next()) {
System.out.println(rs.getString(4) + " " + rs.getString(6));

}

完整示例在 -

http://msdn.microsoft.com/en-us/library/aa342339.aspx

This is what I tried - 

         int size = 0;
         if(rs != null){

            rs.beforeFirst();  
            rs.last();  
            size = rs.getRow();  

         }

         System.out.println("cols = " + size);

出现错误 - 仅转发结果集不支持请求的操作。

【问题讨论】:

  • ...您打印出其他列...
  • @MitchWheat - 我想获取结果集中的列数,然后将它们打印出来。该api没有像getNumberOfColumns()这样的方法;
  • 这个问题已经解决了。
  • @skyscraper - 请在这里提供您的首选解决方案来回答问题,让其他人知道.. ;)

标签: java sql sql-server-2008


【解决方案1】:

使用此代码

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();

int columnsNumber = rsmd.getColumnCount();

来源 - How to get the number of columns from a JDBC ResultSet?

使用该代码后,可以像 DBMS 显示的那样显示结果,如下所示 -

ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();                     

// Iterate through the data in the result set and display it. 

while (rs.next()) {
//Print one row          
for(int i = 1 ; i <= columnsNumber; i++){

      System.out.print(rs.getString(i) + " "); //Print one element of a row

}

  System.out.println();//Move to the next line to print the next row.           

    }

此示例中不显示列名。

【讨论】:

    【解决方案2】:

    我在类似问题here 上发布了这个答案,但我相信这个答案也很重要,也许更重要。简而言之,我编写了一个简单的实用程序类来将 db 表行打印到标准输出(部分乐趣,部分学习)。它可能对某人有用(至少我希望如此)。

    这里是 GitHub 上代码仓库的链接:https://github.com/htorun/dbtableprinter

    这里是基本用法:

    // Create a connection to the database
    Connection conn = DriverManager.getConnection(url, username, password);
    
    // Just pass the connection and the table name to printTable()
    DBTablePrinter.printTable(conn, "employees");
    

    它应该打印如下内容:

    Printing 10 rows from table(s) EMPLOYEES
    +--------+------------+------------+-----------+--------+-------------+
    | EMP_NO | BIRTH_DATE | FIRST_NAME | LAST_NAME | GENDER |  HIRE_DATE  |
    +--------+------------+------------+-----------+--------+-------------+
    |  10001 | 1953-09-02 | Georgi     | Facello   | M      |  1986-06-26 |
    +--------+------------+------------+-----------+--------+-------------+
    |  10002 | 1964-06-02 | Bezalel    | Simmel    | F      |  1985-11-21 |
    +--------+------------+------------+-----------+--------+-------------+
        .
        .
    

    【讨论】:

      【解决方案3】:

      这是因为您的代码仅获得该行的 2 个值。请注意,rs.getString(4) 的意思是,将 当前行第 4 列(使用基于 0 的索引)的值作为 String

      如果要打印所有列,则应编写其余的rs.getXXXX(),其中XXXX 是列数据类型,例如getString(), getInteger(), getLong(), etc。请参阅此 java documentation 以供参考。

      【讨论】:

      • 如果你想获取每一行的值,你应该迭代rs变量。如果要获取行大小,请查看this post
      【解决方案4】:
      public static void printSqlTable(String selectQuery) {
            try {
                 Statement statement = connection.createStatement();
                 resultSet = statement.executeQuery(selectQuery);
                 DBTablePrinter.printResultSet(resultSet);
                    } catch (SQLException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 1970-01-01
        • 2010-12-07
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        相关资源
        最近更新 更多