2009-12-16 17 views
0

我想調用這個存儲過程使用JDBC:如何逃生?字符JDBC調用存儲過程

sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

JDBC認爲?是爭論的佔位符。實際上它被SP用來輸入表名。我怎樣才能調用存儲過程?我試過這個:

CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(?)"); 
call.setString(1, "\"ALTER TABLE ? NOCHECK CONSTRAINT all\""); 
call.executeUpdate(); 

我在'@ P0'附近得到一個語法錯誤。我猜'@ P0'是?我怎樣稱呼這個SP?我正在使用SQL Server 2008 BTW。

回答

1

你說?應該是表名,所以你需要在調用Statement.executeUpdate()之前提供一個實際的表名。此時,JDBC驅動程序會告訴數據庫實際運行該語句,因此顯然需要綁定所有參數。

也許你的意思是這樣寫:

CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(?)"); 
call.setString(1, "AnActualTableName"); 
call.executeUpdate(); 

也許你的意思是這樣寫:

CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(\"ALTER TABLE ? NOCHECK CONSTRAINT all\")"); 
call.setString(1, "AnActualTableName"); 
call.executeUpdate(); 

我不知道到底是什麼sp_msforeachtable()是應該做的,但我知道在致電executeUpdate()

之前,您必須提供所有參數的值