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 回答