Java jdbc PreparedStatement使用HAVING子句绑定查询参数

Java jdbc PreparedStatement使用HAVING子句绑定查询参数,java,sqlite,jdbc,Java,Sqlite,Jdbc,为什么我会得到一个空的结果集: int numberOfEvents = 5; long starttime = 1511655677248; long endtime = 1511684405497; String query = "SELECT NAME FROM EVENTS WHERE TIME >= ? AND TIME <= ? GROUP BY NAME HAVING COUNT(*) > ? ;"; try (Connection connection =

为什么我会得到一个空的结果集:

int numberOfEvents = 5;
long starttime = 1511655677248;
long endtime = 1511684405497;


String query = "SELECT NAME FROM EVENTS WHERE TIME >= ? AND TIME <= ? GROUP BY NAME HAVING COUNT(*) > ? ;";
try (Connection connection = DBManager.getConnection(); PreparedStatement statement = connection.prepareStatement(query);) {
    statement.setLong(1, starttime);
    statement.setLong(2, endtime);
    statement.setInt(3, numberOfEvents);
    List<String> ids = new ArrayList<>();
    ResultSet rs = statement.executeQuery();
    while (rs.next()) {
        ids.add(rs.getString("NAME"));
    }
    return ids;
} catch (SQLException e) {
    throw new MessageException(e);
}
int numberOfEvents=5;
长起始时间=1511655677248;
long-endtime=1511684405497;
String query=“从时间>=?和时间?;”的事件中选择名称;
try(Connection Connection=DBManager.getConnection();PreparedStatement=Connection.preparest陈述(query);){
陈述。setLong(1,开始时间);
语句.setLong(2,endtime);
statement.setInt(3,numberOfEvents);
列表ID=新的ArrayList();
ResultSet rs=语句。executeQuery();
while(rs.next()){
add(rs.getString(“NAME”);
}
返回ID;
}捕获(SQLE异常){
抛出新的MessageException(e);
}
但通过这一点,我得到了预期的结果:

String query = "SELECT NAME FROM EVENTS WHERE TIME >= 1511655677248 AND TIME <= 1511684405497 GROUP BY NAME HAVING COUNT(*) > 5 ;";
try (Connection connection = DBManager.getConnection(); PreparedStatement statement = connection.prepareStatement(query);) {
    List<String> ids = new ArrayList<>();
    ResultSet rs = statement.executeQuery();
    while (rs.next()) {
        ids.add(rs.getString("NAME"));
    }
    return ids;
} catch (SQLException e) {
    throw new MessageException(e);
}
long starttime = 1511655677248;
long endtime = 1511684405497;
int numberOfEvents = 5;
String query = "SELECT NAME FROM EVENTS WHERE TIME >= ? AND TIME <= ? GROUP BY NAME HAVING COUNT(*) > " + Integer.toString(numberOfEvents) + " ;";
try (Connection connection = DBManager.getConnection(); PreparedStatement statement = connection.prepareStatement(query);) {
    statement.setLong(1, starttime);
    statement.setLong(2, endtime);
    List<String> ids = new ArrayList<>();
    ResultSet rs = statement.executeQuery();
    while (rs.next()) {
        ids.add(rs.getString("NAME"));
    }
    return ids;
} catch (SQLException e) {
    throw new MessageException(e);
}
String query=“从时间>=1511655677248和时间5的事件中选择名称;”;
try(Connection Connection=DBManager.getConnection();PreparedStatement=Connection.preparest陈述(query);){
列表ID=新的ArrayList();
ResultSet rs=语句。executeQuery();
while(rs.next()){
add(rs.getString(“NAME”);
}
返回ID;
}捕获(SQLE异常){
抛出新的MessageException(e);
}
这也给了我同样的预期结果:

String query = "SELECT NAME FROM EVENTS WHERE TIME >= 1511655677248 AND TIME <= 1511684405497 GROUP BY NAME HAVING COUNT(*) > 5 ;";
try (Connection connection = DBManager.getConnection(); PreparedStatement statement = connection.prepareStatement(query);) {
    List<String> ids = new ArrayList<>();
    ResultSet rs = statement.executeQuery();
    while (rs.next()) {
        ids.add(rs.getString("NAME"));
    }
    return ids;
} catch (SQLException e) {
    throw new MessageException(e);
}
long starttime = 1511655677248;
long endtime = 1511684405497;
int numberOfEvents = 5;
String query = "SELECT NAME FROM EVENTS WHERE TIME >= ? AND TIME <= ? GROUP BY NAME HAVING COUNT(*) > " + Integer.toString(numberOfEvents) + " ;";
try (Connection connection = DBManager.getConnection(); PreparedStatement statement = connection.prepareStatement(query);) {
    statement.setLong(1, starttime);
    statement.setLong(2, endtime);
    List<String> ids = new ArrayList<>();
    ResultSet rs = statement.executeQuery();
    while (rs.next()) {
        ids.add(rs.getString("NAME"));
    }
    return ids;
} catch (SQLException e) {
    throw new MessageException(e);
}
long starttime=1511655677248;
long-endtime=1511684405497;
int numberOfEvents=5;
String query=“从事件中选择名称,其中时间>=?和时间“+整数.toString(numberOfEvents)+”;”;
try(Connection Connection=DBManager.getConnection();PreparedStatement=Connection.preparest陈述(query);){
陈述。setLong(1,开始时间);
语句.setLong(2,endtime);
列表ID=新的ArrayList();
ResultSet rs=语句。executeQuery();
while(rs.next()){
add(rs.getString(“NAME”);
}
返回ID;
}捕获(SQLE异常){
抛出新的MessageException(e);
}
所以我认为最后一个参数有问题。在HAVING条款中使用参数是否有特殊要求或限制?我正在使用sqldroid1.0.3