设为首页 收藏本站
查看: 476|回复: 0

[经验分享] [总结]字段名为mysql保留字的表的插入问题

[复制链接]

尚未签到

发表于 2016-10-20 08:12:39 | 显示全部楼层 |阅读模式
今天在用mysql的时候遇到一个保留字的问题,自己总结下,呵呵。
问题环境:
mysql  版本 5.0.41-log
eclipse 版本 3.3.0
hibernate 版本 3.0
 数据库表名user
+------+---------+------------+-------------+
| userid | username | password | ssl |
+------+---------+------------+-------------+
问题现象:
执行代码
java 代码

  • session.save(user)         //user为user数据表的映射对象  

发生异常。
异常信息:
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 'ssl) values(4, '3', '3', 2)' at line 1
问题原因:
通过查找相关资料,发现ssl为mysql的保留字,不能像普通字段那样进行数据库操作。

问题解决方法:
1. 将java 代码

  • session.save(user);   

改为 
  java 代码

  • session.createSQLQuery("insert  into user(userid, username, password, `ssl`) values(" + user.getUserid() +", "+ user.getUsername +", "+ user.getPassword +", " + user.getSsl() + ")");   
  • query.executeUpdate();   


 2.将user表对应的映射文件User.hbm.xml中的ssl的信息改为
      
xml 代码

  • <property name="ssl" column="`SSL`" type="java.lang.Long" not-null="false" length="1" />  



  注意:ssl旁边的不是单引号" '  "而是" `  ",键盘最左上角的那个,呵呵!
附:mysql保留字表和相关信息(转载)
尝试使用一个识别符,例如使用嵌入式MySQL数据类型或函数名作为表名或列名,例如TIMESTAMP或GROUP,会造成一个常见问题。允许你这样操作(例如,ABS可以作为一个列名)。但是,默认情况下,在数调用中在函数名和后面的‘(’字符之间不允许有空格。该要求使函数调用与列名引用不同。
该行为的不利结果是在某些上下文中省略一个空格会使识别符解释为函数名。例如,该语句合法:
mysql> CREATE TABLE abs (val INT);但省略abs后面的空格会造成语法错误,因为省略后该语句好像要调用ABS()函数:
mysql> CREATE TABLE abs(val INT);如果SQL服务器模式包括IGNORE_SPACE模式值,服务器允许函数调用时在函数名和后面的‘(’字符之间有空格。这样使函数名被视为保留字。结果是,与函数名相同的识别符必须按照9.2节,“数据库、表、索引、列和别名”中所描述的引起来。SQL服务器模式按照5.3.2节,“SQL服务器模式”中所描述的进行控制。
限定名中句点后面的字必须为一个识别符,因此不需要将它引起来,即使它是一个保留字。
在MySQL中,下表中的字显式被保留。其中大多数字进制被标准SQL用作列名和/或表名(例如,GROUP)。少数被保留了,因为MySQL需要它们,(目前)使用yacc解析程序。保留字被引起来后可以用作识别符  

  • 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   


 MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子:

  • ACTION
  • BIT
  • DATE
  • ENUM
  • NO
  • TEXT
  • TIME
  • TIMESTAMP

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288618-1-1.html 上篇帖子: 轻量级Java登录系统,类PHP风味和Java风味,轻量极速,支持Mysql和MariaDB 下篇帖子: [转]Apache+PHP+MySQL在Windows XP下的安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表