Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL PreparedStatement.setBoolean将值用引号括起来 简而言之,我的问题是:_Java_Mysql_Prepared Statement - Fatal编程技术网

Java MySQL PreparedStatement.setBoolean将值用引号括起来 简而言之,我的问题是:

Java MySQL PreparedStatement.setBoolean将值用引号括起来 简而言之,我的问题是:,java,mysql,prepared-statement,Java,Mysql,Prepared Statement,此代码示例生成带引号的值的查询的原因是什么 我的问题是: 我有一个JavaEE应用程序,带有用于DB交互的普通JDBC,最近我注意到在我的日志中出现了一些MySQLDataTruncation异常。这些异常是在试图将实体保存到数据库表中时发生的,该数据库表的布尔列定义为位(1)。这是因为生成的查询如下所示: Insert into T values ('1'); 请注意,值是用引号括起来的。使用Log4Jlog.info(ps)从应用程序记录查询语句。 以前的日志表明,没有引用 此外,甚至My

此代码示例生成带引号的值的查询的原因是什么

我的问题是: 我有一个JavaEE应用程序,带有用于DB交互的普通JDBC,最近我注意到在我的日志中出现了一些
MySQLDataTruncation
异常。这些异常是在试图将实体保存到数据库表中时发生的,该数据库表的布尔列定义为
位(1)
。这是因为生成的查询如下所示:

Insert into T values ('1');
请注意,值是用引号括起来的。使用Log4J
log.info(ps)从应用程序记录查询语句。
以前的日志表明,没有引用

此外,甚至MySQL服务器日志也开始看起来不一样了。在此之前,我为每个执行的查询提供了成对的记录:

12345 Prepare Insert into T values (?)
12345 Execute Insert into T values (1)
及之后:

12345 Query Insert into T values ('1')
值得注意的是,这些更改并不是部署新版本的应用程序,甚至不是重新启动MySQL/ApplicationServer的结果,负责查询生成的代码与本问题中的示例一样简单

Application server restart在大约12小时内修复了该问题,然后再次发生。作为临时解决方案,我将
BIT
列更改为
TINYINT

另外,通过检查应用程序和MySQL日志,可以将出现问题的时间缩短到2分钟左右,但这段时间的日志中没有任何异常


p.p.S.应用服务器是Glassfish 2.1.1,MySQL服务器版本是5.5.31-1~dotdeb,MySQL Connector/J版本是5.0.3。

事实证明,这实际上是未关闭的准备语句的问题。 当MySQL服务器上打开的语句数达到允许的最大值时,应用程序仍然能够以某种方式继续工作,而不会产生sql错误:

Error Code: 1461 Can’t create more than max_prepared_stmt_count statements
但在这种模式下,它开始用引号将布尔值括起来,这导致我所有的麻烦都影响了位(1)列

Error Code: 1461 Can’t create more than max_prepared_stmt_count statements