利用jdbc连接数据库查询时,通常返回的结果就是每行数据的键值对集合。这时我们需要知道查询出来的数据有哪些字段。根据ResultSet结果集得到的ResultSetMetaData就可以获取到每个字段的名称。其中主要用getColumnLabel(int column)和getColumnName(int column)两种方法来获取。以下是3个名词的含义(取自于JDK API 1.6.0中文版)
ResultSetMetaData:用于获取关于
ResultSet
对象中列的类型和属性信息的对象;
getColumnName(int column):获取指定列的名称。
getColumnLabel(int column):获取用于打印输出和显示的指定列的建议标题。
区别:getColumnName可能只能取到查询的数据库表的字段名称,而不是sql语句中用到的别名,而getColumnLabel取到的是sql语句中指定的名称(字段名或别名)。以下是MySQL数据库和oracle数据库查询sql时两种方法的不同之处
mysql:
1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.PreparedStatement;
4 import java.sql.ResultSet;
5 import java.sql.ResultSetMetaData;
6 import java.sql.SQLException;
8 public class Test
10 public static void main(String[] args)
11 {
12 String dirver = "com.mysql.jdbc.Driver";//数据库驱动
13 String dburl = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=GBK";//数据库地址
14 String user = "testuser";//用户
15 String password = "testuser";//密码
16 Connection conn = null;//定义链接
17 PreparedStatement pstmt = null;//定义预编译命令
18 ResultSet rs = null;//定义结果集
19 try
20 {
21 Class.forName(dirver);//加载驱动
22 conn = DriverManager.getConnection(dburl, user, password);//获取连接
23 String sql = "select t.id as tid,t.name as tname,t.sex as tsex from t_user t";//定义sql语句
24 pstmt = conn.prepareStatement(sql);//执行sql
25 rs = pstmt.executeQuery();//取得结果集
26 if ( rs.next() )
27 {
28 ResultSetMetaData metaData = rs.getMetaData();//取得ResultSetMetaData
29 int count = metaData.getColumnCount();//返回此 ResultSet对象中的列数。
30 //遍历取出每一个查询的字段的名称
31 for (int i = 0; i < count; i++)
32 {
33 System.out.println("getColumnName取得的名称:" + metaData.getColumnName(i + 1).toLowerCase() + " "
34 + "getColumnLabel取得的名称:" + metaData.getColumnLabel(i + 1).toLowerCase());
35 }
36 }
37 }
38 catch (Exception e)
39 {
40 e.printStackTrace();
41 }
42 finally
43 {
45 try
46 {
47 if ( rs != null )
48 {
49 rs.close();
50 }
51 if ( pstmt != null )
52 {
53 pstmt.close();
54 }
55 if ( conn != null )
56 {
57 conn.close();
58 }
59 }
60 catch (SQLException e)
61 {
62 // TODO Auto-generated catch block
63 e.printStackTrace();
64 }
66 }
67 }
68 }
69 结果:
70 getColumnName取得的名称:id getColumnLabel取得的名称:tid
71 getColumnName取得的名称:name getColumnLabel取得的名称:tname
72 getColumnName取得的名称:sex getColumnLabel取得的名称:tsex
oracle:
1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.PreparedStatement;
4 import java.sql.ResultSet;
5 import java.sql.ResultSetMetaData;
6 import java.sql.SQLException;
8 public class Test
10 public static void main(String[] args)
11 {
12 String dirver = "oracle.jdbc.driver.OracleDriver";//数据库驱动
13 String dburl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//数据库地址
14 String user = "testuser";//用户
15 String password = "testuser";//密码
16 Connection conn = null;//定义链接
17 PreparedStatement pstmt = null;//定义预编译命令
18 ResultSet rs = null;//定义结果集
19 try
20 {
21 Class.forName(dirver);//加载驱动
22 conn = DriverManager.getConnection(dburl, user, password);//获取连接
23 String sql = "select t.id as tid,t.name as tname,t.sex as tsex from t_user t";//定义sql语句
24 pstmt = conn.prepareStatement(sql);//执行sql
25 rs = pstmt.executeQuery();//取得结果集
26 if ( rs.next() )
27 {
28 ResultSetMetaData metaData = rs.getMetaData();//取得ResultSetMetaData
29 int count = metaData.getColumnCount();//返回此 ResultSet对象中的列数。
30 //遍历取出每一个查询的字段的名称
31 for (int i = 0; i < count; i++)
32 {
33 System.out.println("getColumnName取得的名称:" + metaData.getColumnName(i + 1).toLowerCase() + " "
34 + "getColumnLabel取得的名称:" + metaData.getColumnLabel(i + 1).toLowerCase());
35 }
36 }
37 }
38 catch (Exception e)
39 {
40 e.printStackTrace();
41 }
42 finally
43 {
45 try
46 {
47 if ( rs != null )
48 {
49 rs.close();
50 }
51 if ( pstmt != null )
52 {
53 pstmt.close();
54 }
55 if ( conn != null )
56 {
57 conn.close();
58 }
59 }
60 catch (SQLException e)
61 {
62 // TODO Auto-generated catch block
63 e.printStackTrace();
64 }
66 }
67 }
68 }
69 结果:
70 getColumnName取得的名称:tid getColumnLabel取得的名称:tid
71 getColumnName取得的名称:tname getColumnLabel取得的名称:tname
72 getColumnName取得的名称:tsex getColumnLabel取得的名称:tsex
mysql在用两个方法获取sql语句名称时显然getColumnName不符合使用者的要求,取到的不是别名。但是oracle对于两种方法取到的值是一样的。因此一般情况下还是建议使用getColumnLabel方法
注意:本文仅代表个人理解和看法哟!和本人所在公司和团体无任何关系!