2012-09-02 100 views
0

我有存儲過程,根據任何給定的輸入(任何生物數據,例如血型,名稱,身份證號等等,需要近26個輸入)來搜索人員。存儲過程沒有給出java代碼的準確結果

我正在執行一個存儲過程(SQL服務器)從Java使用Callable Statementpreparecall方法。以前我有一個問題,即當字符串輸入在其許多輸入參數之一中傳遞時,我的存儲過程沒有給出任何結果(0行結果)。另一方面,當通過任何整數類型參數值時,但當我將jdbc驅動程序從jdbc:odbc驅動程序更改爲sqlserver驅動程序 (driver name=com.microsoft.sqlserver.jdbc.SQLServerDrive)時,問題得到了解決。

現在我的新問題是,當我的程序procSearch2,即以16個輸入,運行它給出的結果與jdbc驅動程序(改變一個)的相同Connection變量完全正常,但其他程序,其中有27個輸入(procSearch1)即使通過intstring輸入值也未給出任何結果。

它不會給出任何錯誤,它只是返回我0行結果,它應該返回3行結果。

這裏是代碼

CallableStatement stmt=connect.prepareCall("{CALL procSearch1(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"); 
stmt.setInt(1,0); 
stmt.setString(2,""); 
stmt.setString(3,""); 
. 
. 
. 
stmt.setInt(27,0); 
ResultSet result=stmt.executeQuery(); 

if(result!=null) 
{ 
    System.out.println(result.getRow()); 
    while(result.next) 
    { 
    System.out.println(result.getString("Name")); 

    } 

} 
+1

你試過從後端執行第二個過程,看它是否返回任何數據? – user75ponic

+0

是的,我調試每一行,並檢查我的procSearch2給出結果,但procSearch1 doesnot。它根據sp在sql server中運行的時間返回空行,它應該返回3行。 –

回答

0

您需要設置輸出paramater到CallableStatement的讀取SP的返回值。 像這樣的東西(略去了異常處理):

CallableStatement stmt = connection.prepareCall("{? = call procSearch1(?,?,?) }"); 
stmt.registerOutParameter(1, java.sql.Types.INTEGER); 
stmt.setString(2, "abc"); 
stmt.setString(3, "xyz"); 
stmt.execute(); 
Integer sp_return_value = stmt.getInt(1); 

編輯: 基於您的評論,如果你的SP返回一個選擇,即一個結果的結果,我認爲你需要使用的語句。 execute()而不是executeQuery()。

請參閱http://msdn.microsoft.com/en-us/library/ms378630.aspx & http://msdn.microsoft.com/en-us/library/ms378487.aspx

所以,你的代碼應該是這樣的:

CallableStatement stmt=connect.prepareCall("{CALL procSearch1(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"); 
stmt.setInt(1,0); 
stmt.setString(2,""); 
stmt.setString(3,""); 
. 
. 
. 
stmt.setInt(27,0); 
ResultSet result = stmt.execute(); 

if(result!=null) { 
    System.out.println(result.getRow()); 
    while(result.next) { 
     System.out.println(result.getString("Name")); 
    } 
} 
+0

sp有5個返回的輸出值(一個表的5列)一些字符串和一些整數值。爲此,我不得不添加1個輸出參數?在調用proc語法之前,即「{?= call procSearch1(?,?,?,?)}」。而且我所討論的另一個過程即使不使用registerOutParameter()或定義輸出參數,也可以給出非常好的結果。 –

+0

我did ** ResultSet結果= stmt.execute(); **但它給了我相同的結果0行結果時,我打印** System.out.println(result.getRow()); **內部結果!=空塊。另外m執行語句後打印stmt.getUpdateCount(),它給了我** - 1 **結果 –