2012-07-01 10 views
6

utilizo pájaro de fuego como mi base de datos y mybatis para manipular los datos, pero cuando ejecuta una consulta con una palabra clave cuya longitud es superior a 5, a continuación, los errores siguientes situaciones:excepción aritmética, desbordamiento numérico, o truncamiento de cadena

### Cause: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -303 
arithmetic exception, numeric overflow, or string truncation 
No message for code 335544914 found. 

Si su longitud es menor que 6, funciona bien. Actualizo mybatis y firebird a la última versión, y el resultado es el mismo.

sql detallada es la siguiente:

select b.*, bt.type_no as "type.id" , bt.type_dsc "type.name", 
    bt.show "type.show", bt.del "type.del" 
from 
    book b,book_type bt 
where 
    b.type_no=bt.type_no and bt.del=0 
    and b.del=0 and b.type_no in (74) 
    and ((lower(title) like '%aaaaaaaaa%') or (lower(content) like '%aaaaaaaaa%')) 
order by bt.show desc,b.type_no,b.id 

Seguido por el registro de errores:

2012-07-03 23:20:14 [DEBUG](org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl:42) ooo Using Connection [[email protected]] 
2012-07-03 23:20:14 [DEBUG](org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl:42) ==> Preparing: select b.*, bt.type_no as "type.id" , bt.type_dsc "type.name", bt.show "type.show", bt.del "type.del" from book b,book_type bt where b.type_no=bt.type_no and bt.del=0 and b.del=0 and ((lower(title) like ?) or (lower(content) like ?)) order by bt.show desc,b.type_no,b.id 
2012-07-03 23:20:14 [DEBUG](org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl:42) ==> Parameters: %aaaaaaaa%(String), %aaaaaaaa%(String) 
2012-07-03 23:20:14 [ERROR](frame.FrmMainI:1018) org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -303 
arithmetic exception, numeric overflow, or string truncation 
No message for code 335544914 found. 
### The error may involve book.note.findByTypeTitleContent-Inline 
### The error occurred while setting parameters 
### Cause: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -303 
arithmetic exception, numeric overflow, or string truncation 
No message for code 335544914 found. 
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -303 
arithmetic exception, numeric overflow, or string truncation 
No message for code 335544914 found. 
### The error may involve book.note.findByTypeTitleContent-Inline 
### The error occurred while setting parameters 
### Cause: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -303 
arithmetic exception, numeric overflow, or string truncation 
No message for code 335544914 found. 
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) 
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) 
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95) 
    at dao.AbsBaseIbatisDAO.selectList(AbsBaseIbatisDAO.java:96) 
    at dao.NoteDAO.findByTypeTitleContent(NoteDAO.java:19) 
    at bo.BookBO.findNoteByTypeTitleContent(BookBO.java:118) 
    at frame.FrmMainI.search(FrmMainI.java:1011) 
    at frame.FrmMainI$28.keyReleased(FrmMainI.java:839) 
    at java.awt.Component.processKeyEvent(Component.java:6249) 
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2801) 
    at java.awt.Component.processEvent(Component.java:6065) 
    at java.awt.Container.processEvent(Container.java:2041) 
    at java.awt.Component.dispatchEventImpl(Component.java:4651) 
    at java.awt.Container.dispatchEventImpl(Container.java:2099) 
    at java.awt.Component.dispatchEvent(Component.java:4481) 
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676) 
    at java.awt.Component.dispatchEventImpl(Component.java:4523) 
    at java.awt.Container.dispatchEventImpl(Container.java:2099) 
    at java.awt.Window.dispatchEventImpl(Window.java:2478) 
    at java.awt.Component.dispatchEvent(Component.java:4481) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) 
    at java.awt.EventQueue.access$000(EventQueue.java:84) 
    at java.awt.EventQueue$1.run(EventQueue.java:602) 
    at java.awt.EventQueue$1.run(EventQueue.java:600) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$2.run(EventQueue.java:616) 
    at java.awt.EventQueue$2.run(EventQueue.java:614) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -303 
arithmetic exception, numeric overflow, or string truncation 
No message for code 335544914 found. 
    at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:730) 
    at org.firebirdsql.jdbc.AbstractPreparedStatement.execute(AbstractPreparedStatement.java:663) 
    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.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) 
    at $Proxy1.execute(Unknown Source) 
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:57) 
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:70) 
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:57) 
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267) 
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:141) 
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:124) 
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:101) 
    ... 40 more 

Y mybatis sql defination:

<select id="findByTypeTitleContent" parameterType="map" resultMap="booknoteMap"> 
      select 
      b.*, 
      bt.type_no as "type.id" , 
      bt.type_dsc "type.name", 
      bt.show "type.show", 
      bt.del "type.del" 
      from 
       book b,book_type bt 
      where 
       b.type_no=bt.type_no 
       and bt.del=0 
       and b.del=0 
       <if test="typeNos!=null"> 
       and b.type_no in (
        <foreach collection="typeNos" item="t" separator=","> 
         #{t.id} 
       </foreach> 
       ) 
      </if> 

      <if test="keys!=null"> 
        and ((
       <foreach collection="keys" item="key" separator="and" > 
         lower(title) like #{key} 
       </foreach> 
       ) or (
        <foreach collection="keys" item="key" separator="and" > 
         lower(content) like #{key} 
       </foreach> 
       )) 
      </if> 
      <choose > 
       <when test="typeNo>0"> 
        order by bt.show desc, b.id 
       </when> 
       <otherwise> 
        order by bt.show desc,b.type_no,b.id 
       </otherwise> 
      </choose> 
     </select> 

hice más pruebas y descubrí que el título como está bien, no importa por cuánto tiempo la palabra clave, contenido como causar el error cuando la longitud es mayor que 5. columna de título es varchar (100), el contenido es Blob sub_type 1, pero de todos modos está totalmente bien en la consola sql que me confunde tanto, el error simplemente ocurre al ejecutar en java

¿Alguna idea? Ha sido un largo tiempo.

+0

Cuál es la longitud definida del título y el contenido de las columnas (o el DDL de toda la tabla). También sería bueno conocer las versiones de Firebird y Jaybird. –

+0

Es suficientemente largo, absolutamente más largo que 'aaaaaaaa'. – user1458290

+0

Sería útil saber (1) la versión exacta de Firebird, (2) la versión exacta de Jaybird, (3) el conjunto de caracteres (predeterminado) de la base de datos, (4) el conjunto de caracteres de ese contenido BLOB, (5) la conexión conjunto de caracteres especificado en la url JDBC (si existe). –

Respuesta

2

Usted probablemente está confrontado con este error: http://tracker.firebirdsql.org/browse/CORE-3353 que ha sido resuelto en Firebird 2.5.1. En esta falla, los parámetros BLOB en una condición LIKE se describen como un parámetro VARCHAR (30). En el caso del conjunto de caracteres de conexión UTF8, Jaybird lo tratará como VARCHAR (5) y, debido al comportamiento específico de Jaybird, permitirá hasta 6 caracteres si es un patrón similar que termina en%.

Por lo tanto, upgrading to Firebird 2.5.1 debería resolver este problema.

+2

correcto, está resuelto. Gracias . – user1458290

0
select b.*, bt.type_no as "type.id" , bt.type_dsc "type.name", 
    bt.show "type.show", bt.del "type.del" 

creo que faltan la palabra "como" en varios lugares

select b.*, bt.type_no as "type.id" , bt.type_dsc AS "type.name", 
    bt.show AS "type.show", bt.del AS "type.del" 
+1

'AS' es una palabra clave opcional (y si no fuera así obtendrías un error diferente) –

Cuestiones relacionadas