mybatis在插入的时候,获取插入主键报错 T_T

333333333333r 2012-01-14 10:14:37
这是配置

<insert id="insert" parameterType="com.imad.po.UserInfo" useGeneratedKeys="true" keyProperty="uId">
insert into tbl_UserInfo(uUserName,uPassword)
values(#{uUserName},#{uPassword})
</insert>



数据库中的表是
create table tbl_UserInfo(
uId int primary key auto_increment,
uUserName varchar(255),
uPassword varchar(255)
);


如果去掉
useGeneratedKeys="true" keyProperty="uId"

没有任何问题,将【uId】,换成了【uID】也不会报错

但是加上的话,会报错。。。差了半天没有找到原因
Exception in thread "AWT-EventQueue-0" org.springframework.jdbc.BadSqlGrammarException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: Column 'null' not found.
; bad SQL grammar []; nested exception is java.sql.SQLException: Column 'null' not found.
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:98)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346)
at $Proxy3.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:231)
at com.imad.dao.UserInfoDAO.insert(UserInfoDAO.java:71)
at com.imad.service.UserInfoService.insert(UserInfoService.java:56)
at com.imad.ui.ExRegister.doActionOnBtnNextClicked(ExRegister.java:159)
at com.imad.ui.ExRegister.access$2(ExRegister.java:146)
at com.imad.ui.ExRegister$3.mouseClicked(ExRegister.java:110)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.sql.SQLException: Column 'null' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:961)
at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:2422)
at org.apache.ibatis.type.IntegerTypeHandler.getNullableResult(IntegerTypeHandler.java:17)
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:29)
at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processAfter(Jdbc3KeyGenerator.java:50)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:26)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:51)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:29)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:88)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:43)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:121)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:110)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:338)
... 28 more



MODEL中有setter个getter啊,自动生成的T_T,
完全搞不懂他那个“Column "null" not found”


实在是不知道怎么办了。。。T_T
求帮助
...全文
7089 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
seven 2014-09-03
  • 打赏
  • 举报
回复
好久的贴子,是变量命名的问题,JAVA BEAN 命名规范要遵守一条:变量名的前两个字母要么全部大写要么全部小写
红酒人生 2013-07-18
  • 打赏
  • 举报
回复
@InsertProvider(type = CUDTemplate.class, method = "save") @Options(useGeneratedKeys = true, keyProperty = "id") public Integer save(T obj); 在这个地方调用, 如果去掉 options 可以直接将数据保存到数据库,数据库是 SqlServer
xwdengjie 2012-06-21
  • 打赏
  • 举报
回复
useGeneratedKeys="true" keyProperty="userId" keyColumn="GENERATED_KEY"

这样就是ok的 我也老实报 Error getting generated key or setting result to parameter object 这个错误

加上keyColumn="GENERATED_KEY" 这个之后OK
333333333333r 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justsmilence 的回复:]

Java code
private int uID;

private int uId;

public int getuId()
{
return uId;
}

public void setuId(int uId)
{
this.uId = uId;
}

public……
[/Quote]

我最终把字段换成了大写=。=

你说的那个问题我试过额=。= 因为在其他class中都是“ID”而不是“Id”
然后还是不行 所以说我当时就纠结啊

按照自动getter setter的话 理论上不影响啊
他只是把变量第一个字母小写而已嘛=。=
sddcc123 2012-01-16
  • 打赏
  • 举报
回复
这也可以
  • 打赏
  • 举报
回复
	private int uID;

private int uId;

public int getuId()
{
return uId;
}

public void setuId(int uId)
{
this.uId = uId;
}

public int getuID()
{
return uID;
}

public void setuID(int uID)
{
this.uID = uID;
}

uID和uId自动生成的是不一样的,好像mybatis只认getUid()还是getUId()的..参照userName自动生成的写法.你可以改改set,get方法试试看
  • 打赏
  • 举报
回复
可能是你对象uID属性定义的问题,貌似他自动生成的set,get方法和mybatis认识的不一样,你对象uID定义成uId试试。
阿木木_ 2012-01-16
  • 打赏
  • 举报
回复
可以试着将对象传进去,使用序列!!!
333333333333r 2012-01-14
  • 打赏
  • 举报
回复
为什么换成
<selectKey keyProperty="uID" resultType="int" order="AFTER">
select last_insert_id() as uID
</selectKey>
就对了

看到他的文档说不是一样的么。。。
333333333333r 2012-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tengcong5210 的回复:]

<insert id="insert" parameterType="com.imad.po.UserInfo" useGeneratedKeys="true" keyProperty="uId">
insert into tbl_UserInfo(uUserName,uPassword)
values(#uUserName#,#uPassword#)
</insert>
不好意……
[/Quote]

额。。。3.0的语法就是那样的
语法没问题

报错是这个

Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: Column 'null' not found.

这个确实不知道如何下手了
试过很多种方法了 都没用 T_T
血饮 2012-01-14
  • 打赏
  • 举报
回复
<insert id="insert" parameterType="com.imad.po.UserInfo" useGeneratedKeys="true" keyProperty="uId">
insert into tbl_UserInfo(uUserName,uPassword)
values(#uUserName#,#uPassword#)
</insert>
不好意思,应该是这样的。
血饮 2012-01-14
  • 打赏
  • 举报
回复


<insert id="insert" parameterType="com.imad.po.UserInfo" useGeneratedKeys="true" keyProperty="uId">
insert into tbl_UserInfo(uUserName,uPassword)
values(#{uUserName},#{……
[/Quote]
之前有用过ibatis2.x的,我记的插入的话应该是:
<insert id="insert" parameterType="com.imad.po.UserInfo" useGeneratedKeys="true" keyProperty="uId">
insert into tbl_UserInfo(uUserName,uPassword)
values(#uUserName,#uPassword)
</insert>
不知道ibatis3.x改了什么新特性。。



资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在Oracle数据库中使用MyBatis标签进行批量插入时,可能会出现“SQL命令未正确结束”的错误。这主要是因为Oracle数据库的批量插入语法与其他数据库(如MySQL)有所不同。 MyBatis标签是一个强大的动态SQL工具,用于遍历集合并构建SQL语句。它的主要属性包括:item(集合中每个元素的别名)、index(可选,元素在集合中的索引位置)、collection(必须指定,表示要遍历的集合名称)、open(语句开始的字符串)、separator(元素之间的分隔符)和close(语句结束的字符串)。 在进行批量插入时,通常会创建一个包含待插入对象的List,并通过标签将这些对象插入数据库。然而,在Oracle中,直接使用逗号分隔的VALUES列表(如(value1, value2), (value3, value4))是不被支持的。正确的批量插入语法应使用UNION ALL或INSERT ALL。 例如,以下是一个错误的MyBatis批量插入配置示例: 上述代码在Oracle中会报错,因为Oracle不支持这种语法。 正确的写法是使用INSERT ALL: 在这个修正后的配置中,标签会遍历集合中的每个元素,并为每个元素生成一个INTO子句。最后的SELECT * FROM dual是必要的,以确保Oracle正确执行所有的插入操作。 如果表中有自增主键,需要在插入之前获取主键值。这里使用了标签来获取序列的下一个值,从而确保每个插入的记录都有唯一的主键。 在Oracle数据库中使用MyBatis进行批量插入时,必须注意Oracle的特定语法要求,例如使用INSERT ALL而不是

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧