2013-04-14 2 views
0
query = "SELECT * FROM POST_COMMENT WHERE Post_date_time= ? AND Post_User= !;"; 
    query = query.replace("?", "'"+post.getDatetime()+"'"); 
    query = query.replace("!", Integer.toString(post.getPublisher().getID())); 

    PreparedStatement pstm = con.prepareStatement(query); 
    ResultSet rs = pstm.executeQuery(); 

Результирующий запрос выглядит следующим образомPreparedStatement не выполняется правильно

SELECT * FROM POST_COMMENT WHERE Post_date_time= '2013-04-12 07:20:34.0' AND Post_User= 378; 

который работает прямо в командной строке строку MySQL, но, когда запускается из подготовленного заявления выдает эту ошибку:

Exception in thread "main" 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 '07:20:34.0 AND Post_User=378' at line 1 

Но

pstm.setString(1, post.getDatetime()); 
pstm.setString(2, Integer.toString(post.getPublisher().getID())); 

является не работает.

определение Таблица

CREATE TABLE Post_Comment (
    Comment_ID INTEGER(7) NOT NULL, 
    Post_date_time DATETIME NOT NULL, 
    Post_User INTEGER(7) NOT NULL, 
    PRIMARY KEY(Comment_ID, Post_date_time, Post_User), 
    CONSTRAINT Post_Comment_Post 
    FOREIGN KEY (Post_User, Post_date_time) 
    REFERENCES Post (User, date_time) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT Post_Comment_Comment 
    FOREIGN KEY (Comment_ID) 
    REFERENCES Commentary (ID) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
) 
; 

Пожалуйста, помогите.

+0

Это то, что нужно использовать PreparedStatement – BlackJoker

+0

Удалить «;» в конце вашего запроса и повторите попытку. Также покажите определение таблицы post_comment. – Fergus

ответ

3

Посмотрите на the Java tutorials. Вы не должны использовать replace() поля, используя функции String.

Предполагается, что вы должны позвонить "set" methods of the PreparedStatement.


EDIT:

Нет, посмотрите на доступные методы. И какие типы столбцов базы данных ожидают. Если вам нужна дата, используйте setDate(), если вы хотите целое число, а затем используйте setInt(). Пример:

query = "SELECT * FROM POST_COMMENT WHERE Post_date_time = ? AND Post_User = ?;"; 

PreparedStatement pstm = con.prepareStatement(query); 
pstm.setDate(1, post.getDatetime()); 
pstm.setInt(2, post.getPublisher().getID()); 
ResultSet rs = pstm.executeQuery(); 

Также отметим, что запрос использует ? для как заполнители, а не !.

+0

pstm.setString (1, post.getDatetime()); pstm.setString (2, Integer.toString (post.getPublisher(). GetID())); Не работает. – Nausikaa

+0

@Nausikaa Являются ли столбцы базы данных VARCHAR? –

+0

1- Это не работает. – Nausikaa

3
query = "SELECT * FROM POST_COMMENT WHERE Post_date_time= ? AND Post_User= ?;"; 

PreparedStatement pstm = con.prepareStatement(query); 
pstm.setObject(1, post.getDatetime()); 
pstm.setObject(2, post.getPublisher().getID()); 
ResultSet rs = pstm.executeQuery(); 
+0

Не работает, но спасибо. – Nausikaa

+0

Извините, ребята, проблема была решена, как час назад, эрор пришел из другого цикла с оригинальной ошибкой, спасибо и извините. – Nausikaa

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