您的位置:首页 > 数据库 > MySQL

沉痛记下这次与 mysql 的交锋,以全面溃败结束

2015-10-20 22:01 281 查看
最近在做一个博客系统,后台使用 ssh 框架,前台使用 bootstrap ,因为不是太熟悉,所以遇到不少问题,但看到成果一步步做出来,喜悦之情溢于言表!

然而今天,遇到了一个让我崩溃的问题,战斗了好久,最后才被解决,感觉代码之路一片黑暗。

我定义了一个实体类,里面有一些属性,然后就用 eclipse 里 配置的 hibernate 工具去自动生成数据表,这个普通的过程我以前重复过 n 次了,每次都是平稳完成,因为这根本就算不上能出故障的地方,然后这一次,问题百出。因为我定义了两个实体间多对多的关联关系,在我完成生成数据表步骤后我就去 mysql 中查看我的表是否生成成功,让我惊讶的是,仅仅生成了一张中间表(关联表),实体表却没有生成!程序也没有报错,一切都很正常。我有点无语,认真对照了属性名是否和配置文件一致,认真查看数据类型是否有错,又删掉数据表重新生成......然后重复
n 次后,一切还是原样。我只好放弃使用 hibernate 工具,自己去数据库手动建表,按说这应该没什么问题了。然后在程序中执行保存操作的时候,又出问题了,报 sql 语法错误的异常,我再一次郁闷了,看着控制台中的insert语句,看不出半点不对的地方,我不死心,又重复了这个过程 n 次,然而结果并没有什么不同,呵呵!最后实在没办法了,把控制台中看似正常的insert语句拿到mysql 的工具 sqlyog 中去执行,也是报sql语法错的异常,但这次,我看到了一点不同的东西,我的字段居然跟
sql 语句中关键字一样,被着了色!!!我立马去网上查了一下 mysql 数据库的关键字,果不其然,看到了我的属性名静静的躺在保留字的列表中,瞬间泪崩,我 取了个跟 mysql 数据库保留字同名的变量名!!!

这是mysql数据库的保留字:

ADDALLALTER
ANALYZEANDAS
ASCASENSITIVEBEFORE
BETWEENBIGINTBINARY
BLOBBOTHBY
CALLCASCADECASE
CHANGECHARCHARACTER
CHECKCOLLATECOLUMN
CONDITIONCONNECTIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWDIV
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GOTOGRANTGROUP
HAVINGHIGH_PRIORITYHOUR_MICROSECOND
HOUR_MINUTEHOUR_SECONDIF
IGNOREININDEX
INFILEINNERINOUT
INSENSITIVEINSERTINT
INT1INT2INT3
INT4INT8INTEGER
INTERVALINTOIS
ITERATEJOINKEY
KEYSKILLLABEL
LEADINGLEAVELEFT
LIKELIMITLINEAR
LINESLOADLOCALTIME
LOCALTIMESTAMPLOCKLONG
LONGBLOBLONGTEXTLOOP
LOW_PRIORITYMATCHMEDIUMBLOB
MEDIUMINTMEDIUMTEXTMIDDLEINT
MINUTE_MICROSECONDMINUTE_SECONDMOD
MODIFIESNATURALNOT
NO_WRITE_TO_BINLOGNULLNUMERIC
ONOPTIMIZEOPTION
OPTIONALLYORORDER
OUTOUTEROUTFILE
PRECISIONPRIMARYPROCEDURE
PURGERAID0RANGE
READREADSREAL
REFERENCESREGEXPRELEASE
RENAMEREPEATREPLACE
REQUIRERESTRICTRETURN
REVOKERIGHTRLIKE
SCHEMASCHEMASSECOND_MICROSECOND
SELECTSENSITIVESEPARATOR
SETSHOWSMALLINT
SPATIALSPECIFICSQL
SQLEXCEPTIONSQLSTATESQLWARNING
SQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULT
SSLSTARTINGSTRAIGHT_JOIN
TABLETERMINATEDTHEN
TINYBLOBTINYINTTINYTEXT
TOTRAILINGTRIGGER
TRUEUNDOUNION
UNIQUEUNLOCKUNSIGNED
UPDATEUSAGEUSE
USINGUTC_DATEUTC_TIME
UTC_TIMESTAMPVALUESVARBINARY
VARCHARVARCHARACTERVARYING
WHENWHEREWHILE
WITHWRITEX509
XORYEAR_MONTHZEROFILL
经验:1.给实体类取变量名的时候,一定要注意不能和数据库保留字相冲突

2.用其他工具操作数据库有错误时,一定要将出故障的sql语句拿到数据库管理工具中去执行,一眼就能看出sql语句的异常

我想,这个错我再也不会遇到了!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: