- 浏览: 772755 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (208)
- Java (77)
- JavaScript (16)
- UML (1)
- Spring (24)
- Hibernate (11)
- J2EE部署 (18)
- 操作系统 (13)
- struts (11)
- jsp (3)
- J2EE (34)
- 数据库 (22)
- tomcat (4)
- apache (2)
- MyEclipse (13)
- Linux (14)
- Ext (6)
- Weblogic (2)
- 数据库 Oracle 空表导出 (1)
- Oracle (3)
- 编码 乱码 (1)
- 多线程 (5)
- jQuery (2)
- Apache Mina (1)
- ibatis (6)
- abator (1)
- svn (1)
- jvm (1)
- ERwin (2)
- mysql (2)
- ant (1)
- memcache (1)
- dubbo (1)
- PowerDesigner (1)
最新评论
-
di1984HIT:
Shallow heap & Retained heap -
tinguo002:
非常感谢 , 太棒了。
Spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方法 -
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache Mina – 简单的客户端/服务端应用示例 -
wumingxingzhe:
好文
Shallow heap & Retained heap -
di1984HIT:
学习了!!
工作流(Workflow)和BPM的不同
<!--Content表 插入应的记录到数据库中 --> < insert id = "insertContent" parameterClass = "com.unmi.content" > INSERT INTO PERSON(ID,NAME,SERVICEID) VALUES(#id#,#name#,#serviceid#) </ insert > //三个子段允许为空(null) SqlMapClient sqlMap = SqlMapConfig.getSqlMapInstance(); // as coded above Content content= new Content( 1 ); content.setName( "Unmi" ); // content.setServiceId("123456"); // 注意该行被注释,serviceid属性为NULL sqlMap.insert( "content" , content);
部分异常信息:
--- The error occurred in com/unmi/content.xml. --- The error occurred while applying a parameter map. --- Check the insertPerson-InlineParameterMap. --- Check the parameter mapping for the 'serviceid' property. --- Cause: java.sql.SQLException : 无效的列类型 Caused by: java.sql.SQLException : 无效的列类型 at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate( GeneralStatement.java:91 ) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert( SqlMapExecutorDelegate.java:442 ) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert( SqlMapSessionImpl.java:81 ) at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert( SqlMapClientImpl.java:58 ) at com.unmi.Client.main( Client.java:33 ) Caused by: java.sql.SQLException : 无效的列类型
//解决方案:
只要去掉 content.setServiceId("123456"); 前的注释,让content的三个字段都不为NULL,才能成功向数据库中插入记录。其实content表并没有任何约束,却是iBatis在此拦截下来,实是多此一举。那如果我确实让某个字段是NULL值,该怎么做呢?您只要修改一下映射文件中预置的SQL语句就行了,告诉iBatis当该字段出现NULL 值该用什么值来替代,连接Oracle即使是要求某字段传入NULL值时就是插入NULL值也必须要你累述一遍,好讨厌的事情。
<!-- 插入一条Person对应的记录到数据库中 --> < insert id = "content" parameterClass = "com.unmi.content" > INSERT INTO PERSON(ID,NAME,PASSWD) VALUES(#id#,#name#,#SERVICEID:VARCHAR:NULL#) </ insert >
支持的类型在 java.sql.Types 中列示出来了,我一开始还把上面的 VARCHAR 错写成了 VARCHAR2。再比如果你想传入的 id 为NULL时替换为 0, 你就可以写成 #id:INTEGER:0#。
原因是 iBatis 是根据参数的当前值的类型(而不是类属性) 来决定对于这个 PrepairedStatement 设置参数是应该调用哪一个版本的 setXxx() 方法(是 String 就调用,setString() ,是 int 就调用 setInt() 等)。而如果参数值为 null,iBatis 便不知道调用哪个 setXxx() 方法,于是在 Oracle 的驱动下就笼统的调用 setNull() 方法,然而 Oracle 在对字符串类型字段使用 setNull() 却是有问题的。因为在配置中就必须指明当前字段的类型,如 #SERVICEID:VARCHAR:NULL#,当 iBatis 在碰到参数为 null 难以决断时,但见到这里的 VARCHAR 选项,它也知道应该用 setString() 方法来给 PrepairedStatement 赋值。至于其中的 NULL,不过是指定参数为 null 时的默认值,显然,写成 #SERVICEID:VARCHAR# 就行了,后面的 NULL 是多余的。
不知你注意到没有,我们上面的insert标记配置了属性是 parameterClass, 那如果配置的是 parameterMap 该如何解决因字段为NULL值的问题呢?这就要求我们在配置 parameterMap标记中可能出现NULL值的参数一定要指定相应的 jdbcType属性就行。只要不指定nullValue属性就表示在该表这段中直接记下NULL值。
< parameterMap id = "insert-person-paraMap" class = "com.unmi.content" > < parameter property = "id" /> < parameter property = "name" /> < parameter property = "SERVICEID" jdbcType = "VARCHAR" /> </ parameterMap > <!-- 插入一条Person对应的记录到数据库中 --> < insert id = "insertPerson" parameterMap = "insert-person-paraMap" > INSERT INTO CONTENT(ID,NAME,SERVICEID) VALUES(?,?,?) </ insert >
发表评论
-
Eclipse,javaw 通过Proxifile代理ipv6协议问题解决
2015-03-17 18:06 2797myeclipse2010升级到myeclipse2014之后 ... -
初始化EHcache CacheManager时报java.net.UnknownHostException
2014-11-13 11:45 12510工程启动时,报一下异常: [wdfportal] [201 ... -
tomcat7可能带来的问题
2013-06-27 00:31 9841、struts标签校验更加严格,如果struts标签中存在嵌 ... -
iBatis执行insert后返回主键
2013-01-18 23:55 1652iBatis插入数据后,返回主键。级联操作很有用。省去了一次的 ... -
erwin连接mysql数据库建表
2012-09-09 00:45 6161Erwin是不支持直接连接mysql的,但是可以通过odbc实 ... -
ibatis级联查询
2012-08-12 21:05 3738ibatis 级联查询的配置: <?xml versio ... -
ERwin模型导入oracle数据库
2012-05-19 15:09 16091.选择物理模型视图Physical: 2.选择Too ... -
Shallow heap & Retained heap
2012-05-16 17:09 49320所有包含Heap Profling功能的工具(MAT, You ... -
什么是两阶段提交协议
2012-05-08 16:58 1067两阶段提交协议 实现分布式事务的关键就是两阶段提交协议。在此 ... -
Abator —— IBatis 代码生成工具
2012-04-03 18:31 19351、在eclipse安装abator插件http://ibat ... -
使用Eclipse远程调试Tomcat
2012-03-23 22:56 1511有些时候,调试不得不用外网,比如说做支付宝的支付接口,服务器后 ... -
Java compiler level does not match the version of the installed Java project fac
2012-03-02 11:32 1320问题现象:项目图标报错“Java compiler level ... -
WebService的事务处理
2012-03-01 15:03 1562如果你只是要解决两个系统之间的事务同步问题,可以采用判断服务是 ... -
线程池(java.util.concurrent.ThreadPoolExecutor)的使用
2012-02-29 15:50 2508一、简介 线程池类为 j ... -
myeclipse 颜色设置(保护视力)
2012-02-28 09:29 20911.window -> Preferences -> ... -
Quartz表达式解析
2012-02-08 14:40 807字段 允许值 允许的特 ... -
非常有用的proxool属性详细解说
2011-12-13 16:19 1612Proxool连接池是sourceforge下的一个开源项目, ... -
在工程中查找自己修改的所有代码
2011-12-09 17:41 1049在工程中查找自己修改的所有代码的方法: 1.工程右键 -&g ... -
如何在Eclipse中安装和使用ibatis插件Abator
2011-12-01 21:26 49761、获得abator: http://ibatis. ... -
newCachedThreadPool线程池
2011-11-20 11:35 43036public static ExecutorService n ...
相关推荐
本篇文章将围绕"IBatis.DataMapper.1.6.2.bin.zip"和"IBatis.DataMapper.1.9"这两个开发包,深入探讨其核心概念、功能特性以及版本间的差异,帮助开发者更好地理解和应用这一框架。 1. **IBatis DataMapper简介** ...
iBATIS,全称为“Infrastructure for Binding Applications To SQL Maps”,是一个优秀的开源持久层框架,它允许Java开发者将SQL语句与Java代码分离,提供了一种简单但强大的在Java应用中映射SQL和结果集的方式。...
Caused by: java.net.UnknownHostException: openapi.alipay.com
4. **编写Java代码**: 使用IBATIS提供的API,如SqlMapClient,来执行SQL映射文件中的查询、插入、更新和删除操作。 5. **测试和调试**: 编写测试用例,验证数据访问层的功能是否正确无误。 总之,"IBATISJDBC包"是...
在使用Mybatis框架时,你可能会遇到`org.apache.ibatis.exceptions.PersistenceException`这样的异常。这个异常通常表示在执行数据库查询操作时遇到了问题。本篇将详细分析这个问题并提供解决方法。 ### 问题概述 ...
标题和描述中提到的"IBatisNet.Common.1.6.2、IBatis.DataAccess.1.9.2、IBatis.DataMapper.1.6.2"是针对一个名为IBatisNet的框架的不同组件的版本号。IBatisNet是一个在.NET平台上实现的开源持久层框架,它源于Java...
2. 映射器接口:Ibatis支持使用Java接口来代表一个数据库操作的集合。接口方法的名称和参数类型对应着SQL映射文件中的SQL语句和参数,这样就可以通过简单的调用接口方法实现数据库操作。 3. 数据源配置:`ibatis-...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,将SQL语句与Java代码分离,使得开发人员能够更加专注于业务逻辑。在本主题中,我们将深入探讨Ibatis的两个特定版本:ibatis2.3.4.8....
SQL Maps是iBATIS的核心组件,负责将Java对象与数据库表之间的映射。SQL Maps提供了一个灵活的方式来定义数据库表的结构和关系,从而实现数据的CRUD(Create、Read、Update、Delete)操作。 三、SQL Map如何工作? ...
Ibatis 是一款开源的、基于Java的持久层框架,它简化了数据库与应用程序之间的交互,提供了灵活的SQL映射机制,使得开发者可以将SQL语句直接写在配置文件中,从而避免了传统的JDBC代码编写。这个“ibatis-2.3.4.726...
3. 分离SQL和Java代码:Ibatis将SQL语句和Java代码分离,使得代码更易于管理和测试,同时也降低了SQL注入的风险。 4. 动态SQL:Ibatis提供了动态SQL的功能,可以在XML映射文件中直接编写条件语句,极大地简化了复杂...
`org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数绑定,尤其是在动态SQL语句中。在MyBatis的映射文件或者Mapper接口中,当我们...
ibatis-2.3.3.720.jar
标题 "IBatis.DataMapper.1.6.2" 指的是 IBatis 数据映射器的一个特定版本,即 1.6.2 版本。IBatis 是一个流行且广泛使用的开源持久层框架,它允许开发者将 SQL 查询与.NET 应用程序中的对象模型进行解耦,提供了一...
iBATIS的主要目标是简化数据库与应用程序之间的交互,通过提供一种声明式的方式,将SQL语句与Java代码解耦,使得开发者能够更高效、灵活地管理数据访问层。 在iBATIS 2.3.4.726这个版本中,我们可以看到该框架已经...
由于没有提供具体的压缩包子文件的文件名称列表,我们无法详细列出所有包含的文件,但通常一个 iBATIS 源码包会包含以下部分: 1. **src/main/java**:这里的目录结构反映了 iBATIS 框架的包结构,包含了所有的 ...
iBATIS,全称为“Infrastructure As A Business Logic Translation Service”,是一个优秀的开源持久层框架,它允许开发者将SQL语句直接写在配置文件中,解决了Java与数据库交互时的繁杂性,极大地提高了开发效率。...
iBATIS作为一个轻量级的数据访问框架,它允许开发者将SQL语句直接嵌入到Java代码中,避免了传统的对象关系映射(ORM)框架带来的复杂性。 iBATIS的核心概念包括: 1. SQL Maps:这是iBATIS的主要组成部分,它是SQL...
ParameterMap是参数集合,而ParameterMapping则是参数的具体映射,包括参数在SQL语句中的位置、Java类型和数据库类型等信息。 5. **ResultMap**:ResultMap定义了如何将数据库查询结果映射到Java对象。它可以处理一...
1. SQL映射:Ibatis通过XML配置文件或注解将SQL语句与Java对象映射,支持动态SQL,可以根据业务条件自由拼接SQL,提高了代码的可读性和可维护性。 2. 易于集成:Ibatis可以轻松地与Spring等其他框架集成,实现事务...