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;
}
}
分享到:
相关推荐
"自动生成主键uuid.zip"这个压缩包文件很可能是包含了一个Java程序示例,用于演示如何生成这样的32位ID。 在Java中,生成UUID主要通过`java.util.UUID`类提供的静态方法。`UUID.randomUUID()`是生成一个随机的UUID...
【前端、后端代码自动生成】技术是一种提高软件开发效率的方法,它允许开发者通过特定工具快速生成前后端的代码,从而将注意力集中在更高级别的业务逻辑实现上。这种技术适用于各种现有的系统框架,无需依赖特定的...
只要1分就可获得JPA主键生成策略,很全的哦
本资源"简单三层代码生成器(Models DAL BLL)"正是为开发者提供了一个工具,能够自动生成这三个层次的代码,从而提高开发效率,减少重复工作。 首先,我们来详细解释一下这三个层次: 1. **Models(模型层)**:...
"Java自动生成Mysql数据库结构"这个主题,就是关于如何利用编程语言自动化处理数据库设计的一部分。这个功能可以帮助开发者快速地创建数据库文档,减少手动编写SQL脚本和设计模式的时间。 首先,我们要理解这个代码...
SQL Server 数据库字典自动生成工具是一款专为SQL Server设计的实用软件,旨在帮助数据库管理员和开发者快速生成关于数据库结构的详细文档。这款工具简化了手动编写数据库字典的过程,节省了时间和精力,并且能够...
数据库表自动生成文档是一种高效的方法,它可以帮助数据库管理员和开发人员快速整理和理解数据库结构,无需手动编写复杂的文档。在IT行业中,特别是在数据库管理和软件开发过程中,这种工具扮演着重要的角色。本文将...
在本文中,我们将深入探讨如何使用C#语言来实现自动生成数据库表的实例,并结合提供的源码进行分析。首先,我们需要理解C#编程语言的基本概念,它是.NET框架的一部分,广泛用于开发桌面应用、Web应用以及游戏等。 1...
#### 三、使用 Sequence 生成主键值 为了使用 `Sequence` 为表中的主键字段赋值,可以通过以下步骤进行: 1. **创建表**: ```sql CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25...
在自动生成映射文件的过程中,还需要考虑如何处理主键生成策略、关联关系的映射、复杂查询的构建等问题。同时,为了保证代码的可读性和可维护性,模板的设计和代码的规范也是非常重要的。 综上所述,逆向工程自动...
MyBatis Generator Core 1.3.2 是一个强大的工具,用于自动生成MyBatis的映射文件、Java模型类以及DAO接口。这个版本的工具是MyBatis框架的一个重要组成部分,它极大地简化了开发过程,减少了手动编写SQL映射和Java...
在PHP编程中,有时我们需要为新增的数据自动生成唯一的、具有特定格式的编号,这在诸如学生管理系统、订单系统等场景中十分常见。本篇将详细讲解如何基于数据ID来实现这样的功能。 首先,我们看到标题提到的是“php...
总的来说,使用Java自动生成数据库字典是提高开发效率的有效手段。结合MySQL的元数据查询和Markdown的易读性,我们可以快速创建清晰、一致的数据库文档,这对于团队协作和项目维护都具有极大的价值。
这不仅有助于确保数据的唯一性,还能简化开发过程中的某些环节,尤其是在需要自动增长的主键时。下面将详细介绍如何通过序列(Sequence)和触发器(Trigger)来实现在Oracle中创建自增的主键。 #### 序列(Sequence...
在数据库设计中,自动增长字段是一种特殊类型的字段,通常用于作为表的主键。当插入新记录时,如果该字段未被指定值,则数据库会自动为该字段分配一个唯一的递增值。这种机制简化了数据管理,提高了数据完整性,并有...
### MySQL的插入问题:如何获取自动增长的ID ...在使用Java程序通过JDBC接口插入记录时,推荐使用`PreparedStatement`的`getGeneratedKeys()`方法来获取自动生成的ID,以确保数据的完整性和安全性。
如果尝试插入时提供了一个主键值,那么系统将尝试使用这个值,而不是自动生成新的唯一值,这可能导致主键重复错误。 在问题的描述中,开发者遇到的问题就是由于在`ContentValues`中为主键字段`id`赋值(尽管值为0)...
代码自动生成技术作为一种高效提升软件开发速度的方法,在近年来得到了广泛的关注和应用。该技术的核心思想在于通过自动化手段将高级抽象模型(如UML类图)转换为具体的代码实现,从而减轻开发人员的工作负担,并...
整个方案根据已经设计好的数据库自动生成,在生成的过程种可以灵活的定义生成参数. 系统实现了比较完整的O-R映射.数据库中的所有逻辑对象表,列,字段,主键,外键,Null, Default,唯一索引都在类里得到了体现,同时还...
unique="是否唯一性约束" nullable="是否可以为空" pk="是否主键,在表没有主键的情况下,可以指定一个代理主键" updatable="是否可以更新" insertable="是否插入" enumString="枚举值,以分号分隔,示例值:M(1,...