com.mysql.jdbc.MysqlDataTruncation:数据截断:日期值不正确:''对于第1行的'Date_Of_Birth'列

时间:2011-07-11 15:04:04

标签: java mysql

我正在尝试通过java面板更新用户的个人详细信息.Panel包含user_id(自动生成),姓名,出生日期等字段。 问题是当我在java面板中输入出生日期字段时没有任何内容然后保存它。它给了我上面提到的错误。 我试图通过直接使用mysql数据库将null插入出生日期(Date数据类型)字段来验证它。它没有给出任何错误。 为什么在我通过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是javaBean,它从gui中检索值。在其中一个测试用例中,我将date_of_birth文本框保留为null,这在存储到DB时会出错。

4 个答案:

答案 0 :(得分:1)

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

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

`someDT` datetime NOT NULL

答案 1 :(得分:1)

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

答案 2 :(得分:0)

啊,我现在看到,你不能插入''作为约会。你需要通过约会。

答案 3 :(得分:0)

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

statement.setNull(index, datatype)

到它。设置为“”与设置为null不同。