2017-06-25 87 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)选择适当列的值。