2011-03-29 158 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'"); 

这可行。