iBatis + Timestamp no Oracle

3 respostas
P

Olá pessoal

Galera, tenho a seguinte classe Java

public class Parameters {
	private Date data;

	public Date getData() {
		return data;
	}
	public void setData(Date data) {
		this.data = data;
	}
}

e um mapeamento com o iBatis:

<select id="getAllClicks" resultMap="getClicksResult" parameterClass="model.Parameters">
	<![CDATA[
	SELECT
		S.NOME,
		S.IDADE
	FROM STUDENT S WHERE S.DATAMATRICULA > #data# 
	]]>
</select>

O campo S.DATAMATRICULA está como timestamp. Como fazer para esse código funcionar? Aparentemente o iBatis não suporta java.util.Date para comparar com um campo TIMESTAMP do Oracle.

Ajudem ae galera

Valeu

3 Respostas

O

Você não pode mudar sua entity e ao invés de usar java.util.Date usar java.sql.Timestamp?

duardor

Kra eu uso exatamente da maneira que você falou e nunca tive problemas não.
Oracle TIMESTAMP e java como java.util.Date.
Dá para colar o stack pra gente ver?

P
Coloquei para logar a Data que está no bean e o resultado é o seguinte:
Thu May 10 12:18:21 GMT 2007

Ou seja, uma data válida. A exception lançada tem o seguinte stack:

com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the getAllClicks-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: ORA-01843: not a valid month

        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:615)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589)
        at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
        at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:95)
        at uol.auditor.controller.ListClickController.handle(ListClickController.java:53)
        at org.springframework.web.servlet.mvc.AbstractCommandController.handleRequestInternal(AbstractCommandController.java:82)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:806)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:230)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
        at org.mortbay.jetty.Server.handle(Server.java:286)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:444)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:701)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:500)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:203)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:340)
        at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
Caused by: java.sql.SQLException: ORA-01843: not a valid month

        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
        at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1062)
        at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
        at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
        at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:186)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
        ... 30 more
Criado 31 de maio de 2007
Ultima resposta 1 de jun. de 2007
Respostas 3
Participantes 3