使用jdbc通过PrepareStatement为DATETIME字段插入null

我想通过PrepareStatement使用JDBC(使用Mysql数据库)将空值插入DATETIME字段我尝试了以下方法,但没有任何工作。

我有一个方法“Util.dateconvertdate”,它用于将输入日期转换为格式化的字符串类型

public static String dateconvertdate(Timestamp timestamp) { Date date=null; String formattedDate=""; if(timestamp != null){ SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date1 = new java.util.Date(timestamp.getTime()); formattedDate = formatter.format(date1); } else return "NULL"; return formattedDate; } 

我用它来检查它是否返回null或日期

 if(Util.dateconvertdate(rs.getTimestamp("fld_dob")) !=null){ pmystmt.setString(17, (Util.dateconvertdate(rs.getTimestamp("fld_dob")))); } else{ pmystmt.setNull(17, java.sql.Types.NULL); } 

我尝试过

 pmystmt.setNull(17, java.sql.Types.DATE); pmystmt.setNull(17, Types.NULL); pmystmt.setInt(17, Types.NULL); pmystmt.setString(17, "NULL"); pmystmt.setNull(17, Types.DATE); pmystmt.setString(17, null); pmystmt.setDate(17, null); 

但没有任何工作,它就像抛出exception一样

 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: 'NULL' for column 'dob' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2936) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1601) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1710) at com.mysql.jdbc.Connection.execSQL(Connection.java:2436) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1402) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1694) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1608) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1593) at com.members.App_users.AddRecords(App_users.java:66) at com.main.Start.main(Start.java:47) 

任何帮助将不胜感激。 谢谢

如果您的表列可以为空,那么尝试使用它。 它可能会帮助你。

 pmystmt.setNull(17, java.sql.Types.TIMESTAMP); 

在您的数据库中,url在设置数据源时包含zeroDateTimeBehavior=convertToNull

 jdbc:mysql://ip_address:port/databasename?zeroDateTimeBehavior=convertToNull