connection-preparedStatement.executeUpdate语句不能执行

问题描述

preparedStatement.executeUpdate语句不能执行

public boolean updateStaff(Staff staff) {
try {
if (connection == null) {
connection = ConnectionFactory.getConnection();
}
String sql = "update staff set staff_name=?,staff_auth=? where staff_id=?";
PreparedStatement preparedStatement = connection
.prepareStatement(sql);

        preparedStatement.setString(1, staff.getStaffName());
        preparedStatement.setString(2, staff.getStaffAuth());
        preparedStatement.setInt(3, staff.getStaffId());
        int row = preparedStatement.executeUpdate();
        if (row >= 1) {
            return true;
        } else {
            return false;
        }

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    } finally {
        ConnectionFactory.closeConnection(connection);
    }
}

调用:
Staff staff = new Staff();
staff.setStaffId(123);
staff.setStaffName("2");
staff.setStaffAuth("gh");
StaffDaoImpl staffDaoImpl = new StaffDaoImpl();
boolean i = staffDaoImpl.updateStaff(staff);
System.out.println(i);


不报错,参数都能正常传送,执行了preparedStatement.executeUpdate();返回0,不知道哪里有问题,各位大神帮帮忙啊

解决方案

preparedstatement.executeUpdate()不需要返回值

解决方案二:

该方法用于在此PreparedStatement对象中执行SQL语句,该语句必须是一个数据操作语句,如INSERT、UPDATE、DELETE,或者是无返回内容的SQL语句。

语法  executeUpdate() 

示例  下面的代码利用executeUpdate方法向数据库插入一条记录。
Connection conn = ……      //省略部分代码
String sql = "INSERT INTO users(username,pwd) VALUES ("lisi","123456")";
PreparedStatement ps = conn.prepareStatement(sql);
int i =ps.executeUpdate();     //执行
System.out.println(i);      //成功插入记录,打印1

这是我百度的,说明你代码没有问题,应该是逻辑有问题,你的sql应该有问题!!!更新有问题是不报错误的,这点要注意,
看看你的字段啥的都匹配好了么,插入都写对了吗

解决方案三:

你这样把sql语句写死,把你数据库里的值,你直接写在代码里,看看能执行吗

String sql = "update staff set staff_name=?,staff_auth=? where staff_id=?";

问号直接写数据,下面不插入,直接执行,看看返回1么

解决方案四:

2009年12月日语1级证书2009年12月日语二级证书2010-12日语N1级证书

解决方案五:

碰到同样的问题。
而且非常明显:setString(1,"xxx") 和 setString(1,"xxx "),两者的差别是空格。有没有空格效果不一样,必须将参数填充空格到字段所需的长度。

但这样对编程是很麻烦的,我总不能老关注字段的长度。

各位大咖有没有解决办法?

时间: 2024-10-03 04:13:59

connection-preparedStatement.executeUpdate语句不能执行的相关文章

使用参数化和块语句来提高批处理SQL语句的执行效率

如果你的项目要求你的程序对高达几万条的数据在集中的时间内执行固定序列的操作,且不能完全使用存储过程时而需要使用程序来执行时.会需要这些优化. 我们知道,SQL服务器对一条语句的执行,需要分析.编译.执行这些步骤,通过参数化我们可以对一种命令只分析和编译一次,而执行多次,从而提高效率.在执行时,如果每次提交语句,可以完成多条SQL语句,则可以减少通讯时间,也可以提高效率. 通过 System.Data.IDbCommand.Prepare() 方法,我们可以在第一次执行语句时,分析和编译SQL语句

SQLServer中SELECT语句的执行顺序

今天在写一条语句的时候,在查询分析器里边执行 要用10s,换用另外一种写法只用少于1s的时间,同事说是因为Sql句语执行顺序的原因.之前看过一点相 关的书,有一点印象,到网上找了资料,学习下. 逻辑查询处理步骤 复制代码 代码如下: (8)SELECT (9)DISTINCT (11)<TOP_specification> <select_list> (1)FROM <left_table> (3) <join_type> JOIN <right_ta

通过分析SQL语句的执行计划优化SQL(二)

优化|语句|执行 第5章 ORACLE的执行计划 背景知识:        为了更好的进行下面的内容我们必须了解一些概念性的术语: 共享sql语句    为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个

Java中finally语句与return语句的执行次序

Java finally语句到底是在return之前还是之后执行? 网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的: (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到. (2)在try块中有Sy

c语言-if语句没有执行 C语言

问题描述 if语句没有执行 C语言 CreateList(L,N); temp = L; while(temp->next != temp && temp) { for(i=M-1;i>0;i--) { if(temp->next == NULL) temp->next = L->next; else temp = temp->next; } cout<next->nData< temp->next = temp->next

oracle sql语句疑问,关于嵌套查询语句的执行先后顺序

问题描述 oracle sql语句疑问,关于嵌套查询语句的执行先后顺序 1.select A.END from 2. tableA A,tableB B 3.where A.X=B.Y 4.and A.END = ( 5. select MAX(END) from tableA 6. where tableA.X = B.Y 7. ): 我想问一下.按理max只有一个最值,为何这样写会出来多个.另外第5,6,7行是子查询,不是很理解为什么可以里面调用父查询里面的B.能详细说一下这个sql 完整的

服务器-web项目在执行大量的插入语句时执行一段时间后卡死

问题描述 web项目在执行大量的插入语句时执行一段时间后卡死 SSH框架,在页面有一个poi 批量导入excel的功能,每读取excel一行,保存为一个实体然后循环insert到DB里.刚开始程序运行正常,但是一段时间过后,系统出现卡死,不再执行insert sql ,刷新页面也没有响应,只能重启服务器.期间程序没有报错,myeclipse也不是内存溢出导致的卡死,因为点击其他功能模块时不会出现上述所说的问题,只有在执行大量的insert sql 时才会. 因为代码没有报错我也就不贴代码了. 我

SQL Server中如何清除特定语句的执行计划缓存

SQL server运行到一定的时候, 执行计划的缓存可能会相当大,有些能到几个GB的大小.这个时候假设某个语句比较复杂而且SQL server 生成的执行计划不够优化,你希望把该执行计划的缓存清除使得SQL server能够重新编译该语句.该如何做呢? 如果是存储过程则很好办,直接使用sp_recompile就可以了,如下所示.如果参数是表,那么所有用到该表的存储过程或http://www.aliyun.com/zixun/aggregation/17067.html">trigger都

servlet内部跳转if语句不执行,也不报错

问题描述 servlet内部跳转if语句不执行,也不报错 } else if ("shoppingCartBooks".equals(flag)) { String username = req.getParameter("username"); System.out.println(username+"****"); if (username != null) { List list = bs.getAllBooksInShoppingCart