我有这样的查询
Query importQuery = advertiserDao.getEntityManager().createNativeQuery(
"select matching_type from group_key where key_id = " + Key.getkeyId());
String match = (String) importQuery.getSingleResult();
matching_type
是enum('good', 'bad', 'repared')
类型。这给出了如下例外:
java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String
这是什么意思,实际值是一个字符串。我该如何解决这个问题?
答案 0 :(得分:2)
尝试使用异常建议的java.lang.Character变量:
Character match = (Character) importQuery.getSingleResult();
答案 1 :(得分:0)
这很奇怪。根据官方文档,MySQL ENUM类型肯定应该作为String返回(实际上,任何MySQL数据类型都可以转换为String
):
21.4.4.3. "Java, JDBC and MySQL Types"
MySQL Connector / J非常灵活 它处理之间的转换的方式 MySQL数据类型和Java数据类型。
通常,任何MySQL数据类型都可以 转换为
java.lang.String
,和 任何数字类型都可以转换为 任何Java数字类型, 虽然四舍五入,溢出或丢失 可能会出现精确度。从Connector / J 3.1.0开始, JDBC驱动程序将发出警告或 按原样抛出DataTruncation异常 JDBC规范要求 除非连接已配置 不要通过使用该属性这样做 jdbcCompliantTruncation并设置它 到
false
。始终的转化 保证工作列在 下表:
连接属性 - 其他。
These MySQL Data Types | Can always be converted to these Java types ---------------------------------+--------------------------------------------- CHAR, VARCHAR, BLOB, TEXT, ENUM, | java.lang.String, java.io.InputStream, and SET | java.io.Reader, java.sql.Blob, java.sql.Clob ---------------------------------+---------------------------------------------
ResultSet.getObject()
方法 使用之间的类型转换 MySQL和Java类型,如下 适当的JDBC规范。 返回的值ResultSetMetaData.GetColumnClassName()
也显示如下。更多 关于java.sql.Types
的信息 类参见Java 2平台类型。ResultSet.getObject()的MySQL类型到Java类型。
MySQL Type Name | Return value of | Returned as Java Class | GetColumnClassName | ----------------------------+--------------------+----------------------- ... | ... | ... ----------------------------+--------------------+----------------------- ENUM('value1','value2',...) | CHAR | java.lang.String
我怀疑是JDBC驱动程序错误。你用的是什么版本?你能试试更新的版本吗?是否使用原始JDBC?