使用executeUpdate插入成功一条记录,返回值是0?

EBENRUAIZI 2007-06-14 12:32:21
(1)以下是我写的一个javabean:Sdb.java
里的一个方法,jsp页面通过调用这个方法执行数据库记录的修改
public int executeUpdate(String sql)
{
int rowCount=0;
rs=null;
try
{
conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
rowCount=stmt.executeUpdate(sql);
System.out.println(String.valueOf(rowCount));
}
catch(SQLException ex)
{
ex.printStackTrace();
System.err.println("Sdb,excuteUpdate:"+ex.getMessage());
System.out.print("Sdb,excuteUpdate:"+ex.toString());//输出到客户端
return 0;
}
return 1;
}
(2)下面是我用来修改学生成绩的一个简单的jsp页
<jsp:useBean id="sdb" class="jbean.Sdb" scope="request"/>
<jsp:setProperty name="sdb" property="*"/>
<body>
<form name="form1" method="post" action="">
<p>学号:<input type="text" name="sno"></p>
<p>课程号:<input type="text" name="cno"></p>
<p>成绩:<input type="text" name="grade"></p>
<input type="submit" name="Submit" value="修改">
<%
String sql="";
String sno=sdb.toChinese(request.getParameter("sno"));
String cno=sdb.toChinese(request.getParameter("cno"));
String grade=sdb.toChinese(request.getParameter("grade"));
if(sno!=null&&cno!=null&&grade!=null)
{ if(!sno.equals("")&&!cno.equals("")&&!grade.equals(""))
{
sql="update Reports set grade='"+grade+"' where Sno='"+sno+"' and Cno='"+cno+"'";
int update=sdb.executeUpdate(sql);
if(update==0)
out.print("<script>alert('修改失败!');</script>");
}
}
%>
</form>
</body>

我现在遇到的问题是,当我成功插入一条记录时Sdb.java的executUpdate中的System.out.println(String.valueOf(rowCount));显示的却是0,但都有些表的记录的修改时又是1。
而且我在查询分析器里直接输入修改语句显示的也都是“所影响的行数为1行”

这是为什么啊
...全文
3466 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
matoku 2009-09-20
  • 打赏
  • 举报
回复
我也遇到同样的问题,希望得到解决.

我用JAVA更新IBM DB2里面某TABLE的一条记录,(不是BATCH UPDATE,仅一条)
用statement.executeUpdate去UPDATE这条记录
我去DB2里面查询这条记录,已经确切的肯定这记录已经被JAVA 的statement.executeUpdate 语句UPDATE成功.
当UPDATE成功本来executeUpdate应该返回1表示更新成功一条记录.
返回值是缺是0 .

至于代码方面,应该没有什么问题.估计是运行环境问题.

这返回值是否和DB2 9有关系?是JAVA的BUG ? 或者和JDBC有关?为什么会返回错误的值0?

希望大家能进一步讨论

急需得到帮助,谢谢.
javabeginner2006 2007-06-15
  • 打赏
  • 举报
回复
搞定了就结贴,没有的话请把问题提出来.
shan1119 2007-06-14
  • 打赏
  • 举报
回复
肯定是条件不满足,你把显示为0的时候的sql在页面打印出来,然后放到查询分析器里执行看看.

这里只看到更新的操作,没看到插入的操作.
javaors 2007-06-14
  • 打赏
  • 举报
回复
sdb.executeUpdate(sql)返回值是什么啊,是不是因为你修改的记录数为0,所以返回0 啊????
javabeginner2006 2007-06-14
  • 打赏
  • 举报
回复
页面上不是有
sql="update Reports set grade='"+grade+"' where Sno='"+sno+"' and Cno='"+cno+"'";
你试着打印出来,然后把它复制到查询分析器里执行.不要在自己写,就用生成的.
EBENRUAIZI 2007-06-14
  • 打赏
  • 举报
回复 1
为什么没人 看明白我的话的啊,我不是说 方法返回是0
是说System.out.println(String.valueOf(rowCount))这句输出的是0
就是说执行了
rowCount=stmt.executeUpdate(sql);这句后,rowCount的值为了0

没有异常发生
javabeginner2006 2007-06-14
  • 打赏
  • 举报
回复
看了你的upload方法以后,我想你应该去后台看看抛什么异常了?
public int executeUpdate(String sql)
{
int rowCount=0;
rs=null;
try
{
conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
rowCount=stmt.executeUpdate(sql);
System.out.println(String.valueOf(rowCount));
}
catch(SQLException ex)
{
ex.printStackTrace();
System.err.println("Sdb,excuteUpdate:"+ex.getMessage());
System.out.print("Sdb,excuteUpdate:"+ex.toString());//输出到客户端
return 0;
}
return 1;}
你的方法说明只有在异常情况下才是0.
EBENRUAIZI 2007-06-14
  • 打赏
  • 举报
回复
toChinese是用来处理页面的中文字符串的

对其他表的修改时,修改成功时返回的是1,对的

我用Reports和另一个表创建了一个视图,会不会是这个的缘故啊,因为就这两个表有着个问题

EBENRUAIZI 2007-06-14
  • 打赏
  • 举报
回复
shan1119(大天使,卐~解!)

使我写错了,不是要插入,就只是修改


当我成功修改一条记录时Sdb.java的executUpdate中的System.out.println(String.valueOf(rowCount));显示的却是0,但都有些表的记录的修改时又是1。
而且我在查询分析器里直接输入修改语句显示的也都是“所影响的行数为1行”
EBENRUAIZI 2007-06-14
  • 打赏
  • 举报
回复
zhangyan3000(yanyan)
改成你那样,stmt.executeUpdate(sql)返回的还是0 啊
我只是搞不懂为什么修改成功了还是返回0
zhangzhang3000 2007-06-14
  • 打赏
  • 举报
回复
public int executeUpdate(String sql)
{
int rowCount=0;
rs=null;
try
{
conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
rowCount=stmt.executeUpdate(sql);
System.out.println(String.valueOf(rowCount));
}
catch(SQLException ex)
{
ex.printStackTrace();
System.err.println("Sdb,excuteUpdate:"+ex.getMessage());
System.out.print("Sdb,excuteUpdate:"+ex.toString());//输出到客户端
//return 0;
}
return rowCount;//******************8重点是这里
}
zhangzhang3000 2007-06-14
  • 打赏
  • 举报
回复
把代码给改成这样:
public int executeUpdate(String sql)
{
int rowCount=0;
rs=null;
try
{
conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
rowCount=stmt.executeUpdate(sql);
System.out.println(String.valueOf(rowCount));
}
catch(SQLException ex)
{
ex.printStackTrace();
System.err.println("Sdb,excuteUpdate:"+ex.getMessage());
System.out.print("Sdb,excuteUpdate:"+ex.toString());//输出到客户端
//return 0;
}
return rowCount;
}

javabeginner2006 2007-06-14
  • 打赏
  • 举报
回复
sdb.toChinese
这个是转换什么的?你把学号,课程号给转了,怎么能找到这样的记录呢,那修改不就是0了吗?
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在 JDBC 中,PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdateexecute,它们的使用取决于 SQL 语句的类型和返回结果。 executeQuery 方法 executeQuery 主要用于执行返回单个结果集的 SQL 语句,比如 SELECT 语句。这是处理查询操作时最常用的方法。当执行 executeQuery 时,查询结果会被封装到一个 ResultSet 对象中,方便程序逐行读取和处理数据。例如,查询数据库中所有 AirEnvironmentPresent 记录的代码如下: executeUpdate 方法 executeUpdate 用于执行不返回结果集的 SQL 语句,如 INSERT、UPDATE、DELETE 以及 SQL 的 DDL(数据定义语言)语句(如 CREATE TABLE、DROP TABLE 等)。该方法返回一个整数值,表示受影响的行数。对于不涉及行操作的语句(如 CREATE TABLE),返回值为 0。例如,创建一个表的代码如下: execute 方法 execute 方法是一个通用的执行方法,可以用于执行任何类型的 SQL 语句,包括返回多个结果集、多个更新计数或两者的组合。它也可以用于执行 INSERT、UPDATE 或 DELETE 语句。例如,插入一条记录的代码如下: 总结来说,executeQuery 用于查询操作,返回单个结果集;executeUpdate 用于执行不返回结果集的操作,返回受影响的行数;而 execute 是一个更通用的方法,适用于更复杂的场景。

81,121

社区成员

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

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