【问题标题】:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '' for column 'Date_Of_Birth' at row 1com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的日期值:第 1 行的列 'Date_Of_Birth' 的''
【发布时间】:2011-10-02 21:24:54
【问题描述】:

我正在尝试通过 java 面板更新用户的个人详细信息。面板具有 user_id(自动生成)、姓名、出生日期等字段。 问题是当我在 java 面板中的出生日期字段中输入任何内容然后保存时。它给了我上面提到的错误。 我试图通过直接使用mysql数据库将null插入出生日期(日期数据类型)字段来验证它。它没有给出错误。 为什么我通过java面板插入时不取空字符串,而直接使用mysql插入时取空字符串。

CREATE TABLE `userpersonaldetail` (
  `User_Id` int(10) unsigned NOT NULL auto_increment,
  `Name` varchar(45) default NULL,
  `Date_Of_Birth` date default NULL,
  `Address` varchar(300) default NULL,
  `Phone` varchar(20) default NULL,
  `Mobile` varchar(20) default NULL,
  `Email` varchar(50) default NULL,
  PRIMARY KEY  (`User_Id`),
  CONSTRAINT `FK_userpersonaldetail_1` FOREIGN KEY (`User_Id`) REFERENCES `usermaster` (`User_Id`)
) 

而发生异常的部分代码是:

  try
     {
        con=(Connection) DBConnection.getConnection();
        pstmt=(PreparedStatement) con.prepareStatement("Update userpersonaldetail set "+
               "name=?,date_of_birth=?,address=?,phone=?,mobile=?,email=? where user_id=?");

            pstmt.setInt(7,perBean.getUserId());
            pstmt.setString(1,perBean.getName());
            pstmt.setString(2,perBean.getDateOfBirth());
            pstmt.setString(3,perBean.getAddress());
            pstmt.setString(4,perBean.getPhone());
            pstmt.setString(5,perBean.getMobile());
            pstmt.setString(6,perBean.getEmail());

            int i=pstmt.executeUpdate();
 }

这里 perBean 是从 gui 中检索值的 javaBean。在其中一个测试用例中,我将 date_of_birth 文本框保留为 null,这在存储到 DB 时会出错。

【问题讨论】:

    标签: java mysql


    【解决方案1】:

    我最初的猜测是该字段已被定义为“NOT NULL”,这意味着它将强制您输入一个值...

    如果您要对表进行 mysql 转储(或在某些工具中查看),您可能会发现它的定义如下:

    `someDT` datetime NOT NULL
    

    【讨论】:

    • 您可以再次阅读我重新构建的问题以获得更清晰的信息。日期字段允许空值。
    • @ashima 你怎么知道你试图在你发布的代码中插入一个空值? (而不是例如空字符串)
    • 在你'尝试'中,你有没有发现......如果有,它应该给出错误。
    • @Brian 是的,我有一个 try 的问题。我以任何方式纠正了错误。我假设一个空字符串是一个空字符串。在添加空字符串时,它给出了错误日期值的错误.非常感谢您解决问题
    【解决方案2】:

    我用最新版本替换了旧版本的 my-sql-connector jar(可在服务器的 lib 文件夹中找到)。这解决了我的问题。

    【讨论】:

      【解决方案3】:

      啊,我现在明白了,您不能插入 '' 作为日期。你需要传递一个日期。

      【讨论】:

        【解决方案4】:

        如果一个属性没有值,但你在列列表中提到了它,迫使你在那里给出一些东西,你需要使用

        statement.setNull(index, datatype)

        到它。设置为 "" 与设置为 null 不同。

        【讨论】:

          猜你喜欢
          • 2019-12-26
          • 2015-11-28
          • 2016-03-23
          • 1970-01-01
          • 2018-06-02
          • 2015-04-26
          • 1970-01-01
          • 2017-01-30
          • 2023-03-04
          相关资源
          最近更新 更多