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");
还不行,而是抛出的第二个参数的错误。
这真的很简单,但它总是返回一个空白值。
任何想法?
是一个单引号的问题呢?当我也尝试使用视图时,它出错了。 – oneofakind 2014-12-03 08:11:56
试过了,它在第二个参数上抛出一个错误:ERROR:语法错误处于或接近“$ 2” – oneofakind 2014-12-03 08:17:17
@oneofakind:不确定你对单引号问题的含义。我所显示的代码对我来说很有用,肯定有一些你不会告诉我们的。此外,您的错误消息也似乎不符合代码。在我的例子中没有$ 2 – 2014-12-03 08:32:45