java api里是这样说的
executeUpdate
int executeUpdate() throws SQLException
Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.
Returns:
either (1) the row count for INSERT, UPDATE, or DELETE statements or (2) 0 for SQL statements that return nothing
在使用乐观锁的时候经常需要验证这个返回值来防止并发,但不同的JDBC驱动有不同的实现,并不是所有插入或更新都返回1,最近试了几个:
MySQL中:
INSERT INTO T VALUES(?, ?) ON DUPLICATE KEY UPDATE c = ?;
会有1、2、3三种可能的返回值;
PostgreSQL中:
INSERT INTO T1 VALUES(?, ?);
当T1没有主键时,插入返回值为0;
所以不能简单地靠返回值再决定回滚,即:
int rowN = st.executeUpdate(sql);
if(rowN == 1) //错误代码
conn.rollback();
if(rowN < 1) //错误代码
conn.rollback();
还有很多别的情况,欢迎讨论
分享到:
相关推荐
JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...
int i = stmt.executeUpdate(sql); if (i > 0) { System.out.println("注册成功"); } else { System.out.println("注册失败"); } } catch (Exception e) { e.printStackTrace(); } ...
2. 正确,`Statement`接口的`execute(String sql)`返回值是`boolean`,表示SQL语句的执行是否成功。 3. 正确,`PreparedStatement`是`Statement`的子接口,用于执行预编译的SQL语句。 4. 错误,`DriverManager....
在Java开发中,尤其涉及到数据库操作时,`execute`, `executeQuery` 和 `executeUpdate` 这三个方法是JDBC编程中非常重要的一部分。它们分别适用于不同类型的SQL语句,理解这些方法的区别对于正确高效地执行数据库...
4. **执行查询**:调用`executeQuery()`或`executeUpdate()`方法执行SQL查询或DML操作。对于查询,结果将返回一个`ResultSet`对象,可以遍历获取数据。 5. **处理结果**:如果执行的是查询,需要遍历`ResultSet`,...
- 如果执行的是更新操作,则返回值为int类型,代表受到影响的行数。 7. 关闭连接: 一旦完成对数据库的操作,应该释放数据库资源,关闭连接。关闭资源的顺序很重要,应按照从外到内的顺序关闭ResultSet、...
### JDBC中Statement接口提供的execute、executeQuery和executeUpdate的区别 #### 一、概述 在Java开发过程中,尤其是在处理数据库操作时,我们经常会遇到`execute`、`executeQuery`和`executeUpdate`这三个方法。...
CallableStatement用于调用数据库中的存储过程,其方法与PreparedStatement类似,但可以处理OUT参数和返回值。 7. **连接池**: 在实际项目中,为了提高性能和减少资源消耗,通常会使用连接池(如C3P0、HikariCP...
3. 执行SQL操作:通过`Connection`对象创建`Statement`或`PreparedStatement`,然后调用其`executeQuery()`或`executeUpdate()`方法执行SQL语句。 4. 处理结果:对于查询操作,可以获取`ResultSet`对象并遍历结果;...
对于DML语句,可以检查executeUpdate()的返回值判断影响的行数。 5. 关闭资源:使用完毕后,记得关闭`ResultSet`、`Statement`和`Connection`,避免资源泄露。 四、高级特性 1. 分布式事务:Greenplum支持分布式...
5. **处理结果**:插入操作无返回结果,但可以检查`executeUpdate()`的返回值,判断是否成功插入。 6. **关闭资源**:最后,记得关闭Statement、Connection等资源,防止资源泄露。 在Oracle数据库中,Java类库提供...
- 使用`executeUpdate()`执行INSERT、UPDATE或DELETE语句,返回值为受影响的行数。 ```java int count = st.executeUpdate(sql); ``` - 对于SELECT语句,使用`executeQuery()`,返回`ResultSet`对象。 ```java ...
使用`executeUpdate()`方法执行插入操作,返回值为受影响的行数。 ```java pstmt.setInt(1, id); pstmt.setString(2, name); int rowsInserted = pstmt.executeUpdate(); ``` 4. **数据查询(Select)** ...
- 插入、更新或删除数据:使用`Statement`对象的`executeUpdate()`方法,返回值表示受影响的行数。 ```java public boolean executeUpdate(String sql) { // ... Statement stmt = conn.createStatement(); int ...
- 注册过程中,使用 `Statement.executeUpdate(sql1)` 执行插入操作,返回值表示受影响的行数。如果返回值不为0,表示数据已成功插入,反之则表示注册失败。 7. **用户界面反馈**: - 使用HTML和JavaScript向用户...
4. **执行SQL**:调用`Statement`或`PreparedStatement`的`executeQuery()`或`executeUpdate()`方法执行SQL查询或修改操作。 5. **处理结果集**:对于`executeQuery()`返回的结果集,可以使用`ResultSet`对象进行...
7. `executeUpdate(sql)`方法的返回值是int类型,表示SQL语句影响的行数,常用于INSERT、UPDATE、DELETE操作。返回值的意义在于确认SQL语句执行后数据库的修改情况。 8. `Statement`和`PreparedStatement`的区别: ...
- 更新数据:同样使用`executeUpdate()`,返回值表示更新行数。 - 删除数据:同上,返回删除的行数。 **5. 数据查询** - `ResultSet`对象:遍历查询结果,`rs.next()`检查是否还有下一行,`rs.getString(column...
- `executeUpdate(String sql)`:用于执行SQL更新语句(如INSERT、UPDATE、DELETE),返回受影响的行数。 - `execute(String sql)`:执行任意SQL语句,根据执行结果返回布尔值。 **3.2 CRUD操作** CRUD操作指的是...
`Statement`接口用于执行SQL语句,返回`ResultSet`对象,包含`executeQuery()`(用于查询)、`executeUpdate()`(用于DML操作,如INSERT、UPDATE、DELETE)和`execute()`(执行任意SQL语句)等方法。 #### ...