使用java在mysql中使用\\插入文件的路径

时间:2011-01-21 20:02:02

标签: java mysql file path

我正在使用java创建一个独立的应用程序,并且我需要插入用户从文件选择器中选择的图像的路径。 我正在获取文件的路径,但是当我将它存储在数据库(mysql)中时,它不存储\,因此当我检索该路径时,文件不会显示。

如何使用\\存储文件的路径,以便使用java代码对其进行转义?

我尝试使用replaceall方法,但它给出了非法字符集的错误。

filename.replaceall("\","\\");

但这没有成功。

5 个答案:

答案 0 :(得分:5)

使用Prepared语句存储包含\的路径。PreparedStatement不会逃避任何事情

答案 1 :(得分:4)

由于String是不可变的,并且您调用的所有方法都不会更改String的内部值,而是返回修改后的结果,因此您需要指定替换为变量的结果。此外,由于您需要替换字符而不是正则表达式模式,replace()方法绰绰有余。 replaceAll()采用正则表达式,\也是正则表达式中的特殊字符。

filename = filename.replace("\\", "\\\\");

但是,正斜杠应该在Windows中运行良好。

filename = filename.replace("\\", "/");

但是#2,您可能希望使用PreparedStatement将其存储在数据库中,它会消除对您的错误和SQL注入敏感字符的清理。 Prepare here


与具体问题无关,您为什么要将文件路径存储在数据库中?这容易出现可移植性错误。我建议只存储(唯一的)文件名,并将实际文件放在一个可配置为应用程序设置的公共路径中。

答案 2 :(得分:0)

斜线应该不是问题。在插入数据库之前,请确保您的路径有斜杠。还要确保使用PreparedStatement插入数据。

答案 3 :(得分:-1)

关于你的帖子BalusC,但我想我不能同意你的一件事。确实,字符串是不可变的,但是filename.replace(“a”,“b”)返回字符串的新实例。

所以我认为没有必要分配新变量?

答案 4 :(得分:-1)

我们还可以使用addslashes函数来保存文件路径,

addslashes($filepath)