2013-03-16 56 views
3

我想使用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); 

,并得到一个错误 - 不支持请求的操作仅转发结果集。

+0

...你打印出其他列... – 2013-03-16 02:41:59

+0

@MitchWheat - 我想获得结果集中的列数,然后将它们打印出来。 api没有像getNumberOfColumns()这样的方法; – 2013-03-16 02:53:08

+0

这已经解决了。 – 2013-03-16 03:17:12

回答

8

使用此代码

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.   

    } 

列名在这个例子中不显示。

0

这是因为你的代码只能获得该行的2值。请注意,rs.getString(4)意思,(使用基于0指数)为String获得的价值上当前行第4列

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

+0

请参阅我的更新问题。我现在得到一个错误。 – 2013-03-16 03:06:18

+0

如果你想获得每一行的值,你应该迭代rs变量。如果你想获得行大小,请检查[这篇文章](http://stackoverflow.com/questions/192078/how-do-i-get-the-size-of-a-java-sql-resultset) – 2013-03-16 03:10:26

+0

不,我的意思是按照sql server显示的方式显示行 – 2013-03-16 03:11:14

8

我张贴了这个答案类似的问题here,但我相信这一次也是相关的,也许更是这样。简而言之,我写了一个简单的实用程序类来打印数据库表格行到标准输出(部分乐趣,部分学习)。这可能对某人有用(至少我希望如此)。

这里是在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 | 
+--------+------------+------------+-----------+--------+-------------+ 
    . 
    .