JDBC 插入时, 取得插入的主键的返回值

(参考了这篇文章 )

 

数据库是 SQL Server 2000

 

作为数据库菜鸟, 为这个问题头疼了很久, 今天终于痛下决心解决掉, 爬文后得到解决方案, 心中暗爽.

 

"SQLServer:
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
这一句相当于执行查询操作,从结果集中getXXX(aliasName);就可以获取.

Oracle Release 2(之前的版本要先定义 ":aliasName"):
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO] aliasName;
同上的方法可以获取.这两种方法都是数据库支持的sql语句,原以根本不存在并发冲突.

mysql:
没有找到可以绝对保证原子性的语句(谁知道反馈一下)"

 

这里要纠正下, 直接用 "Insert ...; Select @@IDENTITY ... " 作为 SQL 语句执行 Statement.executeQuery(sql) 有问题, 会报异常 "该语句没有返回结果集 "

 

搜索后找到解决方案, 在语句前增加 "SET NOCOUNT ON;" 即可

 

即 "SET NOCOUNT ON;Insert ...; Select @@IDENTITY ...;", 执行后即可通过返回的 ResultSet 得到新增项的 ID

JDBC(Java Database Connectivity)中,要新增班级,你需要通过连接到数据库、创建SQL插入语句、执行该语句以及处理结果等步骤来完成。以下是一个简单的示例,假设你有一个名为`classes`的表,它有`id`(主键)、`name`等字段: 1. **建立连接**: ```java Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password"); ``` 将`your_database`替换为你的数据库名,`username`和`password`替换为实际的数据库用户名和密码。 2. **创建Statement或PreparedStatement**: - 使用Statement,安全性较低: ```java Statement stmt = conn.createStatement(); ``` - 使用PreparedStatement,安全性更高,防止SQL注入: ```java String sql = "INSERT INTO classes (name) VALUES (?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "新班级名称"); // 班级名称 ``` 3. **执行插入操作**: - 使用Statement: ```java int rowsInserted = stmt.executeUpdate(); ``` - 使用PreparedStatement: ```java rowsInserted = pstmt.executeUpdate(); ``` 4. **关闭资源**: ```java pstmt.close(); stmt.close(); conn.close(); ``` 5. **处理结果**: - 检查`rowsInserted`以确认插入是否成功,如返回值大于0表示成功。 记得检查并处理可能出现的异常,比如数据库连接失败、权限不足等。如果你需要执行更复杂的逻辑,可以在预处理语句中添加更多的占位符和条件判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值