2011-03-29 167 views
0

我有這個表:爲什麼我的SQL查詢失敗?

sportman 
{ 
    code int primary key, 
    date Date. 
} 

含值

code 10,   30,   50. 
date 1990-02-15, 1999-02-15, 2010-02-15. 

我在NetBeans寫了這個查詢:

resultSet = statement.executeQuery("select code from sportman " 
            + "where date = 1990-02-15"; 

但結果集是空的。有什麼問題,我該如何解決?

while(resultSet.next()) 
         { 
          x = resultSet.getString("code"); 
         } 

回答

1

1990-02-151973,而不是2月15日1990年

一個有用的調試方法在這些情況下是打印整個 SQL語句執行它之前。

一個好方法是使用一個PreparedStatement

PreparedStatement stmt = con.prepareStatement("select code from sportman where start = ?"); 
stmt.setDate(1, java.sql.Date.valueOf("1990-02-15"); 
resultSet = stmt.executeQuery(); 
+0

+1指出PreparedStatements – 2011-03-29 14:43:00

+0

它沒有奏效。 – 2011-03-29 14:47:31

+2

不是嗎?以什麼方式?請更精確一點。 – 2011-03-29 14:50:52

1

你確定這就是你的實際代碼?您應該從缺少的括號中獲得編譯錯誤,以致您的電話號碼爲executeQuery()。另外,1990-02-15不是String。那個錯誤是你的意思,「但結果集是空的」?

+0

不,這是真的,當我們把** + **,** 1990-02-15 **轉換爲字符串。 – 2011-03-29 14:49:56

+0

@mehdi,不,它不。它轉換爲1973年,這_then_被轉換成一個'字符串'。我現在看到約阿希姆在我面前指出,而我在另一個標籤中做了一些事情。 – Pops 2011-03-29 14:54:45

+0

是的你的權利。我編輯我的問題。感謝 – 2011-03-29 14:59:04

0

你沒有告訴我們哪個DBMS您使用,但如果你使用的是Oracle,你可能需要切斷部分時間是在Oracle DATE列的一部分:

PreparedStatement stmt = con.prepareStatement("select code from sportman where trunc(start) = ?"); 
stmt.setDate(1, java.sql.Date.valueOf("1990-02-15"); 
resultSet = stmt.executeQuery(); 
0
resultSet = statement.executeQuery("select code from sportman " 
           + " where date ='1990-02-15'"); 

這可行。