PreparedStatement select 的执行失败
Execution of PreparedStatement select fails
我正在尝试使用 preparedStatements select 来自 table IsSELECTED
的记录。我的 table 有 3 个字段(日期 (DATETIME)、morning(BOOL)、noon(BOOL)、night(BOOL))和一个包含这些值的记录(2013-12-12、0、0、0)。我的方法尝试 select 给定日期的记录。
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
让我们假设它与任何记录都不匹配(但无论如何我看到我的 table 有这条记录)为什么没有打印 flag3
?
您不需要在 ?
周围包含 '
,只需使用 date = ?
。
同时使用:
ResultSet rs = stm.executeQuery();
而不是
ResultSet rs = stm.executeQuery(sq);
从您的查询中删除 '
左右 ?
。
String sq = "SELECT date, morning, noon, night FROM IsSELECTED WHERE date=?";
执行时无需再次传递查询。
ResultSet rs = stm.executeQuery();
在 rs.getString(date)
中的日期前后还包括 "
Shift s = new Shift(rs.getString("date"), rs.getBoolean("morning"), rs.getBoolean("noon"), rs.getBoolean("night"));
注意:如果日期是数据库中的日期字段,则应使用 setDate、getDate 方法。
我正在尝试使用 preparedStatements select 来自 table IsSELECTED
的记录。我的 table 有 3 个字段(日期 (DATETIME)、morning(BOOL)、noon(BOOL)、night(BOOL))和一个包含这些值的记录(2013-12-12、0、0、0)。我的方法尝试 select 给定日期的记录。
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
让我们假设它与任何记录都不匹配(但无论如何我看到我的 table 有这条记录)为什么没有打印 flag3
?
您不需要在 ?
周围包含 '
,只需使用 date = ?
。
同时使用:
ResultSet rs = stm.executeQuery();
而不是
ResultSet rs = stm.executeQuery(sq);
从您的查询中删除 '
左右 ?
。
String sq = "SELECT date, morning, noon, night FROM IsSELECTED WHERE date=?";
执行时无需再次传递查询。
ResultSet rs = stm.executeQuery();
在 rs.getString(date)
"
Shift s = new Shift(rs.getString("date"), rs.getBoolean("morning"), rs.getBoolean("noon"), rs.getBoolean("night"));
注意:如果日期是数据库中的日期字段,则应使用 setDate、getDate 方法。