1

私はこのコードの平和を持っています:

String query = "SELECT * FROM utilisateurs WHERE pseudo = '" +  pseudo.getText()+ "' AND password = '" + new String(password.getPassword()) + "'";

私の質問は次のとおりです。これらの変数を文字列と連結する他の方法はありませんか?

C# では、メソッド String.Format() メソッドを次のように使用していました。

String query = String.Format("SELECT * FROM utilisateurs WHERE pseudo = '{0}' AND password = '{1}'", pseudo.getText(), new String(password.getPassword()));
4

4 に答える 4

4

他の人が言ったように、String.formatは直接同等ですが、PreparedStatement代わりに a を使用する必要があります。ドキュメントから:

次のパラメータ設定例では、con はアクティブな接続を表します。

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                  SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)

PreparedStatementの代わりにa を使用するString.formatと、SQL インジェクションからコードを保護できます。

于 2013-05-14T20:54:02.693 に答える
1

Java には、文字列をフォーマットする同様の方法があります。String.format()

ただし、 を使用することを選択した場合は、ここPreparedStatementでドキュメントを読むことができます

ドキュメントから:

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
于 2013-05-14T20:52:57.420 に答える
0

他の人も言及しているように、あなたの質問に直接答えるには、String.Format を使用してください。.

ただし、この特定の例では、本当の答えは文字列置換を行うことではなく、SQL ステートメントで引数を使用することです。

何かのようなもの:

query = 
String query = "SELECT * FROM utilisateurs WHERE pseudo = ? AND password = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, pseudo.getText());
ps.setString(2, password.getPassword());
ResultSet rs = ps.executeQuery();
于 2013-05-14T20:57:29.217 に答える