zoukankan      html  css  js  c++  java
  • ResultSetMetaData中getColumnLabel和getColumnName的区别

    利用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;
     7 
     8 public class Test
     9 {
    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         {
    44             
    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             }
    65             
    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;
     7 
     8 public class Test
     9 {
    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         {
    44             
    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             }
    65             
    66         }
    67     }
    68 }
    69 结果:
    70 getColumnName取得的名称:tid   getColumnLabel取得的名称:tid
    71 getColumnName取得的名称:tname   getColumnLabel取得的名称:tname
    72 getColumnName取得的名称:tsex   getColumnLabel取得的名称:tsex

    总结:

      mysql在用两个方法获取sql语句名称时显然getColumnName不符合使用者的要求,取到的不是别名。但是oracle对于两种方法取到的值是一样的。因此一般情况下还是建议使用getColumnLabel方法

    注意:本文仅代表个人理解和看法哟!和本人所在公司和团体无任何关系!

  • 相关阅读:
    XML及XML的解析
    单例设计模式(Singleton)的优化
    Java反射初识
    TCP协议的简单应用一
    Java中实现线程同步的三种方法
    Java集合框架Map接口
    JDK1.8新特性之Stream类初识
    Java JDK1.8新特性之四大函数式接口
    tomcat 启动报 找不到 StrutsPrepareAndExecuteFilter。。
    easyjweb ejs 2014.2.25
  • 原文地址:https://www.cnblogs.com/wy697495/p/9091193.html
Copyright © 2011-2022 走看看