java - 执行PreparedStatement select失败

标签 java sql sqlite jdbc prepared-statement

我正在尝试使用preparedStatements从表IsSELECTED中选择一条记录。我的表有 3 个字段(日期 (DATETIME)、早上 (BOOL)、中午 (BOOL)、晚上 (BOOL))和一条包含这些值的记录 (2013-12-12, 0 , 0, 0)。我的方法尝试选择具有给定日期的记录。

     public void getTodayInfo(HttpSession session, String date) 
        throws ClassNotFoundException, SQLException{
    System.out.println("flag1"); 
    String sq = "SELECT date, morning, noon, night FROM IsSELECTED WHERE date='?'";

    try {       
        System.out.println("flag2");
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getConnection(path);            
        stm = c.prepareStatement(sq);
        stm.setString(1, date);            
        System.out.println("flag3");
        ResultSet rs = stm.executeQuery(sq);
        while (rs.next()) {
            System.out.println("flag4");
            Shift s = new Shift(rs.getString(date), rs.getBoolean("morning"), rs.getBoolean("noon"), rs.getBoolean("night"));
            System.out.println("flag5" + s.toString());
            session.setAttribute("shiftsToday", s);
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    } finally {
        if (stm != null)
            stm.close();
        if (c != null)
    c.close();
    }

    System.out.println("Goodbye!");

}   

什么也没发生。我放置了一些 System.out.println 来查看问题出在哪里,然后我得到了这个

flag1 
flag2

假设它与任何记录都不匹配(但无论如何我都看到我的表包含此记录)为什么不打印 flag3

最佳答案

您不需要在 ? 周围包含 ',只需使用 date = ?

还可以使用:

ResultSet rs = stm.executeQuery();

而不是

ResultSet rs = stm.executeQuery(sq);

关于java - 执行PreparedStatement select失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752925/

相关文章:

java - Shazamcrest 定制搭配系列

sql - 我想将 ROLLUP 与 PIVOT 结合使用 - 这是一个选项吗?

mysql - 查询需要更多时间来执行

java - SQLiteDatabase 多线程锁定模式

java - 从 Infinite Stream 派生的排序流无法迭代

java - 从 cmd 运行 Jar 相关的 .Java

java - 有没有办法在不使用相机方法的情况下在 Android 中使用手电筒?

mysql - 如何从最近的记录中选择值?

mysql - 如何向 SQLite Studio 中的表添加数据? (发生错误)

android - 将 SQLite 与外部 SQL 数据库服务器同步