2013-07-21 3 views
0

java preparedStatement를 사용하여 mysql 저장 프로 시저에 날짜 매개 변수를 전달하려고합니다. 그러나 관계없이 변수가 채워집니다 여부, 나는 데이터베이스 스키마에 따라 오류java mysql 데이터 잘림 : 잘못된 날짜 값 : ''오류

**com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: ''** 

무엇입니까의 생년월일 (DateOfBirth) 열 널 (null)이 될 수 있습니다.

왜 오류가 발생하는지 잘 모르겠습니다. 나는 문자열 입력을 사용하여 다음과 같은 코드를 사용하여 SQL 날짜로 변환하고 있습니다 :


if(!dob.equals("")){ 
     try { 
      contact.setDob(new Date(format.parse(dob).getTime())); 
      System.out.println("New date:" + contact.getDob()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    }else{ 
     contact.setDob(null); 
    } 

내 저장 프로 시저는 다음과 같습니다 :

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `Contacts`.`InsertContactInfo` $$ 
CREATE PROCEDURE `Contacts`.`InsertContactInfo` (salutation Text, category Text, firstName varchar(45), middleName varchar(45), lastName varchar(45), dob date, dom date, sex char(1), email varchar(30)) 
BEGIN 
Insert into contact_info(Salutation,Category,sex,FirstName,LastName,MiddleName, DateofBirth, DateofMarriage, Email) 
Values(salutation,category,sex,firstname,middlename,lastname,dob,dom,email); 

END $$ 

DELIMITER ; 

을하고 사용하고 다음 코드를 입력하여 데이터를 입력하십시오 :

java.sql.PreparedStatement statement = con.prepareStatement("call InsertContactInfo(?,?,?,?,?,?,?,?,?)"); 
     statement.setString(1, contact.getSalutation()); 
     statement.setString(2, contact.getCategory()); 
     statement.setString(3, contact.getSex()); 
     statement.setString(4, contact.getFirstName()); 
     statement.setString(5, contact.getLastName()); 
     statement.setString(6, contact.getMiddleName()); 
     if(contact.getDob()!= null){ 
      statement.setDate(7, contact.getDob()); 
     }else{ 
      statement.setNull(7, Types.DATE); 
     } 
     if(contact.getDom()!= null){ 
      statement.setDate(8, contact.getDom()); 
     }else{ 
      statement.setDate(8, null); 
     } 
     statement.setString(9, contact.getEmail()); 
     statement.executeUpdate(); 

어디서 실수를하고 있는지 확실하지 않습니다. 어떤 아이디어?

답변

2

필드 순서가 잘못되었습니다. 섹스 필드는 8 위입니다.

pStmt = conn.prepareStatement("call InsertContactInfo(?,?,?,?,?,?,?,?,?)"); 
     pStmt.setString(1, "Mr"); 
     pStmt.setString(2, "Customer"); 
     pStmt.setString(3, "Gangadhar"); 
     pStmt.setString(4, ""); 
     pStmt.setString(5, "T"); 
     pStmt.setDate(6, null); 
     pStmt.setDate(7, null); 
     pStmt.setString(8, "M"); 
     pStmt.setString(9, "XXXXX"); 
     pStmt.executeUpdate(); 
+0

는 아 ... 그 지금 잘 작동 .. 나는이에 시간을 소비하고 실수를 찾을 수 없습니다. 정말 어리석은 지금 .. 느낌 감사합니다 :) – flamesavor

관련 문제