【问题标题】:Insert Path of a file with \\ in mysql using java使用java在mysql中插入带有\\的文件路径
【发布时间】:2011-01-21 20:02:02
【问题描述】:

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

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

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

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

但这并没有成功。

【问题讨论】:

  • 您是打算在另一个Java应用程序中使用存储的路径,还是将其用于其他用途?

标签: java mysql file path


【解决方案1】:

使用 Prepared 语句存储包含 \.PreparedStatement 的路径不会转义任何内容

【讨论】:

    【解决方案2】:

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

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

    但是,正斜杠应该在 Windows 中同样有效。

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

    但是 #2,您可能希望使用 PreparedStatement 将其存储在 DB 中,它可以为您清除坏的和对 SQL 注入敏感的字符。 Prepare here.


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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          addslashes($filepath)
          

          【讨论】:

            猜你喜欢
            • 2012-12-02
            • 1970-01-01
            • 1970-01-01
            • 2011-07-05
            • 1970-01-01
            • 1970-01-01
            • 2012-02-26
            • 1970-01-01
            • 2016-11-23
            相关资源
            最近更新 更多