免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2652 | 回复: 0
打印 上一主题 下一主题

字段名为mysql保留字的表的插入问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-23 12:19 |只看该作者 |倒序浏览
转载:
字段名为mysql保留字的表的插入问题
    今天在用mysql的时候遇到一个保留字的问题,自己总结下,呵呵。
问题环境:
mysql  版本 5.0.41-log
elipse 版本 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模式值,服务器允许函数调用时在函数名和后面的‘(’字符之间有空格。这样使函数名被视为保留字。结果是,与函数名相同的识别符必须按照
[color="#800080"]9.2节,“数据库、表、索引、列和别名”
中所描述的引起来。SQL服务器模式按照
[color="#0000ff"]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

  
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10295/showart_1736281.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP