2016-11-18 106 views
2

我想在語句不返回結果集時處理SQLServerException。我對java還是個新手,所以我無法找出解決的辦法。請任何人都可以建議我如何解決這個錯誤?我遇到困難的地方是這個存儲過程沒有返回任何結果集,我想顯示「沒有找到記錄」之類的東西。我該如何解決它?如何解決「語句沒有返回結果集錯誤」?

stmt = conn.prepareCall("{call p_GetAllowedPublicIPs(?,?,?)}"); 

@Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     //processRequest(request, response); 
     PrintWriter out = response.getWriter(); 
     String IsLoginDisabled = null; 
     String BankID =null; 
     String publicip=null; 
     try { 
      //processRequest(request, response); 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection conn = null; 
      CallableStatement myStmt = null; 
      int count =0; 

      conn = DriverManager.getConnection("jdbc:sqlserver://MPESA\\SQL2012;user=realm;password=friend;database=ElmaTest"); 

      if(conn!=null) 
      { 
       out.println("Connection Succcesful"); 
      myStmt = conn.prepareCall("{call sp_GetPortalUser(?,?,?)}"); 

       myStmt.setString("Country", "Kenya"); 
       myStmt.setString("BankName", "CS"); 
       myStmt.setString("UserID", "Frank"); 

       ResultSet rs= myStmt.executeQuery(); 
       while(rs.next())  
       { 
        count++; 
        BankID = rs.getString("BankID"); 
        String employeeid= rs.getString("EmployeeID"); 
        String FirstName = rs.getString("FirstName"); 
        String LastName= rs.getString("LastName"); 
       String MiddleName = rs.getString("MiddleName"); 
       String Address = rs.getString("Address"); 
        String MobileNumber= rs.getString("MobileNumber"); 
        String Emailid = rs.getString("EmailID"); 
        String TypeofID= rs.getString("TypeOfID"); 
       String IDNumber = rs.getString("IDNumber"); 
       String ipaddress = rs.getString("IPAddress"); 
       IsLoginDisabled = rs.getString("isLoginDisabled"); 
       String LoginFailureIPaddress = rs.getString("LoginFailureIPAddress"); 



        System.out.println("count"+count); 
        System.out.println("BankID" +BankID); 
        System.out.println("EmployeeId"+employeeid); 
        System.out.println("FirstName"+FirstName); 
        System.out.println("MiddleName"+MiddleName); 
        System.out.println("LastName"+LastName); 
        System.out.println("Address"+Address); 
        System.out.println("MobileNumber"+MobileNumber); 
        System.out.println("EmailId"+Emailid); 
        System.out.println("TypeoFiD"+TypeofID); 
        System.out.println("Idnumber"+IDNumber); 
        System.out.println("ipaddress"+ipaddress); 
        System.out.println("isLoginDisabled"+IsLoginDisabled); 
        System.out.println("LoginFailureIPaddress"+LoginFailureIPaddress); 







       } 

      if(count>0) 
       { 
        int logindisabled = Integer.valueOf(IsLoginDisabled); 
        CallableStatement stmt = null; 
        if (logindisabled!=1) 
        { 
         try { 
          stmt = conn.prepareCall("{call p_GetAllowedPublicIPs(?,?,?)}"); 
         } catch (SQLException ex) { 
          Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex); 
         } 
        stmt.setString("Country", "Kenya"); 
        stmt.setString("BankID", "99"); 
        stmt.setString("PublicIP", "1"); 
        ResultSet rp = stmt.executeQuery(); 
        // System.out.println(rp.next()); 
        while(rp.next()) 
        { 
         String ipaddress = rp.getString("IPAddress"); 
         System.out.println("ipaddress"+ipaddress); 
        } 



        } 
      } 





     } 
     } catch (ClassNotFoundException | SQLException ex) { 
      Logger.getLogger(Search.class.getName()).log(Level.SEVERE, null, ex); 
     } 









    } 
+0

改用'myStmt.execute()'。 –

+0

請添加存儲過程的代碼。 – Berger

回答

3

事實上,你的程序沒有提出任何例外情況是,有沒有結果也不例外。

您可以使用CallableStatement的execute()方法。 execute方法將返回一個布爾值,指示是否存在與執行請求相對應的ResultSet。

鏈接的Javadoc:https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#execute()

你仍然可以得到超類聲明的的getResultSet方法ResultSet中:https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#getResultSet()

在你的情況,你會做以下幾點:

boolean gotResults = myStmt.execute(); 
ResultSet rs = null; 
if(!gotResults){ 
    System.out.println("No results returned"); 
} else { 
    rs = myStmt.getResultSet(); 
} 
1

我面臨同樣的問題,經過一番研究,我知道我們必須包括

CREATE PROCEDURE {proc_name} (parameters) 
AS 
BEGIN 

SET NOCOUNT ON 

........... 

----your sqloperations 

END 

開始你的程序後,你必須包含上面的sql語句,那麼問題將得到解決。

+0

修復您的格式 – AK47

相關問題