JDBC PreparedStatement execute执行后成功插入数据库 确返回false 为什么?

huang_w 2009-04-18 05:08:39
public boolean add(StudentAddAction stu){

String sql = " INSERT INTO student(name,sex,birthday,address,emailNum,telephone,departmentId,majorId,gybh) " +
" values(?,?,?,?,?,?,?,?,?)";

boolean b = false;
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement(sql);
stmt.setString(1, stu.getName());
stmt.setString(2, stu.getSex());
stmt.setString(3, stu.getBirthday());
stmt.setString(4, stu.getAddress());
stmt.setString(5, stu.getEmailNum());
stmt.setString(6, stu.getTelephone());
stmt.setString(7, stu.getDepartmentId());
stmt.setString(8, stu.getMajorId());
stmt.setString(9, stu.getGybh());
b = stmt.execute();
if(b){
System.out.println("操作成功!"+b);
}else {
System.out.println(b);
}
} catch (SQLException e) {
e.printStackTrace();
if(stmt!=null){
try {
stmt.close();//关闭statement对象链接
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
return b;
}
...全文
3481 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperCesc 2010-09-01
  • 打赏
  • 举报
回复
原来我一直理解错误。。。
爱花的石头 2010-06-11
  • 打赏
  • 举报
回复 1
如果可以的话,换成executeUpdate()吧! 判断结果>=1执行成功,否则失败!!
爱花的石头 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dadi5566 的回复:]
boolean execute()
throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQuery 和 executeUpdate 处理形式更简单的语句。
execute 方法返回一个 boolean 值,以指……
[/Quote]


谢谢一楼的。。。。学习了。。原来是这么回事。。一直以为执行成功返回true,失败返回 false,many Thank !哈哈。
huang_w 2009-04-21
  • 打赏
  • 举报
回复
好 我就照你们的方法。谢谢大家
gao512008 2009-04-19
  • 打赏
  • 举报
回复
UP 已解决
wuqianyu1 2009-04-19
  • 打赏
  • 举报
回复
执行execute(),会返回boolean值,如果是true表示你执行的是查询(select)操作,如果是false,表示你执行的是更新操作啊(即DDL和DML语句啊)
如果执行过程中,没有出异常信息,就表示插入成功啊,同时也可以利用异常来提示插入失败的,比如,你这个可以这样写啊:

public void add(StudentAddAction stu){ //返回空就可以了

String sql = " INSERT INTO student(name,sex,birthday,address,emailNum,telephone,departmentId,majorId,gybh) " +
" values(?,?,?,?,?,?,?,?,?)";

boolean b = false;
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement(sql);
stmt.setString(1, stu.getName());
stmt.setString(2, stu.getSex());
stmt.setString(3, stu.getBirthday());
stmt.setString(4, stu.getAddress());
stmt.setString(5, stu.getEmailNum());
stmt.setString(6, stu.getTelephone());
stmt.setString(7, stu.getDepartmentId());
stmt.setString(8, stu.getMajorId());
stmt.setString(9, stu.getGybh());
b = stmt.execute();
} catch (SQLException e) {
System.out.println("插入失败");//如果插入失败,就会执行catch子句啊,可在这提示插入失败
}finally{ //关闭对象应该放在finally里,因为不管操作成功与否,都应该关
if(stmt!=null){
try {
stmt.close();//关闭statement对象链接
} catch (SQLException e1) {
e1.printStackTrace();
}
}
if(con!=null){//con连接也应该关的,且关时,应该遵循先开的后关原则啊,否则会报异常
try {
con.close();//关闭statement对象链接
} catch (SQLException e2) {
e2.printStackTrace();
}
}
}
}
bijjyy 2009-04-19
  • 打赏
  • 举报
回复
直接到数据库中看一下,或者用再执行一条jdbc语句查看一下不就知道是不是执行成功了
zhangpeixv 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuqianyu1 的回复:]
呵呵,execute()返回的是一个boolean值,代表两种不同的操作啊,getResultSet()返回的是结果集,而getUpdateCount()返回的是更新的记录书,我觉得你真得有必要标志插入是否成功的话,那就没必要execute(),再getResultSet()了,直接
Java code

if(stmt.executeUpdate()>0){
b=true;
}else b=false;
return b
[/Quote]
up
变通一下嘛
licip 2009-04-19
  • 打赏
  • 举报
回复
说得有理!
wuqianyu1 2009-04-19
  • 打赏
  • 举报
回复
呵呵,execute()返回的是一个boolean值,代表两种不同的操作啊,getResultSet()返回的是结果集,而getUpdateCount()返回的是更新的记录书,我觉得你真得有必要标志插入是否成功的话,那就没必要execute(),再getResultSet()了,直接


if(stmt.executeUpdate()>0){
b=true;
}else b=false;
return b
huang_w 2009-04-19
  • 打赏
  • 举报
回复
楼上的还真细心 呵呵 资源关闭我确实放错地方。con.close();我放在一个单独的方法里面了。
现在问题是我需要一个标识来判断插入是否成功,如果成功我给request里面放ok,如果不成功放fail
目前我用executeUpdate()方法来代替 返回的是int
execute() 就不能来判断吗?我在网上找了很多 还是没有相关的方法。
有没有谁知道怎么用一楼给的getResultSet 或 getUpdateCount ?
baofengyingyinaaa 2009-04-18
  • 打赏
  • 举报
回复
int i=stmt.executeUpdate();
if(i>0){
//插入成功
}else{
//失败
}
haojia0716 2009-04-18
  • 打赏
  • 举报
回复
错了,是1楼的。
haojia0716 2009-04-18
  • 打赏
  • 举报
回复
2楼的,直接就是复制API嘛,哎。
huang_w 2009-04-18
  • 打赏
  • 举报
回复
谢谢楼上的,我有点明白了,那一般使用什么方式来判断插入成功否?
dadi5566 2009-04-18
  • 打赏
  • 举报
回复
boolean execute()
throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQuery 和 executeUpdate 处理形式更简单的语句。
execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果。


返回:
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧