2017-06-25 84 views
1

所以我有這個查詢使用MS SQL Server上的DATEDIFF函數?獲取日期差異的返回值?

SELECT DATEDIFF(DAY,(select StartDate from CarOrder where OrderID= 59),(select EndDate from CarOrder where OrderID= 59)) 

這項工作很好,結果是10,但我不知道如何獲得的返回值,並用它在這個函數的Java

public int getDateDiff(int OrderID){ 
    Connection conn = DBConnection.getConnection(); 
    int datediff; 
    String getdiffSQL = "SELECT DATEDIFF(DAY,(select StartDate from CarOrder where OrderID = ?) ,(select EndDate from CarOrder where OrderID= ?))"; 
    try { 
     PreparedStatement pstm = conn.prepareStatement(getdiffSQL); 
     pstm.setInt(1, OrderID); 
     pstm.setInt(2, OrderID);    
     int nRows = pstm.executeUpdate(); 
     return nRows; 
    } catch (SQLException ex) { 
     System.out.println("Error: " + ex.getMessage()); 
    } finally { 
     DBConnection.closeConnection(conn); 
    } 

} 

我希望它返回日期DIFF號碼,它是一個我可以在java中使用的變量,我該怎麼做? 謝謝。

+1

你能澄清一下你上面的代碼到底出了什麼問題嗎? –

+0

沒有任何錯誤,我只需要從datediff得到返回值,並將它變成我可以在java中使用的變量。 –

+1

與你的問題沒有關係,但查詢會更好,因爲'SELECT DATEDIFF(DAY,StartDate,EndDate) FROM CarOrder WHERE OrderID =?' –

回答

2

使用ResultSet

您需要捕獲ResultSet,並訪問ResultSet(在這種情況下,單排)的行。如果您正在執行查詢,請在PreparedStatement上致電executeQuery,從而生成ResultSet

使用現代的try-with-resources語法來自動關閉您的數據庫資源。您可以刪除finally子句;無需在您的數據庫資源上調用closeXXX,因爲該雜事是爲您處理的。

我有不是嘗試執行下面的代碼示例,但我希望它接近你所需要的。我正在使用Martin Smith評論中建議的備用SELECT行;我沒有考慮到這一點,因爲它不是你問題的核心。

String sql = "SELECT DATEDIFF(DAY , StartDate , EndDate) FROM CarOrder WHERE OrderID = ? ;" ; 

Integer diff = null ; 
try ( 
     Connection conn = myDataSource.getConnection() ; 
     PreparedStatement pstmt = conn.prepareStatement (sql) ; 
    ) { 
     pstmt.setInt(1 , orderId) ; 
     try ( 
      ResultSet rs = pstmt.executeQuery(sql) ; 
     ) { 
      while (rs.next ()) { 
       diff = rs.getInt(1) ; // Auto-boxing `int` to `Integer`. 
      } 
     } 
    } 
} catch (SQLException e) { 
    e.printStackTrace (); // Handle error condition however you see fit. 
} 

if(null == diff) { 
    System.out.println("mission failed.") ; 
} else { 
    System.out.println("mission succeeded. Diff is: " + diff) ; 
} 

對於實際工作中,我也測試,以確保我只有一個返回行(確保while循環運行恰好一次,而不是零或一次以上)。

如果您對各種數據庫資源(DataSource,Connection,PreparedStatement,ResultSet)不清楚,您應該放下IDE並對Oracle Tutorial on JDBC matters做更多的研究,並且對Stack Overflow進行一些搜索/學習關於這個話題。

0

將查詢結果存儲在ResultSet對象中,然後使用{YOUR_RESULT_SET} .getYourDataType(columnNumber)選擇適當列的值。