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方法

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

  • 相关阅读:
    djongo 前端页面展示自定义api返回的列表数据,并拼接到table上
    ou are trying to add a non-nullable field 'address' to person without a default; we can't do that (the database needs something to populate existing rows).
    python string 类型的公钥转换类型并解密
    Django 禁止访问403,CSRF验证失败,相应中断
    springboot async
    此博客可能不再更新,往后博文将发布在 GitHub 中
    css 中 transition 需要注意的问题
    学习笔记(九)
    微信小程序 drawImage 问题
    学习笔记(八)
  • 原文地址:https://www.cnblogs.com/wy697495/p/9091193.html
Copyright © 2011-2022 走看看