create table if not exists test0( id int primary key auto_increment, name varchar(20) );
//String sql = "update test0 set name='newName' where id=1" ;//这个可以跑 String sql = "update test0 set name=? " ;//报错跑不了 PreparedStatement ps = conn.prepareStatement( sql ) ; ps.setString( 1, "name1" ) ; 错误如下:错误码42000. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1。
我的mysql是5.6的druid是1.1.9. 使用apache的comomio是可以update test0 set name=?是可以使用的,但是druid就不行。所以想问下。
还有druid有没有比较专门的入门教程?
原提问者GitHub用户caixiaosong
以下是一些可能导致update语句报语法错误的常见原因:
缺少关键字:update语句必须包含关键字UPDATE以指示要更新的表格。如果您的update语句缺少UPDATE关键字,则会报语法错误。
语法错误:update语句的语法非常严格,必须按照正确的语法格式编写。如果您的update语句存在语法错误,例如拼写错误、缺少逗号或引号等问题,则会报语法错误。
数据类型不匹配:update语句中指定的值必须与目标列的数据类型匹配。如果您尝试将不兼容的值插入到目标列中,则会报语法错误。
权限问题:如果您没有足够的权限更新目标表格,则会报语法错误。请确保您具有足够的权限更新目标表格,并且您正在使用正确的数据库用户登录。
表格不存在:如果您尝试更新不存在的表格,则会报语法错误。请确保您正在更新正确的表格,并且该表格存在于数据库中。
这个错误是因为MySQL不支持参数化的UPDATE语句。在MySQL 5.6之前的版本中,UPDATE语句中的SET语句后面只能跟列名,不能跟参数。所以在这种情况下,需要使用占位符来代替实际的值。
在Druid中,可以使用占位符来执行参数化的UPDATE语句。具体做法是在UPDATE语句中使用问号(?)代替实际的值,然后在PreparedStatement中使用setXxx()方法来设置对应的参数。
终于找到答案了,这个是我自己的锅。我在创建的时候给了sql,查询的时候又填上了sql。给了两次sql,所以报错了。
原回答者GitHub用户caixiaosong
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。