开发者社区> 问答> 正文

update 语句报语法错误42000.

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

展开
收起
山海行 2023-07-05 19:57:33 110 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    以下是一些可能导致update语句报语法错误的常见原因:

    缺少关键字:update语句必须包含关键字UPDATE以指示要更新的表格。如果您的update语句缺少UPDATE关键字,则会报语法错误。

    语法错误:update语句的语法非常严格,必须按照正确的语法格式编写。如果您的update语句存在语法错误,例如拼写错误、缺少逗号或引号等问题,则会报语法错误。

    数据类型不匹配:update语句中指定的值必须与目标列的数据类型匹配。如果您尝试将不兼容的值插入到目标列中,则会报语法错误。

    权限问题:如果您没有足够的权限更新目标表格,则会报语法错误。请确保您具有足够的权限更新目标表格,并且您正在使用正确的数据库用户登录。

    表格不存在:如果您尝试更新不存在的表格,则会报语法错误。请确保您正在更新正确的表格,并且该表格存在于数据库中。

    2023-07-30 15:06:43
    赞同 展开评论 打赏
  • 这个错误是因为MySQL不支持参数化的UPDATE语句。在MySQL 5.6之前的版本中,UPDATE语句中的SET语句后面只能跟列名,不能跟参数。所以在这种情况下,需要使用占位符来代替实际的值。
    在Druid中,可以使用占位符来执行参数化的UPDATE语句。具体做法是在UPDATE语句中使用问号(?)代替实际的值,然后在PreparedStatement中使用setXxx()方法来设置对应的参数。

    2023-07-11 09:59:20
    赞同 展开评论 打赏
  • 终于找到答案了,这个是我自己的锅。我在创建的时候给了sql,查询的时候又填上了sql。给了两次sql,所以报错了。

    原回答者GitHub用户caixiaosong

    2023-07-06 11:16:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载