2012-03-02 54 views
1

我越來越想在我的應用程序運行一個查詢時,這個錯誤,我不知道爲什麼:Sybase錯誤隱式轉換「VARCHAR」到「INT」不允許

Caused by: com.sybase.jdbc3.jdbc.SybSQLException: Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed. Use the CONVERT function to run this query. 

at com.sybase.jdbc3.tds.Tds.a(Unknown Source) 
at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source) 
at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source) 
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source) 
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source) 
at com.sybase.jdbc3.jdbc.SybStatement.queryLoop(Unknown Source) 
at com.sybase.jdbc3.jdbc.SybStatement.executeQuery(Unknown Source) 
at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeQuery(Unknown Source) 
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:678) 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1953) 
at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
at org.hibernate.loader.Loader.doList(Loader.java:2533) 
... 79 more 

無論身在何處在我的代碼中,我試圖將VARCHAR轉換爲INT。

數據庫視圖列 - > Java類型:

INT --> Integer 
VARCHAR --> String 
INT --> Long 
VARCHAR --> a POJO 
FLOAT --> Double 
DATE --> Date 

還有別的可能導致這個錯誤?

+0

請把查詢和一些代碼。 – 2012-03-05 14:09:11

回答

1

當您無法將VARCHAR值用引號括起來時,會發生從數據類型「VARCHAR」到「INT」的隱式轉換。

將INT值用引號引起來時,會發生從數據類型'INT'到'VARCHAR'的隱式轉換。

1

在我的情況下,爲表格定義中的少數INT列提供的默認值具有VARCHAR值。

實施例:

jobCount INT DEFAULT '0'

0

@ user1505078是正確

在這種C代碼,我使用DB-庫DBSMALLINT類型來搜索到VARCHAR列,則返回類型也是一個整數,所以我不得不用單引號(即'%d')包裝%d。這足以「轉換」該值,因爲無論如何,該查詢中的引號之間無論如何都是CHAR。

DBSMALLINT region_code; 

dbbind(dbproc, 1, SMALLBIND, (DBINT)0, (BYTE *)&region_code); /* Integer */ 

sybase_error = False; 
    dbfcmd(dbproc, "insert into <table_name> "); 
    dbfcmd(dbproc, "select * from <another_table> "); 
    /* With quotes, the query searches for Chars instead */ 
    dbfcmd(dbproc, "where group_code = '%d' ", region_code); /* Quotes in '%d' */ 
    dbsqlexec(dbproc); 
    while (dbresults(dbproc) != NO_MORE_RESULTS) 
     continue; 
相關問題