java - 获取日期差异的返回值?

标签 java sql-server return datediff

所以我使用 DATEDIFF 有这个查询在 MS SQL Server 上运行吗?

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);
    }

}

我希望它返回日期差异编号,以便它成为我可以在 java 中使用的变量,我该怎么做? 谢谢。

最佳答案

使用结果集

您需要捕获 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 进行一些搜索/研究。

关于java - 获取日期差异的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44748050/

相关文章:

java - 为什么以及如何在 Java Web 应用程序中使用序列化?

sql - 插入后触发更新表列?

java - [Java]如何随机包含最大值和最小值,同时排除中间的数字

java - Okhttp Dispatcher 线程中出现异常

java - 使用 GAE Images Java API 时在本地转换图像

java - 我如何在java中动态解码xml?

python不能返回变量但可以打印

sql-server - 在 SQL Server 中转义字符串,以便在 LIKE 表达式中安全使用

sql - 需要帮助编写数据透视查询以从不同的选择语句中选择列

javascript - 如何在 JavaScript 中创建可链接函数?