我想在我的项目中向数据库插入/更新数据。我在mysql中创建了一个存储过程。我需要从我的java代码发送一些输入参数。有时这些参数的值可以为null(当用户没有为该字段发送值时)。但是我无法将我的java代码中的null值传递给存储过程。 我的代码是: -
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代码中的值是否为null。所以我想知道是否有办法将空值从java代码传递给存储过程。