问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于getHibernateTemplate().update()方法执行报错“无效的列索引”问题

发布网友 发布时间:2022-05-04 00:50

我来回答

4个回答

懂视网 时间:2022-05-04 05:11

在使用SSH框架时候,使用getHibernateTemplate().update() 更新数据出现 java.sql.BatchUpdateException: 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 key=nu

在使用SSH框架时候,使用getHibernateTemplate().update() 更新数据出现

java.sql.BatchUpdateException: 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 'key=null, isok=0, nicheng='

更新数据出错,找了很久没找到原因。后面突然想到以前用了mysql的关键字 order 做为商品的订单表名字,导致过错误,会不会也是这个原因? 看看报错位置,看见near 'key,是不是key不能做为字段名字呢?于是改之,换成其他英文来表示,重启tomcat,执行操作,OK,成功。

原因就是把mysql关键字用做表字段了,导致了错误,解决就是,修改字段名字,不要用 关键字做表名或者字段名:

order key 不要做为mysql数据库的表名或者字段

还有其他很多关键字如下:

ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONNECTION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GOTO GRANT GROUP
HAVING HIGH_PRIORITY HOUR_MICROSECOND
HOUR_MINUTE HOUR_SECOND IF
IGNORE IN INDEX
INFILE INNER INOUT
INSENSITIVE INSERT INT
INT1 INT2 INT3
INT4 INT8 INTEGER
INTERVAL INTO IS
ITERATE JOIN KEY
KEYS KILL LABEL
LEADING LEAVE LEFT
LIKE LIMIT LINEAR
LINES LOAD LOCALTIME
LOCALTIMESTAMP LOCK LONG
LONGBLOB LONGTEXT LOOP
LOW_PRIORITY MATCH MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RAID0 RANGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE X509
XOR YEAR_MONTH ZEROFILL

热心网友 时间:2022-05-04 02:19

问题一,错误原因就是,你的Person对象不是持久化对象,不能直接update。
解决方法,先用hql查询得到Person对象,这个对象就是持久化对象,
例如你使用find方法,getHibernateTemplate().find("from Person where userName='yang' ")
用户名肯定不重复,这样就查询出唯一的Person,然后你再从返回的List中遍历得到唯一的Person,因为List里面只有一个元素。

然后你再使用 p.setStauts("0")这个方法更改冻结状态,最后update就行了。
用get方法也可以得到唯一的Person,我不知道你的主键是不是用户名,所以用了find。

问题二 ,如果你的用户名是主键或不重复,那么用hql语句,即为:
update Person set stauts=‘0’ where userName=‘yang’
注意,字段大小写敏感,自己根据本人编写的字段大小写为准
但是很麻烦,因为hibernatetemplate没有直接方法,只能用session了,
Transaction trans=session.beginTransaction();
hql = "update Person set stauts=‘0’ where userName=‘yang’ ";
Session session=this.getHibernateTemplate().getSessionFactory().openSession();
int flag = session.createQuery(hql).executeUpdate();
trans.commit();
session.close();// 这个语句我只是表示要关闭session,至于什么try catch,自己写就行了,
//不建议你使用这个方法修改,因为很麻烦,且容易出错。
这个脱离了spring的事务控制,当然要自己开关session,不如用我说的第一个方法简单。

问题三,find方法当然不能更新,这个方法是查询方法,不能作为更新方法使用。

热心网友 时间:2022-05-04 03:37

数据没给对吧,看看你问号有几个,set有几个,都要对应,少一个或者多一个都对应不上追问我把缺少的数据加上了还是不行。。。

热心网友 时间:2022-05-04 05:12

2008年的奥运会在北京招开:2008年建的鸟巢水/利方都是奥运会健的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 windows下的oracle增量备份与全备份 rman自定义备份脚本生成的bak文件怎么恢复 数据库使用的是oracle 10g,系统是windowns2003,现在我们需要设置 每天2点自动备份,并且保存10天的备份 用Adobe Acrobat 7.0 Professional 和,尚书7号OCR。把扫描版的PDF转换为TXT格式输出来怎么是乱码呢 达梦7安装教程是否和达梦8安装教程是一样的呢? 简单的SQL语句分析,求高手一一分析,在每句语句后面注释(相同的就不用注释了),好的话,可以加分的! 数据库一段sql语句,谁帮我注释一下,紧急! SQL数据库语言分析下 SQL数据库语言分析 servlet用JDBC桥链接MYSQL数据库问题 ubuntu磁盘分区时提示your installation medium is on dev/sad6. you will not able to create SQL数据库多表连接查询为什么数据会重复 数据库多表连接,如何查询多字段? SQL数据库多表链接 问题 c++怎么高效率实现数据库中表格多种连接 数据库的多表连接查询和多表联结查询是不是一个意思? 为什么我的nimiso无线鼠标电池装进去闪了一下就灭了,然后用不了鼠标 最小化后的程序图标怎么不在任务栏上显示了? nim_sdk_ui.mlog能不能删除 我用网易邮箱发邮件为什么有的显示发送成功,有的却什么都不显示?但是他也没说我发送不成功 SSH项目中,关于hibernate中update()方法的问题。。 getHibernateTemplate().update()这个修改方法怎么用?? 使用getHibernateTemplate()更新数据时报错:Could not create and/or set value back on to object 为什么hibernate,update()不成功? 关于Hibernate框架中的更新语句 hibernate 执行update更新语句 结果数据没有更新是怎么回事?求解!!!急急急~!! java,getHibernateTemplate().saveOrUpdate(instance);执行失败怎么调试 spring struts2 hibernate mysql getHibernateTemplate().saveOrUpdate(异常 save() 两者都报 数组溢出。 hibernate4通过这个this.getHibernateTemplate().update()更新失败,调用到这一步,就提示如下信息 hibernate template的问题 hibernate执行update 没成功为什么不报错 Hibernate中getHibernateTemplate()具体包含哪些方法,都怎么用? 用Hibernate的getHibernateTemplate().saveOrUpdate(o);怎么插不到库里去呢? getHibernateTemplate.update这个修改方法怎么用 java:hibernate 修改中的问题 hibernate 异常 怎么解决 Hibernate关闭get时的自动更新(update)? Hibernate报错:Not all named parameters have been set UNIX下vmstat里面显示的代表什么意思? 如何通过阅读源代码了解 vmstat 中的指标