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

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

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

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

这是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

经验:1.给实体类取变量名的时候,一定要注意不能和数据库保留字相冲突

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

我想,这个错我再也不会遇到了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值