mybatis怎么读取oracle xmltype类型的数据

问题描述

mybatis怎么读取oracle xmltype类型的数据

1、oracle 用的是字段类型是xmltype

BOOK_ID     NUMBER
BOOK_NAME       XMLTYPE
BOOK_PRICE      NUMBER

2、JavaBean对应的属性是Object

 private Integer bookId;
 private Object bookName;
 private Integer bookPrice;

3、mapper.xml 对应jdbcType=CLOB

    <resultMap id="BaseResultMap" type="com.zfy.db.model.Book" >
        <result column="BOOK_ID" property="bookId" jdbcType="INTEGER" />
        <result column="BOOK_PRICE" property="bookPrice" jdbcType="INTEGER" />
      </resultMap>
      <resultMap id="ResultMapWithBLOBs" type="com.zfy.db.model.Book" extends="BaseResultMap" >
        <result column="BOOK_NAME" property="bookName" jdbcType="CLOB" />
      </resultMap>

<!-- 获取Book -->
<select id="selectById" resultMap="ResultMapWithBLOBs">
    select      BOOK_ID, BOOK_PRICE, BOOK_NAME from book where book_id = #{bookId,jdbcType=INTEGER}
  </select>

4、junit 测试报错

static SqlSession session = null;
    @BeforeClass
    public static void before() throws IOException{
        String resource = "mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        session = sessionFactory.openSession();
    }

    @Test
    public void  selectById() {
        BookMapper mapper= session.getMapper(BookMapper.class);
        Book book = mapper.selectById(1);
        System.out.println(book);
    }

5、报错信息如下

java.lang.NoClassDefFoundError: oracle/xml/binxml/BinXMLException
at oracle.xdb.XMLTypeFactory.create(XMLTypeFactory.java:73)
at oracle.sql.OPAQUE.toClass(OPAQUE.java:376)
at oracle.sql.OPAQUE.toJdbc(OPAQUE.java:318)
at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:144)
at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:100)
at oracle.jdbc.driver.OracleResultSetImpl.getObject(OracleResultSetImpl.java:921)
at oracle.jdbc.driver.OracleResultSet.getObject(OracleResultSet.java:1503)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:59)
at sun.proxy.$Proxy13.getObject(Unknown Source)
at org.apache.ibatis.type.ObjectTypeHandler.getNullableResult(ObjectTypeHandler.java:34)
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:51)
at org.apache.ibatis.type.UnknownTypeHandler.getNullableResult(UnknownTypeHandler.java:49)
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:51)
at org.apache.ibatis.executor.resultset.FastResultSetHandler.getPropertyMappingValue(FastResultSetHandler.java:325)
at org.apache.ibatis.executor.resultset.FastResultSetHandler.applyPropertyMappings(FastResultSetHandler.java:306)
at org.apache.ibatis.executor.resultset.FastResultSetHandler.getRowValue(FastResultSetHandler.java:275)
at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleRowValues(FastResultSetHandler.java:221)
at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleResultSet(FastResultSetHandler.java:193)
at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleResultSets(FastResultSetHandler.java:159)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:57)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
at sun.proxy.$Proxy10.query(Unknown Source)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:57)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:259)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:132)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:105)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:62)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:43)
at sun.proxy.$Proxy9.selectById(Unknown Source)
at com.zfy.controller.test.ControllerTest.selectById(ControllerTest.java:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.ClassNotFoundException: oracle.xml.binxml.BinXMLException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 67 more

时间: 2024-09-23 05:55:56

mybatis怎么读取oracle xmltype类型的数据的相关文章

java 如何读取oracle long类型的数据?

问题描述 reader=rs.getCharacterStream("IMAGE");bufferedReader=newBufferedReader(reader);sb=newStringBuffer();while((line=bufferedReader.readLine())!=null){sb.append(line);}bufferedReader.close();Oracle10g第2版10.2.0.3,reader=rs.getCharacterStream(&quo

C# 读取oracle数据库long数据类型数据

问题描述 C#读取oracle数据库long数据类型数据,为什么最多只能读到100个字,求解,在线等,挺急的 解决方案 解决方案二:鬼知道你写的什么代码

请教一个CachedRowSetImpl读取Oracle日期类型的问题

问题描述 我的Oracle数据库里面的一张表tttt,结构如下:createtableTTTT(ID_NUMNUMBER(10),NUM_VALUENUMBER(6,2),DATE_VALUEDATE,CHAR_VALUEVARCHAR2(30),CHAR_VALUE2VARCHAR2(300),PHOTO_VALUEBLOB,NUM_VALUE1NUMBER):我想读取DATE_VALUE字段的值,其中tttt表中有一条记录的DATE_VALUE的值是2010-11-1920:56:23,但是

Java使用JDBC或MyBatis框架向Oracle中插入XMLType数据_java

先来了解一下什么是XMLType类型. XMLType是Oracle从9i开始特有的数据类型,是一个继承了Blob的强大存在,可以用来存储xml并提供了相当多的操作函数.理论上可以保存2G大小的数据. 那怎么样通过java来插入XMLType类型的数据呢?项目当中采用的是Mybatis,总是出现莫名的异常,都搞不清楚到底是Mybatis的问题还是jdbc本身的问题,所以打算一步步来,先搞定jdbc,再解决Mybatis. JDBC在折腾了半天之后,发现jdbc操作主要有3种方法: 一.在Java

c#-在C#后台读取oracle数据库出现问题

问题描述 在C#后台读取oracle数据库出现问题 数据表中有60项,然后我添加了一列,叫ID,是int的,然后输入0-17的,就是说有些是没有的,请问我在aspx.cs中要读取那些有数字的应该怎么读?没数字的算空值还是null? 解决方案 为什么0-17,有些是没有的?0-71?

jsp页面如何显示oracle数据中读取的blob类型的图片?

问题描述 jsp页面如何显示oracle数据中读取的blob类型的图片? jsp页面显示图片的地方 只显示一张图片就可以 查询的时候,通过调用servlet 根据查询条件 然后返回查询结果,显示图片,如何写, 查询出来的结果显示一些其他的信息,包含图片.如何先写显示图片的代码(后台前台) 解决方案 SpringMVC从本地磁盘读取图片显示到JSP页面上JSP页面直接显示Blob类型图片 解决方案二: 可以使用base64编码来显示图片 参考:http://www.lvtao.net/dev/ph

java-Oracle读取二进制BLOB类型数据出现乱码

问题描述 Oracle读取二进制BLOB类型数据出现乱码 JAVA中,读取Oracle中二进制BLOB类型数据,出现乱码.. 如果BLOB是文本类型存储的就不会存在乱码 BLOB blob = (oracle.sql.BLOB)rs.getBlob(""ys1""); try{ FileOutputStream outStream = new FileOutputStream(""c:/oracleback1.txt"");

sql语句-通过程序读取oracle数据时,小数位数总是多一位

问题描述 通过程序读取oracle数据时,小数位数总是多一位 我在oracle中写了一个求数据集的sql语句,得到的数据都是保留三位小数,但是通过程序得到的DataTable,所有数据多了一位.这是为什么呀?如:本来在数据库里取出来是0.067,但是从程序里出来后就变成了0.0670,后面会多一位小数位,怎么去掉呢? 解决方案 看看数据库是不定长的数据类型,小数后保留的是4位. 解决方案二: 保留三位小数只是运算的精度.存储的精度关键看字段类型,字段类型是4位就算你保留零位小数结果还是4位. 你

occi xmtype-VC 通过occi读取oracle库中的xmltype字段

问题描述 VC 通过occi读取oracle库中的xmltype字段 连接数据库后, select 字段(一般字段) from 表 正常 select xmltype字段 from 表 ,在读取数据时,报 ORA-24359: OCIDefineObject not invoked for a object type or Reference 这个问题,怎么解决,谢谢.