3

私はJavaが初めてです。FileChooserから選択したファイルパスをデータベースに挿入したい。しかし、そうしようとすると、パスはクエリステートメントまで正しく、データベースに入力した後、ファイルパスにあるすべてのバックスラッシュが削除されます。

filepath=f.getCanonicalPath();
// some database statements....
String query="insert into table1 values('" + filepath + "')";

選択したファイル パスが次の場合:

"C:\users\documents\hello.txt";

次のように挿入します。

「C:Usersdocumentshello.txt」

4

1 に答える 1

9

基本的に、そのように値を SQL に直接入れるべきではありません。

パラメータPreparedStatementを使用して値を設定する必要があります。エスケープは不要で、SQL インジェクション攻撃のリスクもありません。

String query = "insert into table1 values(?)";

PreparedStatement statement = connection.prepareStatement(query);
try {
   statement.setString(1, filePath);
   statement.executeUpdate();
} finally {
   statement.close();
}

ユーザー入力に基づいて SQL を動的に構築していることに気付いた場合は、一歩下がって、代わりにパラメーター化された SQL を強く検討する必要があります。(アプリが基本的に SQL 開発ツールである場合は例外です...)

于 2013-02-14T09:43:16.383 に答える