2014-12-03 61 views
0

我一直在测试代码一遍又一遍地发现问题是单引号。正如你在下面的查询中看到的那样,我在where子句中使用了单引号。如果我删除了,我得到了一个结果,但如果我把它放回来,即使是满足过滤器的行,它也不会返回任何东西。我也试图用这个观点。将where子句放在视图中并直接选择视图而不使用任何过滤器。它仍然不会返回任何东西。Java JDBC Postgres:选择单引号

try { 
    Class.forName("org.postgresql.Driver").newInstance(); 
    Connection Conn = DriverManager.getConnection("jdbc:postgresql://{ipaddress}/database?user=postgres&password=password"); 

    Statement Stmt = Conn.createStatement(); 
    String sqlCommand = "SELECT col1_timestamp , col2 FROM table WHERE col1_timestamp > '00:01:00' "; 

    ResultSet RS = Stmt.executeQuery(sqlCommand); 

    while (RS.next()) { 
     data.add(RS.getInt("col1_timestamp ") 
       + "=>" + RS.getString("col2")); 
    } 
    // Clean up after ourselves 
    RS.close(); 
    Stmt.close(); 
    Conn.close(); 
} 
catch (SQLException E) { 
    System.out.println("SQLException: " + E.getMessage()); 
    System.out.println("SQLState:  " + E.getSQLState()); 
    System.out.println("VendorError: " + E.getErrorCode()); 
} 
catch(Exception ex) 
{ 
    System.out.println(ex.getMessage()); 
} 

我也已经尝试过:

String sqlCommand = "SELECT col1_timestamp, col2 FROM table " 
       + " WHERE col2= ? AND (now() - col1_timestamp::timestamp with time zone) < interval ? "; 

     PreparedStatement preparedStatement = Conn.prepareStatement(sqlCommand); 
     preparedStatement.setString(1, "test"); 
     preparedStatement.setTime(2, new Time(new Long(-28680000))); //String(2, "00:02:00"); 

还不行,而是抛出的第二个参数的错误。

这真的很简单,但它总是返回一个空白值。

任何想法?

回答

1

间隔文字都相当有限(在SQL在一般和Postgres的),你不能使用参数的区间字面

单位如果你总是有相同的单位(如分钟)你可以做这样的事情:

String sqlCommand = 
    "SELECT col1_timestamp, col2 FROM table " + 
    " WHERE col2= ? " + 
    " AND (now() - col1_timestamp::timestamp with time zone) < interval '1' minute * ?"; 

PreparedStatement preparedStatement = Conn.prepareStatement(sqlCommand); 
preparedStatement.setString(1, "test"); 
preparedStatement.setInt(2, 5); // five minutes 

如果需要查询不同的单位(小时,分,天),那么您可能需要使用分钟的选择恰当的数量为他们每个人或更改SQL每次: interval '1' day * ?interval '1' hour * ?

+0

是一个单引号的问题呢?当我也尝试使用视图时,它出错了。 – oneofakind 2014-12-03 08:11:56

+0

试过了,它在第二个参数上抛出一个错误:ERROR:语法错误处于或接近“$ 2” – oneofakind 2014-12-03 08:17:17

+0

@oneofakind:不确定你对单引号问题的含义。我所显示的代码对我来说很有用,肯定有一些你不会告诉我们的。此外,您的错误消息也似乎不符合代码。在我的例子中没有$ 2 – 2014-12-03 08:32:45