2013-04-14 61 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()。你应该打"set" methods of the PreparedStatement


编辑:

不,看看可用的方法。数据库列需要什么类型。如果你想要一个日期,使用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