尝试在我的应用程序中运行查询时出现此错误,我不确定原因:
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 :(得分:1)
如果未能将VARCHAR值括在引号中,则会发生从数据类型“VARCHAR”到“INT”的隐式转换。
将INT值括在引号中时,会发生从数据类型“INT”到“VARCHAR”的隐式转换。
答案 1 :(得分:1)
在我的例子中,为表定义中的少数INT列提供的默认值具有VARCHAR值。
示例:
jobCount INT DEFAULT'0'
答案 2 :(得分:0)
@ user1505078是正确的
在这个C代码中,我使用DB-Library DBSMALLINT类型来搜索VARCHAR列,返回类型也是一个Integer,所以我不得不用单引号包装%d(即'%d' )。这足以让#34;转换"该值,因为该查询中引号之间的任何内容都将是CHAR。
DBSMALLINT region_code;
dbbind(dbproc, 1, SMALLBIND, (DBINT)0, (BYTE *)®ion_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;