2016-07-27 103 views
-3

我想在我的项目中插入/更新数据到数据库。我在mysql中创建了一个存储过程。我需要从我的java代码发送一些输入参数。有时这些参数的值可以为空(当用户没有为该字段发送值时)。但我无法将我的java代码中的空值传递给存储过程。 我的代码是: -如何从Java传递存储过程中的空值?

StoredProcedureQuery query = manager.createStoredProcedureQuery("updateProfile"); 
    query.registerStoredProcedureParameter("empName", String.class, ParameterMode.IN); 
    query.registerStoredProcedureParameter("fatherName", String.class, ParameterMode.IN); 
    query.setParameter("empId", model.getEmpName()); 
    query.setParameter("fatherName", model.getfatherName()); 
    query.execute(); 

现在,我在这里从用户只得到empName。所以当我执行它时,我得到错误。

Caused by: java.sql.SQLException: No value specified for parameter 2 
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:695) 
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:663) 
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:653) 
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:638) 
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:606) 
at com.mysql.cj.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2166) 
at com.mysql.cj.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2146) 
at com.mysql.cj.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2083) 
at com.mysql.cj.jdbc.PreparedStatement.execute(PreparedStatement.java:1120) 
at com.mysql.cj.jdbc.CallableStatement.execute(CallableStatement.java:790) 
at org.hibernate.result.internal.OutputsImpl.<init>(OutputsImpl.java:51) 

我有超过20个字段,用户可以发送,所有都是可选的。所以我不想添加一个if条件来检查我的java代码中的值为空。所以我想知道是否有一种方法可以将Java代码中的空值传递给存储过程。

+1

您可能想提供一些更多的详细信息,如果可能有一些代码和/或示例。 – Thomas

+1

这个问题含糊不清......请提供您希望达到的目标,失败的地点以及发生错误的地方(如果有的话)。 – npinti

+0

您可以像正常值一样传递它。 –

回答

0

检查这个Link为NULL值MySQL

this执行存储过程

还可以指派一个默认值参数在存储过程

相关问题