如何按原样显示或打印数据库表的内容?

Posted

技术标签:

【中文标题】如何按原样显示或打印数据库表的内容?【英文标题】: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 - 请在这里提供您的首选解决方案来回答问题,让其他人知道.. ;) 另见***.com/a/31887249/32453 【参考方案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();
    

【讨论】:

以上是关于如何按原样显示或打印数据库表的内容?的主要内容,如果未能解决你的问题,请参考以下文章

来自 php 的回声“按原样”

Bq 命令或数据流按原样加载

如何把SQL的表按行进行排序或进行表的行列转换

数据结构:如果按由表尾至表头的次序输入数据元素,应如何建立顺序表

vb中怎么按某行某列读取本地电脑的“*.txt”文本内容并原样显示到文本框中???

sqlserver怎么查看表的内容