2012-07-01 43 views
6

Tôi sử dụng firebird làm cơ sở dữ liệu và mybatis để thao tác dữ liệu, nhưng khi tôi chạy truy vấn có từ khóa có độ dài lớn hơn 5, thì các lỗi sau xảy ra:ngoại lệ số học, số tràn, hoặc chuỗi cắt ngắn

### 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. 

Nếu chiều dài của nó nhỏ hơn 6, nó chạy tốt. Tôi cập nhật mybatis và firebird lên phiên bản mới nhất, và kết quả cũng giống nhau.

Chi tiết sql như sau:

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 

Tiếp theo là các bản ghi lỗi:

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 

Và mybatis sql, định nghĩa:

<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> 

tôi đã kiểm tra và phát hiện ra tiêu đề đó như là ok không có vấn đề bao lâu các từ khóa, nội dung như gây ra lỗi khi chiều dài lớn hơn 5. tiêu đề cột là varchar (100), nội dung là Blob sub_type 1, nhưng dù sao nó hoàn toàn tốt trong giao diện điều khiển sql mà làm cho tôi rất bối rối, lỗi chỉ xảy ra khi chạy trong java

Bất kỳ ý tưởng? Đã được một thời gian dài.

+0

Độ dài được xác định của tiêu đề và nội dung của cột (hoặc DDL của toàn bộ bảng). Nó cũng sẽ là tốt để biết các phiên bản Firebird và Jaybird. –

+0

Nó đủ dài, hoàn toàn dài hơn 'aaaaaaaa'. – user1458290

+0

Sẽ hữu ích khi biết (1) phiên bản Firebird chính xác, (2) phiên bản Jaybird chính xác, (3) ký tự (mặc định) của cơ sở dữ liệu, (4) ký tự của nội dung BLOB đó, (5) kết nối ký tự được chỉ định trong url JDBC (nếu có). –

Trả lời

2

Bạn có lẽ phải đối mặt với lỗi này: http://tracker.firebirdsql.org/browse/CORE-3353 đó đã được giải quyết trong Firebird 2.5.1. Trong thông số lỗi BLOB này trong một điều kiện LIKE được mô tả như là một tham số VARCHAR (30). Trong trường hợp ký tự kết nối UTF8, điều này thực sự được Jaybird coi là VARCHAR (5) và do hành vi cụ thể của Jaybird, nó sẽ cho phép tối đa 6 ký tự nếu nó giống như mẫu kết thúc bằng%.

Vì vậy, upgrading to Firebird 2.5.1 nên giải quyết vấn đề này.

+2

đúng, nó được giải quyết. cảm ơn . – user1458290

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

Tôi nghĩ rằng đang thiếu từ "là" ở một số nơi

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' là một từ khóa tùy chọn (và nếu không phải bạn sẽ gặp phải một lỗi khác) –

Các vấn đề liên quan