JDBC(5)ResSetMetaData&DatabaseMetaData&获取数据库主键的值
ResSetMetaData
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:
getColumnName(int column):获取指定列的名称
getColumnCount():返回当前 ResultSet 对象中的列数。
getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
isNullable(int column):指示指定列中的值是否可以为 null。
isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读
@Test
public void testResSetMetaData(){
Connection conn = null;
PreparedStatement preparedstatement = null;
ResultSet rs = null; try {
conn = getConnection();
String sql = "select * from student";
preparedstatement = (PreparedStatement) conn.prepareStatement(sql);
rs = preparedstatement.executeQuery(); //1.得到ResSetMetaData()对象
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData(); //2.得到列的个数
int c = rsmd.getColumnCount();
System.out.println(c); //3.得到列名
for(int i = 0; i < c;i++){
String sName = rsmd.getColumnName(i + 1); //得到列的别名
String cLabel = rsmd.getColumnLabel(i + 1);
System.out.println(sName + "==" + cLabel);
}
} catch (Exception e) {
e.printStackTrace();
}
}
DatabaseMetaData
DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息:
可以由Connection得到
getURL():返回一个String类对象,代表数据库的URL。
getUserName():返回连接当前数据库管理系统的用户名。
isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
getDatabaseProductName():返回数据库的产品名称。
getDatabaseProductVersion():返回数据库的版本号。
getDriverName():返回驱动驱动程序的名称。
getDriverVersion():返回驱动程序的版本号
@Test
public void testDatebaseMetaData(){ Connection conn = null;
ResultSet rs = null;
try {
conn = getConnection();
DatabaseMetaData data = (DatabaseMetaData) conn.getMetaData();
//得到数据库的版本号
int version = data.getDatabaseMajorVersion();
System.out.println(version); //得到连接数据库的用户名
String user = data.getUserName();
System.out.println(user); //得到MYSQL中有那些数据库
rs = data.getCatalogs();
while(rs.next()){
System.out.println(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
Close(rs,null , conn);
} }
prepareStatement(sql, autoGeneratedKeys)
@Test
public void testPreparedStatementjdbc(){ //返回主键的值
Connection connection = null;
PreparedStatement preparedStatement = null; try {
connection = JdbcTools.getConnection();
String sql = "insert into student(sname,sclass) values(?,?)"; //preparedStatement = (PreparedStatement) connection.prepareStatement(sql); //prepareStatement(sql, autoGeneratedKeys);
//使用重载的prepareStatement(sql, flag);生成 preparedstatement对象
preparedStatement = (PreparedStatement) connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, "MrChengs");
preparedStatement.setInt(2, 123456);
preparedStatement.executeUpdate(); //通过getGeneratedKeys();方法返回结果集
//包含了新生成的主键的ResultSet对象
ResultSet rs = preparedStatement.getGeneratedKeys();
if(rs.next()){
System.out.println(rs.getInt(1));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
Close(null, preparedStatement, connection);
}
}
JDBC(5)ResSetMetaData&DatabaseMetaData&获取数据库主键的值的更多相关文章
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- 数据库主键到底是用自增长(INT)好还是UUID好
其实针对使用自增长还是UUID,大家讨论最多的就是速度和存储空间,这里我加入了安全性和分布式,具体对比如下: 使用自增长做主键的优点:1.很小的数据存储空间2.性能最好3.容易记忆使用自增长做主键的缺 ...
- C#中使用MySqlCommand执行插入语句后获取该数据主键id值的方法
.net中要连接mysql数据库,需要引用MySql.Data.dll文件,这文件在mysql官网上有下载. 接着通过MySqlCommand执行插入语句后想要获取该数据主键id值的方法如下: lon ...
- SQL 数据库主键 ,外键
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
- c#生成唯一编号方法记录,可用数据库主键 唯一+有序
数据库主键目前主要有两种: a.自增数值型 优:占用空间小,插入快,有序对索引友好,易懂 缺:多数据库迁移会有重复键值问题,有可能爆表 b.GUID 优:多数据库唯一 缺:占用空间大,无序对索引不友好 ...
- 使用Hashids来保护你的数据库主键
为什么要保护数据库主键? 数据库主键一般是有序自增主键,极易被爬虫抓取数据,作为应用开发者,这是不应该的,你辛辛苦苦收集的数据转眼之间被其他人给抓取了,是不是很大的损失? Hashids的介绍 gen ...
- SQL Server数据库主键与索引的几点区别
我们在使用SQL Server数据库的时候常常会创建主键和索引,那么主键和索引到底有什么样的不同呢?本文我们主要介绍了主键和索引的区别. 主键和索引的区别如下: 主键是索引,但索引不一定是主键. 主键 ...
- MySQL数据库主键设计原则
目录 1. 主键定义... 5 2. 主键设计原则... 5 2.1 确保主键的无意义性... 5 2.2 采用整型主键... 5 2.3 减少主键的变动... 5 2.4 避免重复使用主键... 6 ...
- Struts2-从值栈中获取数据-EL表达式从值栈获取
从值栈获取数据 1 使用struts2的标签+ognl表达式获取值栈数据 (1)<s:property value=”ognl表达式”/> 获取字符串
随机推荐
- SSIS教程:创建简单的ETL包 -- 1. 创建项目和基本包
在本课中,将创建一个简单 ETL 包,该包可以从单个平面文件(Flat File)源中提取数据,使用两个查找转换组件转换该数据,然后将该数据写入AdventureWorksDW2012 的 FactC ...
- c#单例(Singleton)模式实现
sealed class Singleton { private Singleton(); public static readonly Singleton Instance=new Singleto ...
- Charles破解(转)
NB的Charles是一款付费软件.但…本文将讲解如何破解Charles.注:虽然与文章内容相悖,但还是希望大家能购买正版软件,毕竟都是做软件开发的,何必自断生路,要有版权意识. 环境信息: Mac ...
- efcore 配置链接sqlserver
本文将在asp.net core api 项目中使用efcore corefirst模式 简单配置链接sqlserver数据库,以及简单的数据库迁移操作 一 新建项目 1. 首先我们先用vs2017 ...
- [android] android通信协议
1.数据区分 手机端:常量存储 服务器端:数据库建表存储 2.数据来源 android,ios,pc,wap 3.数据采集,数据挖掘 IMEI:设备编号 IMSI:SIM卡编号 4.数据加密 4.1R ...
- 一:SpringIOC&DI
一:spring 1.spring介绍 spring负责管理项目中的所有对象,看作是项目中对象的管家. spring一站式框架: spring框架性质是属于容器性质的 容器中装什么对象就有什么功能,所 ...
- Java 重写(Override)与重载(Overload)区别
2019-04-1217:31:19 (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading). (2)方法重写是在子 ...
- Python 2.x版本和Python3.x版本的不同
在新的Python版本中,Python3.x虽然在主要的核心语言和模块等方面没有打的改变,但是Python3.x与2.x还是有很大区别的.而且Python3.x与2.x并不兼容. 比如说HTTPSer ...
- jQuery——子元素筛选器
子元素筛选器 名称 :first-child JQ语法 jQuery( "selector:first-child" ) 说明 :first-child选择器用于匹配作为父元素的第 ...
- ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组
大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数.如果是稀疏数组,对不存在的元素不调用传递的函数.在大多数情况下,调用提供的函数使用三个参数:数组元素,元素的索引,数组本身,通常 ...