我陷入了一个庞大的旧项目(j2sdk 1.4.2,Tomcat 4.1.29,MySQL 5.0.51a),我需要在工作中安装新的开发环境。
我有一个由我的Tomcat访问的MySQL数据库,它处理来自我的Java应用程序的请求。在该DB中,某些表包含我的应用程序所需的布尔值。
因此,在应用程序中,会生成一个预准备语句,将参数添加到其中,然后启动请求,并将此请求的结果集存储在自定义SQLResult
对象内(即我的公司制作的自定义框架,不能做任何事情 - 但是,它与经典的java.sql.ResultSet
对象非常相似。
问题在于:当java应用程序请求将一些数据存储在数据库中TINYINT(1)
时,这些数据将作为java.lang.Integer
而不是java.lang.Boolean
返回给Java应用程序,如我想。
注意:Tomcat服务器使用的JDBC连接器版本是mysql-connector-java-3.0.11-stable。
到目前为止我测试的内容(没有结果):
tinyInt1isBit=<true/1>
作为我的连接字符串我现在很确定问题来自Tomcat服务器使用的MySQL JDBC连接器。因此,当我更改连接器的版本时,没有其他任何工作了(意思是,甚至无法连接用户)。
有什么想法吗?
编辑:我忘了确切地说,在java应用程序的另一部分中,对DECIMAL
存储的数据的请求将返回为java.lang.String
!这也是我必须解决的一个主要问题,但我认为这两个问题与原因有关。
答案 0 :(得分:2)
MySQL类型名称: TINYINT
GetColumnClassName的返回值: TINYINT
如果配置属性tinyInt1isBit设置为true(默认值)且存储大小为1,则返回Java类:
java.lang.Boolean
,如果不是,则返回java.lang.Integer
。 / p>
请注意:或java.lang.Integer
,如果没有。检查属性tinyInt1isBit
并可能更改它。
如果您已经尝试重启mysql服务器。
答案 1 :(得分:0)
因此,经过一整周的工作,我设法找到了解决方案。当心,这有点愚蠢。
当我认为MySQL连接器是我的问题的根源时,我是对的。我决定重试我今天尝试的所有事情来解决这个问题,所以我稍微升级了连接器(从v3.0.11升级到v3.1.14)。然后我重新启动了有问题的数据库请求,并注意到我之前在Tomcat日志中没有看到的ERROR
日志:指定的数据库名称不正确(类似myDB\?autoReconnect=true...
)。实际上,在连接参数部分之前错误地插入了\
。
我从连接字符串中删除了有罪的\
,重新启动了我的Tomcat,然后...... tadaaa!我的问题解决了!
但是,我使用旧的MySQL连接器(v3.0.11)进行了测试,它仍然将TINYINT(1)
作为java.lang.Integer
和DECIMAL
作为java.lang.String
返回。所以我猜客户端在它的生产Tomcat上升级了它的MySQL连接器而没有警告我。
无论如何,谢谢大家的建议。猜猜我将来调试时会更仔细地阅读服务器日志: - )