字段名为mysql保留字的表的插入问题

数据库表名user
+------+---------+------------+-------------+
| userid | username | password | ssl |
+------+---------+------------+-------------+
问题现象:
执行代码
java 代码
  1. 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 代码
  1. session.save(user);   
改为 
  
java 代码
  1. session.createSQLQuery("insert  into user(userid, username, password, `ssl`) values(" + user.getUserid() +", "+ user.getUsername +", "+ user.getPassword +", " + user.getSsl() + ")");   
  2. query.executeUpdate();   
 
2.将user表对应的映射文件User.hbm.xml中的ssl的信息改为
      
xml 代码
  1. <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解析程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值