【问题标题】:insert null for DATETIME Field through PrepareStatement using jdbc使用 jdbc 通过 PrepareStatement 为 DATETIME 字段插入 null
【发布时间】:2015-01-15 06:13:55
【问题描述】:

我想使用 JDBC(使用 Mysql 数据库)通过 PrepareStatement 将空值插入到 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 或 date

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);

但没有任何工作它会抛出异常,例如

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)

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

【问题讨论】:

  • 列是否可以为空?另外,如果它是 DATETIME 列,为什么要使用 setString()
  • 餐桌摆设是什么?

标签: java mysql database jdbc prepared-statement


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 2011-04-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多