忽略JDBC准备语句中int的Java setNull()-mysql将插入零
我正在尝试将一个int值上载到我的数据库表中,该值可能为null。我有以下代码:忽略JDBC准备语句中int的Java setNull()-mysql将插入零,java,mysql,jdbc,Java,Mysql,Jdbc,我正在尝试将一个int值上载到我的数据库表中,该值可能为null。我有以下代码: ps = connection.prepareStatement("INSERT INTO table1 (COL1) VALUES(?)"); if( int_val == null) { ps.setNull(1, java.sql.Types.INTEGER); } else { ps.setInt(1, int_val); } int_val变量是java.lang.Integer,因此
ps = connection.prepareStatement("INSERT INTO table1 (COL1) VALUES(?)");
if( int_val == null) {
ps.setNull(1, java.sql.Types.INTEGER);
}
else {
ps.setInt(1, int_val);
}
int_val变量是java.lang.Integer,因此它可以有空值。代码确实输入了“int_val==null”if循环,因此我们知道int_val确实为null。它插入的表的COL1定义为:
intVal INT NULL COMMENT ''
因此它可以接受空值。但是,当它处理查询时,会在COL1列中插入一个零,而不是null。在我的实际代码中,它能够以null形式输入varchar列,而没有任何问题
我在glassfish安装中使用的MySQL jar有:
com.mysql.jdbc_5.1.5.jar mysql-connector-java-5.1.35-bin.jar –
你知道这是怎么回事吗?我是否做了一些非常明显不正确的事情?如前所述,除非您为列定义了默认值并考虑到该列接受
NULL
;您可以将INSERT
语句更改为如下所示,以便在列中插入null
。这是严格意义上的MySQL
解决方案,但我不确定Java
中是否存在类似的方法来实现同样的效果
INSERT INTO table1 (COL1) VALUES(NULL)
(或)
您是否尝试过使用其他jdbc驱动程序(例如MariaDB)来确保问题不在驱动程序中
这个驱动程序应该与您的mysql服务器兼容。似乎在某个地方,将值转换为JSON或从JSON转换为值时,会弄乱空值,并将零放在那里 在我测试的代码中,有很多调用,这是第一个调用,它将null设置为零,而我已经修复了可以更新它的后续位置
谢谢你的帮助-感觉v。现在真蠢 并且该列未定义为
默认值0
?您是否确保int\u val
的实际值为null
?(不相关-变量名称不应包含下划线。根据编码惯例,应将其称为intVal
).您使用的是哪个版本的MySQL JDBC驱动程序?该列定义为:intVal
intnull注释”“您是否尝试过显式使用java.sql.Types.INTEGER
?嗨,Rahul-我需要通过JDBC作为更大查询的一部分,所以我认为这不实用
INSERT INTO table1 (COL1)
SELECT NULL FROM dual;