updateデータテーブルによるcom.mysql.jdbc.exceptions.MySQLSyntaxErrorException:問題点


この問題は一重引用符'によって引き起こされた.
最初の文は次のとおりです.

String update = "update html_texts set news_fudan = '" + s + "' where id = '" + j + "'";
st.execute(update);

sは中国語の語句表記後の文字列で、中には単一引用符が含まれており、プログラム実行後にcom.mysql.jdbc.exceptions.MySQLSyntaxErrorException:You have error in you SQL syntaxが現れた.check the manual that corresponds to your MYSQL server version for the right syntax to use near.....
後でネットで調べてみると文字列sの中の一重引用符による問題で、PreparedStatementを使うのが望ましい.修正されたコードは次のとおりです.

PreparedStatement pst = (PreparedStatement) conn.prepareStatement("update html_texts set news_fudan = ? where id = ?"); 
pst.setString(1, s);
pst.setInt(2, j);   
pst.executeUpdate();

PreparedStatementインスタンスには、コンパイルされたSQL文が含まれます.これが文を「準備」させることです.PreparedStatementオブジェクトに含まれるSQL文には、1つ以上のINパラメータがあります.INパラメータの値はSQL文作成時に指定されていません.逆に、この文はINパラメータごとにプレースホルダとして疑問符(?)を保持します.各疑問符の値は、文が実行される前に、適切なsetXXXメソッドによって提供される必要があります.