2015-05-14 2 views
0

Я пытаюсь выполнить запрос выбора, используя подготовленный оператор в Java. В разделе Where where im im для проверки состояния столбца типа Timestamp, как показано ниже.Использование Timestamp в java sql подготовленный оператор

String selectSQL = "select * from db.keycontacts WHERE CREATEDDATETIME>?"; 
PreparedStatement preparedStatement = connect.prepareStatement(selectSQL); 
preparedStatement.setTimestamp(1, convertStrToTimestamp(lastSyncTimeStamp)); 
resultSet = preparedStatement.executeQuery(selectSQL); 

// Функция для преобразования timestampString в java.sql.Timestamp

private java.sql.Timestamp convertStrToTimestamp(String dateTimeStr){ 

     java.sql.Timestamp timeStampDate = null; 
     try { 
      DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//2015-05-11 18:26:55 
      java.util.Date dateObj = (java.util.Date)formatter.parse(dateTimeStr); 
      timeStampDate = new Timestamp(dateObj.getTime()); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return timeStampDate; 
    } 

При выполнении запроса, получения следующего исключения.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 

Так где же именно здесь происходит не так?

благодарит заранее.

ответ

2

Удалить параметр из

resultSet = preparedStatement.executeQuery(selectSQL); 

и изменения в

resultSet = preparedStatement.executeQuery(); 

Запрос вы прошли в preparedStatement.executeQuery(selectSQL); имеет приоритет над запросом, переданному в connect.prepareStatement(selectSQL);, которая является простой строкой ("select * from db.keycontacts WHERE CREATEDDATETIME>?"), в которой вы устанавливаете любой параметр, чтобы была синтаксическая ошибка для ?

, и вы также можете сказать, что оператор готов к PreparedStatement preparedStatement = connect.prepareStatement(selectSQL);, так как executeQuery() унаследован от Statement, он выполнит запрос без его подготовки.

+0

Спасибо Akash за решение и объяснение. –

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