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();

結果のクエリは次のようになります

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
)
;

助けてください。

4

2 に答える 2

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();
于 2013-04-14T04:11:35.643 に答える
3

Java チュートリアルをご覧ください。replace()String 関数を使用してフィールドを使用することは想定されていません。

PreparedStatement の「set」メソッドを呼び出すことになっています。


編集:

いいえ、利用可能な方法を見てください。また、データベースの列が期待する型。日付が必要な場合は を使用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();

また、クエリでは、 ではなく両方のプレースホルダーを使用?していることにも注意してください。!

于 2013-04-14T04:11:48.727 に答える