package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* 三种获得自动生成主键的方法。
*
* @author 赵学庆
*
*/
public class TestGetPK {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/mytest";
Connection con = DriverManager.getConnection(url, "root", "111111");
System.out.println(getPK1(con));
System.out.println(getPK2(con));
System.out.println(getPK3(con));
}
/**
* 使用JDBC 3.0提供的 getGeneratedKeys。推荐使用
*
* @param con
* @return
* @throws Exception
*/
public static long getPK1(Connection con) throws Exception {
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO t_type (name) values ('Can I Get the Auto Increment Field?')",
Statement.RETURN_GENERATED_KEYS);
int autoIncKeyFromApi = -1;
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
autoIncKeyFromApi = rs.getInt(1);
}
return autoIncKeyFromApi;
}
/**
* 使用数据库自己的特殊SQL.
*
* @param con
* @return
* @throws Exception
*/
public static long getPK2(Connection con) throws Exception {
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO t_type (name) values ('Can I Get the Auto Increment Field?')",
Statement.RETURN_GENERATED_KEYS);
int autoIncKeyFromFunc = -1;
ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
if (rs.next()) {
autoIncKeyFromFunc = rs.getInt(1);
}
return autoIncKeyFromFunc;
}
/**
* 使用可更新的结果集。
*
* @param con
* @return
* @throws Exception
*/
public static long getPK3(Connection con) throws Exception {
Statement stmt = con.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM t_Type");
rs.moveToInsertRow();
rs.updateString("name", "AUTO INCREMENT here?");
rs.insertRow();
rs.last();
int autoIncKeyFromRS = rs.getInt("id");
return autoIncKeyFromRS;
}
}
分享到:
相关推荐
只要1分就可获得JPA主键生成策略,很全的哦
整个方案根据已经设计好的数据库自动生成,在生成的过程种可以灵活的定义生成参数. 系统实现了比较完整的O-R映射.数据库中的所有逻辑对象表,列,字段,主键,外键,Null, Default,唯一索引都在类里得到了体现,同时还...
unique="是否唯一性约束" nullable="是否可以为空" pk="是否主键,在表没有主键的情况下,可以指定一个代理主键" updatable="是否可以更新" insertable="是否插入" enumString="枚举值,以分号分隔,示例值:M(1,...
1、产生文件存储的路径...6、只是生成代码文件,不能自动生成编译后的文件,需要用户自动生成。 注:由于时间、金钱、···等等x种因素,这些缺陷都没有得到改善!日后有机会一定整好! 优点:简单易用,层层清晰。
设计模式和构件模式,将一个解决方案分解为6个Project,分别是通用类库, 通用控件库,数据访问工程,业务规则工程,项目专用控件工程,UI界面工程,整个方案根据已经设计好的数据库自动生成,在生成的过程种可以...
生成Mapper映射文件(dao层接口SQL语句,支持生成3表关联(比如:A表关联B表,B表关联C表,一次便可获得3张表的数据),支持主键策略;<如果选择创建Assist支持分页,去重,排序,无注入动态查询等>); 生成service层接口(与dao...
* GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型) * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用) * generator 指定...
10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...
10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...
通过PL/SQL 自己手动生成DDL,不过目前我只写了 表、主键、注释、索引。其他的分区、约束还没写。后期加上 缺陷:每个字段后面都有","需要手动剔除,修改过后的已上传,csdn中不知道怎么修改,只好重新上传
10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...
6、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县的多级选项 ★ 7、支持表单提交超过100KB的文本数据,支持文件上载 8、支持输入控件名加密功能,防止他人从客户端HTML中猜解数据字段名 ★ ...
10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...
★ 5、支持对用户输入内容进行服务器端与客户端JS双重验证 ★ 6、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县的多级选项 ★ 7、支持表单提交超过100KB的文本数据,支持文件上载...
10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...
通由Ole,自动生成了TDATASET。 想用对象,没问题,看下面: 定义: ss: TVALUEOBJECT; ss := TUserVO(pp.GetItem(1)); if ss<>nil then ShowMessage((ss as TUserVO).pName); 之后,你想怎么样就怎么样了。。。。...
///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句...
//因为主键是自动生成不需要加所以是addByNoKey 返回的布尔值告诉用户是否成功。 2.例如要修改师资队伍中id=5的教师信息: 同样在构造Hyberbin的时候需要给出需要修改的数据放在szdw的POJO类中去,还要给出szdw表的...
///FileUpload()文件上传 路径upload/ 自动重命名 ///FileDownload()文件下载 调用方法如 FileDownload(Response,Server,文件虚拟路径) ///FileTxtWrite()写入TXT文本 给出要创建Txt 文本的地址 ///...
///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句查询...