2011-07-11 47 views
1

我試圖通過java面板更新用戶的個人詳細信息。面板有像user_id (自動生成),姓名,出生日期。 問題是當我在java面板中輸入任何內容到出生日期字段,然後保存它。它給了我上面提到的錯誤。 我試圖通過直接使用mysql數據庫插入null到出生日期(日期數據類型)字段來驗證它。它沒有提供任何錯誤。 爲什麼在我通過java面板插入時沒有采用空字符串,而是在直接使用mysql插入時採用空字符串。com.mysql.jdbc.MysqlDataTruncation:數據截斷:第1行'Date_Of_Birth'列的日期值不正確:''

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.In測試用例的一個檢索值JavaBean的我保持DATE_OF_BIRTH文本框空在存儲在數據庫時發生錯誤。

回答

1

我最初的猜測是該領域已被定義爲「NOT NULL」,這意味着它會迫使你輸入一個值...

如果你是做表的MySQL的轉儲(或視圖它在一些工具),你可能會發現它定義如:

`someDT` datetime NOT NULL 
+0

您可以再次閱讀我重新構建的問題以獲得更多清晰度。日期字段允許空值。 – ashima

+0

@ashima你怎麼知道你嘗試在你的發佈代碼中插入一個空值? (而不是一個空字符串) – nos

+0

你是'試試',你有沒有趕上......如果有錯誤,它應該會出錯。 – Brian

0

啊,我現在看到,你不能插入''作爲日期。你需要通過一個日期。

0

如果屬性不具有價值,但你擁有了它在列列表中所提到的,逼着你去給那裏的東西,你需要使用

statement.setNull(index, datatype)

它。設置爲「」與設置爲空不同。

0

我用最新版本替換了舊版本的my-sql-connector jar(在服​​務器的lib文件夾中找到)。這解決了我的問題。

相關問題