about java.sql.clob,how to mapper

331 views
Skip to first unread message

Xl C

unread,
Dec 28, 2016, 5:03:16 AM12/28/16
to jDBI
code as follows:
@UseStringTemplate3StatementLocator
@RegisterMapperFactory(BeanMapperFactory.class)
public interface HtmlDao {

   
@SqlQuery
    List<Clob> findHtml();
}

the BeanMapperFactory does not work , why?

Matthew Hall

unread,
Dec 28, 2016, 11:52:55 AM12/28/16
to jd...@googlegroups.com
Clob is not a bean. What does your string template look like?

-Matthew

--
You received this message because you are subscribed to the Google Groups "jDBI" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jdbi+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Xl C

unread,
Dec 28, 2016, 8:08:38 PM12/28/16
to jDBI
thanks your reply, Clob cannot like a int or long that can be mappered automatically ? the string template just say that  searching a field saved as Clob from a table  in oracle . template as follows:
group HtmlDao;

findName
() ::= <<
     
select cznrc from ZL.t_zl_zlxf
>>




在 2016年12月29日星期四 UTC+8上午12:52:55,Matthew Hall写道:
Clob is not a bean. What does your string template look like?

-Matthew
On Wed, Dec 28, 2016 at 3:03 AM, Xl C <yci...@gmail.com> wrote:
code as follows:
@UseStringTemplate3StatementLocator
@RegisterMapperFactory(BeanMapperFactory.class)
public interface HtmlDao {

   
@SqlQuery
    List<Clob> findHtml();
}

the BeanMapperFactory does not work , why?

--
You received this message because you are subscribed to the Google Groups "jDBI" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jdbi+uns...@googlegroups.com.

Matthew Hall

unread,
Dec 28, 2016, 10:27:42 PM12/28/16
to jd...@googlegroups.com
It looks like there is no Clob mapper installed by default.

You could always return `List<String>` instead though.

To unsubscribe from this group and stop receiving emails from it, send an email to jdbi+unsubscribe@googlegroups.com.

Xl C

unread,
Dec 29, 2016, 1:25:31 AM12/29/16
to jDBI
it does not matter , then  if  i want to insert a field saved as Clob in oracle ,what i should do ? like this ?

@SqlUpdate
void insert(@Bind("text")Clob text);

thanks a lot ~

在 2016年12月29日星期四 UTC+8上午11:27:42,Matthew Hall写道:

Matthew Hall

unread,
Dec 29, 2016, 1:28:49 AM12/29/16
to jd...@googlegroups.com
Yes, that should work.

If you have a `String` that you don't want to wrap in a `Clob`, you could possibly just change your method argument to a `String`, if that was more convenient.

Regards,

-Matthew

To unsubscribe from this group and stop receiving emails from it, send an email to jdbi+unsubscribe@googlegroups.com.

Xl C

unread,
Dec 29, 2016, 8:45:21 PM12/29/16
to jDBI
Hi , Sir ~   I didn`t want to trouble you  , but I have some problems.
Now  I want to insert a  javax.sql.Clob  to Oracle .
service part code :
Clob clob = null;
try {
    clob
= new SerialClob("你是谁啊".toCharArray());//just a example ,actually the String is bigger
} catch (SQLException e) {
    e
.printStackTrace();
}
htmlService.insert(2, clob);

HtmlService  insert code :
public void insert(Integer docId, Clob content) {
   
dbi.onDemand(HtmlDao.class).insert(docId,content);
}

HtmlDao code :
package com.peptalk.db.dao.other;

import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapperFactory;
import org.skife.jdbi.v2.sqlobject.stringtemplate.UseStringTemplate3StatementLocator;
import org.skife.jdbi.v2.tweak.BeanMapperFactory;

import java.sql.Clob;

/**
 *
 */
@UseStringTemplate3StatementLocator
@RegisterMapperFactory(BeanMapperFactory.class)
public interface HtmlDao {


   
@SqlUpdate
    void insert(@Bind("docId")Integer docId, @Bind("content")Clob content);

}

the stg file:
group HtmlDao;

insert
(docId,content) ::= <<
    insert
into VST_ENTITY_HTML (doc_id,content,create_time) values (:docId,:content,sysdate)
>>

but now , when execute , exception as follows :
09:32:11,492 DEBUG ExceptionHandlerExceptionResolver:133 - Resolving exception from handler [public void com.peptalk.controller.TestController.name()]: org.skife.jdbi.v2.exceptions.UnableToCreateStatementException: Exception while binding 'content' [statement:"insert", located:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (:docId,:content,sysdate)", rewritten:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (?,?,sysdate)", arguments:{ positional:{}, named:{docId:61,content:javax.sql.rowset.serial.SerialClob@88694698}, finder:[]}]
09:32:11,495 DEBUG DefaultListableBeanFactory:250 - Returning cached instance of singleton bean 'restControllerAdvice'
09:32:11,496 DEBUG ExceptionHandlerExceptionResolver:361 - Invoking @ExceptionHandler method: public com.peptalk.api.ApiError com.peptalk.controller.api.RestControllerAdvice.generalError(java.lang.Exception,javax.servlet.http.HttpServletRequest)
09:32:11,498 ERROR RestControllerAdvice:97 - Error 500: Exception while binding 'content' [statement:"insert", located:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (:docId,:content,sysdate)", rewritten:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (?,?,sysdate)", arguments:{ positional:{}, named:{docId:61,content:javax.sql.rowset.serial.SerialClob@88694698}, finder:[]}], org.skife.jdbi.v2.ColonPrefixNamedParamStatementRewriter$MyRewrittenStatement.bind(ColonPrefixNamedParamStatementRewriter.java:170)
org.skife.jdbi.v2.exceptions.UnableToCreateStatementException: Exception while binding 'content' [statement:"insert", located:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (:docId,:content,sysdate)", rewritten:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (?,?,sysdate)", arguments:{ positional:{}, named:{docId:61,content:javax.sql.rowset.serial.SerialClob@88694698}, finder:[]}]
        at org.skife.jdbi.v2.ColonPrefixNamedParamStatementRewriter$MyRewrittenStatement.bind(ColonPrefixNamedParamStatementRewriter.java:170)
        at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1317)
        at org.skife.jdbi.v2.Update.execute(Update.java:56)
        at org.skife.jdbi.v2.sqlobject.UpdateHandler$2.value(UpdateHandler.java:68)
        at org.skife.jdbi.v2.sqlobject.UpdateHandler.invoke(UpdateHandler.java:81)
        at org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:215)
        at org.skife.jdbi.v2.sqlobject.SqlObject$2.intercept(SqlObject.java:109)
        at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$636769bd.insert(<generated>)
        at com.peptalk.service.other.HtmlService.insert(HtmlService.java:24)
        at com.peptalk.service.other.InstructionService.analysisHtml(InstructionService.java:57)
        at com.peptalk.controller.TestController.name(TestController.java:28)
        at com.peptalk.controller.TestController$$FastClassBySpringCGLIB$$af495e6c.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
        at com.peptalk.controller.TestController$$EnhancerBySpringCGLIB$$8bdb19f2.name(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
        at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:65)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
        at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
        at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
        at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
        at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
        at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
        at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
        at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
        at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
        at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
        at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
        at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.sql.SQLException: 无效的列类型
        at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8516)
        at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8034)
        at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8767)
        at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8748)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)

        at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_setObject(FilterChainImpl.java:2923)
        at com.alibaba.druid.filter.FilterAdapter.preparedStatement_setObject(FilterAdapter.java:1298)
        at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_setObject(FilterChainImpl.java:2920)
        at com.alibaba.druid.filter.FilterAdapter.preparedStatement_setObject(FilterAdapter.java:1298)
        at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_setObject(FilterChainImpl.java:2920)
        at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.setObject(PreparedStatementProxyImpl.java:411)
        at com.alibaba.druid.pool.DruidPooledPreparedStatement.setObject(DruidPooledPreparedStatement.java:476)

        at org.skife.jdbi.v2.ObjectArgument.apply(ObjectArgument.java:35)
        at org.skife.jdbi.v2.ColonPrefixNamedParamStatementRewriter$MyRewrittenStatement.bind(ColonPrefixNamedParamStatementRewriter.java:167)
        ... 79 more
09:32:11,587 DEBUG RequestResponseBodyMethodProcessor:205 - Written [com.peptalk.api.ApiError@32d0d93c] as "application/json;charset=UTF-8" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@4b0b8f14]
09:32:11,588  WARN ExceptionHandlerExceptionResolver:189 - Handler execution resulted in exception: Exception while binding 'content' [statement:"insert", located:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (:docId,:content,sysdate)", rewritten:"    insert into VST_ENTITY_HTML (doc_id,content,create_time) values (?,?,sysdate)", arguments:{ positional:{}, named:{docId:61,content:javax.sql.rowset.serial.SerialClob@88694698}, finder:[]}]


please help me , thanks !


在 2016年12月29日星期四 UTC+8下午2:28:49,Matthew Hall写道:

Steven Schlansker

unread,
Dec 30, 2016, 1:03:51 PM12/30/16
to jd...@googlegroups.com
The root cause is an exception from the driver:

Caused by: java.sql.SQLException: 无效的列类型
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8516)

Google Translate says "Invalid column type"

I've never seen the SerialClob class -- are you sure the Oracle driver supports it?
They may have their own Clob implementation that you must use.
signature.asc
Reply all
Reply to author
Forward
0 new messages