SQL中execute操作返回false的问题

今天在码代码的时候遇到了一个问题,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SQL一:
sql = " update t_receive_user set user_email = ?, user_name = ?, user_tel = ?, update_timestamp = ? , note = ? " +
" where user_sid = ? ";
connection = getDataSource().getConnection();
ps = connection.prepareStatement(sql);
ps.setObject(1,tReceiveUser.getUserEmail());
ps.setObject(2,tReceiveUser.getUserName());
ps.setObject(3,tReceiveUser.getUserTel());
ps.setObject(4,Time.getCurrentTime()/1000);
ps.setObject(5,tReceiveUser.getNote());
ps.setObject(6,tReceiveUser.getUserSid());
System.out.println(ps.execute());
SQL二:
sql = " delete t_receive_user where user_sid = ? ";
connection = getDataSource().getConnection();
ps = connection.prepareStatement(sql);
ps.setObject(1,tReceiveUser.getUserSid());
System.out.println(ps.execute());
SQL三:
sql = "INSERT t_receive_user (user_email,user_name,user_tel,update_timestamp,note)" +
" values (?,?,?,?,?)";
ps = connection.prepareStatement(sql);
ps.setObject(1,tReceiveUser.getUserEmail());
ps.setObject(2,tReceiveUser.getUserName());
ps.setObject(3,tReceiveUser.getUserTel());
ps.setObject(4,Time.getCurrentTime()/1000);
ps.setObject(5,tReceiveUser.getNote());
System.out.println(ps.execute());

我发现即使我的数据库更新成功、删除成功、增加成功,返回值都是false。

execute内部细节代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public boolean execute() throws SQLException {
synchronized(this.checkClosed().getConnectionMutex()) {
boolean returnVal = false;
this.checkStreamability();
this.setInOutParamsOnServer();
this.setOutParams();
returnVal = super.execute();
if(this.callingStoredFunction) {
this.functionReturnValueResults = this.results;
this.functionReturnValueResults.next();
this.results = null;
}
this.retrieveOutParams();
return !this.callingStoredFunction?returnVal:false;
}
}

查资料发现:boolean execute() throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句;executeQuery 和 executeUpdate 处理形式更简单的语句。 execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果返回:如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false,意思就是如果是查询的话返回true,如果是更新或插入的话就返回false了;execute()返回的是一个boolean值,代表两种不同的操作啊,getResultSet()返回的是结果集,而getUpdateCount()返回的是更新的记数

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
Fork me on GitHub