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 ...
随机推荐
- Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询
目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...
- 前端(二)—— CSS的引入方式、长度与颜色单位、常用样式、选择器
CSS的引入方式.长度与颜色单位.常用样式.选择器 一.CSS的三种引入方式 1.行间式 <!doctype html> <html> <head> <met ...
- C# 十六进制转换ASCII
string s = "这里放十六进制字符串"; byte[]buff=new byte[s.Length/2]; int ind ...
- JUC源码分析-线程池篇(三)Timer
JUC源码分析-线程池篇(三)Timer Timer 是 java.util 包提供的一个定时任务调度器,在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. 1. Ti ...
- 【Linux】- Systemd 实战篇
转自:阮一峰的网络日志 一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下 ...
- C# WinfForm 控件之dev表格 GridControl
基本用法 1.新建一个winformAPP 放一个gridControl 为gridC 再放一个button 用法与dataGrid一样 代码如下: /// <summary> /// 显 ...
- eduCF#61 F. Clear the String /// 区间DP 消除连续一段相同字符 全部消完的最少次数
题目大意: 给定字符串 每次消除可消除连续的一段相同的字符的子串 求消除整个字符串的最少消除次数 #include <bits/stdc++.h> using namespace std; ...
- Mysql ibd恢复
一,binlog恢复,这里就不说了. 二,ibd方式其实很简单, 生成数据结构(有的可以跳过) 1,创建一个新库 2,新库里新建一个表,名字和回复的表一样. 字段数量一样(字段类型和名字都无所谓) 3 ...
- scip 练习2.20
(define (same-parity x . z) (define (q? y) (= (remainder y ) )) (define (o? y) (= (remainder y ) )) ...
- CSS选择器,层叠
CSS选择器 .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id="firstname" ...