2016-07-27 101 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執行存儲過程

還可以指派一個默認值參數在存儲過程

相關問題