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:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; public class Test
{
public static void main(String[] args)
{
String dirver = "com.mysql.jdbc.Driver";//数据库驱动
String dburl = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=GBK";//数据库地址
String user = "testuser";//用户
String password = "testuser";//密码
Connection conn = null;//定义链接
PreparedStatement pstmt = null;//定义预编译命令
ResultSet rs = null;//定义结果集
try
{
Class.forName(dirver);//加载驱动
conn = DriverManager.getConnection(dburl, user, password);//获取连接
String sql = "select t.id as tid,t.name as tname,t.sex as tsex from t_user t";//定义sql语句
pstmt = conn.prepareStatement(sql);//执行sql
rs = pstmt.executeQuery();//取得结果集
if ( rs.next() )
{
ResultSetMetaData metaData = rs.getMetaData();//取得ResultSetMetaData
int count = metaData.getColumnCount();//返回此 ResultSet对象中的列数。
//遍历取出每一个查询的字段的名称
for (int i = 0; i < count; i++)
{
System.out.println("getColumnName取得的名称:" + metaData.getColumnName(i + 1).toLowerCase() + " "
+ "getColumnLabel取得的名称:" + metaData.getColumnLabel(i + 1).toLowerCase());
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{ try
{
if ( rs != null )
{
rs.close();
}
if ( pstmt != null )
{
pstmt.close();
}
if ( conn != null )
{
conn.close();
}
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}
结果:
getColumnName取得的名称:id getColumnLabel取得的名称:tid
getColumnName取得的名称:name getColumnLabel取得的名称:tname
getColumnName取得的名称:sex getColumnLabel取得的名称:tsex
oracle:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; public class Test
{
public static void main(String[] args)
{
String dirver = "oracle.jdbc.driver.OracleDriver";//数据库驱动
String dburl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//数据库地址
String user = "testuser";//用户
String password = "testuser";//密码
Connection conn = null;//定义链接
PreparedStatement pstmt = null;//定义预编译命令
ResultSet rs = null;//定义结果集
try
{
Class.forName(dirver);//加载驱动
conn = DriverManager.getConnection(dburl, user, password);//获取连接
String sql = "select t.id as tid,t.name as tname,t.sex as tsex from t_user t";//定义sql语句
pstmt = conn.prepareStatement(sql);//执行sql
rs = pstmt.executeQuery();//取得结果集
if ( rs.next() )
{
ResultSetMetaData metaData = rs.getMetaData();//取得ResultSetMetaData
int count = metaData.getColumnCount();//返回此 ResultSet对象中的列数。
//遍历取出每一个查询的字段的名称
for (int i = 0; i < count; i++)
{
System.out.println("getColumnName取得的名称:" + metaData.getColumnName(i + 1).toLowerCase() + " "
+ "getColumnLabel取得的名称:" + metaData.getColumnLabel(i + 1).toLowerCase());
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{ try
{
if ( rs != null )
{
rs.close();
}
if ( pstmt != null )
{
pstmt.close();
}
if ( conn != null )
{
conn.close();
}
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}
结果:
getColumnName取得的名称:tid getColumnLabel取得的名称:tid
getColumnName取得的名称:tname getColumnLabel取得的名称:tname
getColumnName取得的名称:tsex getColumnLabel取得的名称:tsex
总结:
mysql在用两个方法获取sql语句名称时显然getColumnName不符合使用者的要求,取到的不是别名。但是oracle对于两种方法取到的值是一样的。因此一般情况下还是建议使用getColumnLabel方法
注意:本文仅代表个人理解和看法哟!和本人所在公司和团体无任何关系!
ResultSetMetaData中getColumnLabel和getColumnName的区别的更多相关文章
- java.sql.ResultSetMetaData.getColumnLabel和getColumnName的区别
如果将ResultSet的结果映射到HashMap中,要使用getColumnLabel,而不要用getColumnName,这样可提高程序的健壮性 理由: getColumnName返回的是sql语 ...
- 【转】为什么我们都理解错了HTTP中GET与POST的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- Visual Studio 中 Build 和 Rebuild 的区别
因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...
- SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方 ...
- java集合中List与set的区别
java集合中List与set的区别. List可以存储元素为有序性并且元素可以相同. set存储元素为无序性并且元素不可以相同. 下面贴几段代码感受一下: ArrayL ...
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...
- JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别
JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
随机推荐
- HTML —— 表格
复习下关于html中的表格. 基本结构: 表格由 table 标签为父标签进行包裹,可以在 table 上添加几种属性. border : 定义表格的边框. cellspacing : 间距,指单元格 ...
- MySQL 到底是怎么解决幻读的?
; 原理:将历史数据存一份快照,所以其他事务增加与删除数据,对于当前事务来说是不可见的. 2. next-key 锁 (当前读) next-key 锁包含两部分: 记录锁(行锁) 间隙锁 记录锁是加在 ...
- Ubuntu建立和删除用户
添加用户: sudo adduser xxx 这样的命令会在home目录下添加一个帐号 sudo useradd xxx 仅仅是添加用户, 不会在home目录添加帐号 删除用户: 在普通用户下:sud ...
- CompletionService:批量执行异步任务
之前有去了解CompletionService,当时没有做记录,现在再想使用却发现忘记了,果然好记性不如烂笔头. 原文比较简洁,通俗易懂. 转载-原文链接: https://segmentfault. ...
- rest framework之APIView
一.rest framework配置 1.安装rest framework 在django环境中安装rest-framework框架: (automatic) C:\Users\Administrat ...
- 通过statCounter计算给定的RDD[Double]的统计信息的方法
需求1:给定一个RDD[Double],进行计算,该RDD的统计信息(count,mean,stdev,max,min) 代码: def main(args: Array[String]): Unit ...
- H5调用腾讯地图
获取当前定位的经纬度并在容器内显示当前位置 (安卓上的位置有点偏差) 在vue的index.html中需要引用 template <div id="container" st ...
- R语言 判断
R语言判断 决策结构要求程序员指定要由程序评估或测试的一个或多个条件,以及如果条件被确定为真则要执行的一个或多个语句,如果条件为假则执行其他语句. 以下是在大多数编程语言中的典型决策结构的一般形式 R ...
- QString与string的相互转换【转载】
文章转载自https://blog.csdn.net/qq_33485434/article/details/80680506 1.QString转换String string s = qstr.to ...
- vue中使用腾讯云Im
在vue中使用腾讯云Im 通信时,官方给出的文档及sdk提供的都是es5的写法.我们在vue中使用均需要用es6的方式来改写sdk的js文件及按自己所需要的业务调用对应的api就行了 1.对sdk的j ...