2015-06-10 2 views
0

Я пытаюсь выбрать запись из таблицы IsSELECTED, используя подготовленные записи. Моя таблица имеет 3 поля (дата (DATETIME), утро (BOOL), полдень (BOOL), ночь (BOOL)) и одна запись с указанными значениями (2013-12-12, 0, 0, 0). Мой метод пытается выбрать запись с указанной датой.Выполнение выбора PreparedStatement не выполняется

 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 ISN» t напечатано?

+0

Измените 'SQLException' на' Exception' и посмотрите, что произойдет. Уверен, что исключение не выбрасывается? Выходит ли 'Goodbye'? – Antoniossss

+0

date = trunc (?); Также вы должны использовать rs.getDate, если ваш столбец имеет тип Date. – drgPP

+1

Я предполагаю, что это должно быть 'getString (" date ")' –

ответ

2

' Удалить подарок вокруг ? из вашего запроса.

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.

+1

Передача запроса 'executeQuery' в' PreparedStatement' должна запускать 'SQLException' (см. Документ API). –

5

Вам не нужно включать ' вокруг ?, используйте только date = ?.

использовать также:

ResultSet rs = stm.executeQuery(); 

вместо

ResultSet rs = stm.executeQuery(sq); 
+0

затем я получаю это сообщение журнала 'flag1 flag2 flag3 не реализован драйвером JDBC SQLite свиданья!' – yaylitzis

+1

Почему дата строки? Разве вы не хотите setDate? Это плохо написанный код. Вы получите больше информации из системы, если вы напечатаете трассировку стека в блоке catch. Имена таблиц и столбцов, которые являются ключевыми словами SQL (например, «дата»), задают проблемы. Попробуйте переименовать в «shiftDate». – duffymo

+0

Если вы хотите передать дату как String, вы должны преобразовать ее, используя to_date functon of SQL, типы должны быть одинаковыми! – drgPP

Смежные вопросы