我正在尝试使用java preparedStatement将日期参数传递给mysql存储过程。但无论是否填充变量,我都会收到错误
**com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: ''**
根据数据库架构,dateofbirth列可以为null 。
我不确定错误的原因。我正在使用字符串输入并使用以下代码将其转换为sql date:
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();
不知道哪里出错了。有什么想法吗?
答案 0 :(得分: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();