2016-08-03 102 views
0

如何執行我的存儲過程。 程序工作時,我直接從SQL執行它,但是當我做到這一點從我的平板電腦不工作如何從預處理執行存儲過程

String itemshelf = DBshelf;// edittext for putting in values on set 
String itemcard = DBcard;// edittext for putting in values on where 
PreparedStatement preparedStatement = con.prepareStatement("EXEC [dbo].[spUpd_Location]"); 
         preparedStatement.executeUpdate(); 

我的存儲過程

ALTER PROCEDURE [dbo].[spUpd_Location] 
    @itemshelf nvarchar(1000)=NULL 
, @itemcard nvarchar(1000)=NULL 
AS 
SET NOCOUNT ON 
UPDATE PS 
SET [ShelfNumber][email protected] 
FROM [file].[ItemPart] PS 
JOIN [file].[Item] P ON P.[id] = PS.[id] 
where [ItemNumber][email protected] 
+0

什麼是錯誤? executeUpdate看起來不對,因爲這不是一個直接的更新 –

+0

我沒有得到任何錯誤,但它不會改變數據庫中的值 –

+0

@itemcard是NULL,所以對於所有的行,相等性測試是錯誤的,用2個參數調用它? (如果你想與null使用IS NULL NULL) –

回答

1

你的存儲過程,期待兩個參數其中您需要提供準備好的聲明。您的SQL需要在參數PreparedStatement對象上設置參數和參數的佔位符。您的代碼將如下所示:

String itemshelf = DBshelf;// edittext for putting in values on set 
String itemcard = DBcard;// edittext for putting in values on where 
PreparedStatement preparedStatement = con.prepareStatement("EXEC [dbo].[spUpd_Location] ?, ?;"); 
preparedStatement.setString(1, itemshelf); 
preparedStatement.setString(2, itemcard); 
preparedStatement.executeUpdate(); 
+0

我越來越無效的參數索引1 –

+0

SQL語句缺少存儲過程名稱上的一個打開的括號(編輯修復),這可能是問題。 –

+0

這裏有一個類似的[問題](http://stackoverflow.com/questions/6113674/how-do-i-execute-a-ms-sql-server-stored-procedure-in-java-jsp-returning-table- d)這可能有幫助。 此外,存儲過程似乎不返回任何內容,所以'executeUpdate'應該只是'execute'。 –