2017-06-25 4 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); 
    } 

} 

のために、この機能でそれを使用いけませんそれは私がjavaで使うことができる変数です、どうすればこのことができますか? ありがとうございます。

+1

上記のコードで何が問題なのかを明確にすることはできますか? –

+0

私はちょうどdateiffからの戻り値を取得し、それがjavaで使用できる変数になる必要がある何か間違っていないです。 –

+1

あなたの質問には関係ありませんが、クエリは 'DATEDIFF(DAY、StartDate、EndDate)よりも良いでしょう。 FROM CarOrder WHERE OrderID =? –

答えて

2

使用ResultSet

あなたはResultSetをキャプチャし、そのResultSet(この場合、単一の行)の行にアクセスする必要があります。クエリを実行している場合は、PreparedStatementexecuteQueryと電話すると、ResultSetが生成されます。

最新のtry-with-resources構文を使用して、データベースリソースを自動的に閉じます。 finally句を削除できます。その雑用があなたのために処理されるので、データベースリソースにcloseXXXを呼び出す必要はありません。

私はではありません。は、次のコード例を実行しようとしましたが、必要なものに近いと思います。私は代替のSELECT行をコメントでMartin Smithで提案しています。あなたの質問の中核ではないので、私は考えを入れていません。実際の作業のために

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

、また、私は1行のみ(whileループが正確に一度だけではなく、ゼロまたは複数回以上実行されていることを確認します)戻ったことを確認するテストです。これは、さまざまなデータベースのリソース(データソース、接続、PreparedStatementの、ResultSetの)、あなたはスタックオーバーフローの勉強/ IDEを置くとOracle Tutorial on JDBC mattersのいくつかのより多くの研究を行うには、いくつかの検索を行う必要がありますについてあなたに明確でない場合は

話題になっている。

0

クエリの結果をResultSetオブジェクトに格納し、{YOUR_RESULT_SET} .getYourDataType(columnNumber)を使用して適切な列の値を選択します。

関連する問題