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 ...
随机推荐
- 如何调用DLL中的导出类
之前在网上一直查不到关于把类打包成dll文件的程序,今天自己写了个测试程序,供大家参考 一.生成类的dll文件 1.我是在vs2008上测试的,建立工程,在选择建立何种类型的工程的时候,勾上appli ...
- JUC源码分析-集合篇(八)DelayQueue
JUC源码分析-集合篇(八)DelayQueue DelayQueue 是一个支持延时获取元素的无界阻塞队列.队列使用 PriorityQueue 来实现. 队列中的元素必须实现 Delayed 接口 ...
- BBS论坛 后台管理
七.后台管理 后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- sqlserver 如何瞬间执行上万条数据
核心的内容是:使用自定义表类型 第一步:创建存储过程P_T1DeclareInfo_Upload_new 参数: T1DeclareInfo_UploadPNSN_Param 类型 T1Declar ...
- 基于用户的协同过滤(UserCF)
- Java SE(1)
Java SE基础回顾 1.循环语句中的break是终止全部循环,跳出循环体:而continue是终止本次循环,跳执行下一循环 2.return语句有两个作用:返回值:结束方法的运行 3.对于java ...
- vue生态系统之vuex
一.webpack生成项目 1.webpack 在需要建立项目的目录中进行初始化项目 E:\vueProject>vue init webpack vuexpj ? Project name v ...
- WordPress .gitignore
# ----------------------------------------------------------------- # .gitignore for WordPress @salc ...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoa
最近运行ssm项目遇到tomcat启动报错: 解决办法,右击项目选择properties 在Deployment Assembly add 选择maven dedependencies 项目成功运行 ...
- Shell中整数自增的几种方式
Shell中整数自增的几种方式 2016年08月27日 19:07:40 杰瑞26 阅读数:2816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...