对于数据库的UPDATE操作,写了如下的预处理语句 "UPDATE result SET ?=? WHERE ID=?" 第一个参数处应该是列名假如我要UPDATE的列名叫“Linux”,我在调用这个预处理语句时,用setString(1,“Linux”)的方法 给参数赋了值在java中运行,报异常
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 ''Linux'=1 WHERE ID=1' at line 1说是格式错误。求教给位大侠怎么解决???谢谢!!感激不尽!!

解决方案 »

  1.   

    打印出来你的sql语句看看  肯定拼接错了
      

  2.   

    这是不能的,
    <prop key="hibernate.show_sql">false</prop>
    你设置为true可以显示你的HQL
    ---------------------------------------------
    为什么会报错呢?"UPDATE result SET ?=? WHERE ID=?" 第一个参数处应该是列名
    绑定的是这样的。
    setString(1,“Linux”);
    setString(2,“ubuntu”);
    setString(3,1);
    HQLUPDATE result SET "Linux"="ubuntu" WHERE ID=1;这句科执行吗?当然不可以。
    因为你绑定时字符串是要带“”的,否则就不叫字符串变量了
      

  3.   

    我在设置列名时确实使用了双引号呀,sqlPre1.setString(1, columnName);这个columnName是这个方法的一个参数,是一个字符串,是别的方法要调用时传过来的字符串,说明要更新哪一列。始终找不到问题所在啊麻烦您帮我再想想可能是哪里出了错。。谢谢!
      

  4.   

    我打印了设置完参数后的sql语句: UPDATE result SET 'Linux'=1 WHERE ID=1完全没有错误啊!!求指点啊!!
      

  5.   

    我用SQLfront试了一下,执行下面这句话
    UPDATE result SET 'Linux'=1 WHERE ID=1
    是无法执行的,会说格式错误
    但如果把Linux的单引号去掉,即:
    UPDATE result SET Linux=1 WHERE ID=1
    就是可以执行的。
    可用了setString(1,"Linux")以后列名确实是带一个单引号啊??如果能去掉应该就好了!!
      

  6.   

    如果你想写一个公共的修改函数封装,我建议你将HQL作为参数而不是列明,确实列明你要穿字符串是不行的。
      

  7.   

    我明白了我之前就是传完整的sql语句给这个公共的修改函数的,前两天想尝试改的更为方便一些,于是决定试试将列名作为参数来传给修改函数。事实证明这样做貌似是不行的谢谢你!顺便问一句,您提到的HQL是什么?
      

  8.   

    原来是这样我之前就是按您所说的,将SQL语句作为参数,传给这个公共的修改函数。前两天想试着简化一下,将列名作为参数。看到这样做是不行的谢谢你!顺便问一句,您提到的HQL是什么?
      

  9.   

    列名无法做为参数,但既然已经是在JAVA中编程了,你可以直接在JAVA的代码中生成你需要的SQL语句字符串。
      

  10.   


    Hibernate   对sql  进行封装了,他的语法和sql还有一定的区别,比如必要从user 表中查数据,你的HQL 可以这样 hql=“ from User  wehre ... ”  注意User  要大写,这是根据ORM映射产生的一个 类User。
    但是在Hibernate  也可以直接执行原生态的sql,只不过电泳的函数不一样罢了。
      

  11.   

    列名怎么能作为参数呢?直接在java程序中调用不就可以了或者直接写在程序了。