2012-03-02 235 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; 
相关问题