私はこのJDBC SQLクエリを持っている:JDBC:Oracleでどのように時間をクエリできますか?
select *
from table
where TX_DATE = {d '2009-01-05'} and TX_TIME = {t '15:23:39'}
これは、いくつかの行を返します。 OracleにはTIME型がないため、両方の列の型がDATEであることに注意してください。
しかし、私はJDBCパラメータを使用する場合、それは失敗します。
最初のパラメータはnew java.sql.Date(...)
であり、第二は
new java.sql.Time(...)
ある
select *
from table
where TX_DATE = ? and TX_TIME = ?
。私はstdoutに両方のパラメータを表示し、それらはよく見えるので、値は正しいです。しかし、私は行を取得しません。どうして? {t '15:23:39'}
とnew java.sql.Time()
の違いは何ですか?
public static void setParameters (final PreparedStatement stmt,
final Object... param)
{
for (int i=0; i<param.length; i++)
{
Object debug = param[i];
String type = null;
if (param[i] == null)
stmt.setString(i+1, null);
else if (param[i] instanceof java.sql.Time)
stmt.setTime (i+1, (java.sql.Time)param[i]);
私はsetTime()
にブレークポイントを設定したし、それが呼び出される:
[EDIT]ここPreparedStatement
を埋めるコードがあります。 param[1].toString()
は15:23:39
を出力するので、値が正しいことがわかります。
私は、OracleにはTIMEタイプがないため、ドライバにバグがあり、時刻のDATE部分は無視されないと考えられます。
私はテーブル全体にselect *
を使用している場合は、私はあなたが見えることができますように、時間の欄には、デフォルトでは、日付のように扱われ
TX_DATE TX_TIME
2009-01-08 2009-08-01
得ます。私はTO_CHAR(TX_TIME, 'HH24:MI:SS')
を使用している場合は、私が手:
TX_DATE TX_TIME
2009-01-08 15:23:39
は2009-08-01
はどこから来るのでしょうか?
ありがとうございます。私は何とか「今日の1月」の代わりに1つを指定しなければ、同じ「日」の部分を使用することを期待していました。 –