如何按原样显示或打印数据库表的内容?
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();
【讨论】:
以上是关于如何按原样显示或打印数据库表的内容?的主要内容,如果未能解决你的问题,请参考以下文章
数据结构:如果按由表尾至表头的次序输入数据元素,应如何建立顺序表