您的位置:首页 > 数据库

SQL中execute操作返回false的问题

2017-11-18 20:23 295 查看
博客原文

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


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内部细节代码如下:

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()返回的是更新的记数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql
相关文章推荐