Sybase Error Неявное преобразование из типа данных 'VARCHAR' в 'INT' не допускается - PullRequest
2 голосов
/ 03 марта 2012

Я получаю эту ошибку при попытке выполнить запрос в моем приложении, и я не уверен, почему:

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

Есть ли что-нибудь еще, что может вызвать эту ошибку ??

Ответы [ 3 ]

1 голос
/ 17 декабря 2013

В моем случае значения по умолчанию для нескольких столбцов INT в определении таблицы имели значения VARCHAR.

Пример:

jobCount INT DEFAULT '0'

1 голос
/ 07 июля 2012

Неявное преобразование типа данных 'VARCHAR' в 'INT' произойдет, если вы не сможете заключить значение VARCHAR в кавычки.

При заключении значения INT в кавычки произойдет неявное преобразование типа данных INT в VARCHAR.

0 голосов
/ 19 мая 2015

@ user1505078 является правильным

В этом C-коде я использую DBSMALLINT-тип DB-Library для поиска в столбце 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;
...