Вставьте путь к файлу с \\ в MySQL, используя Java - PullRequest
2 голосов
/ 21 января 2011

Я делаю отдельное приложение, использующее Java, и в этом мне нужно вставить путь к изображению, которое пользователь выбирает из средства выбора файлов.Я получаю путь к файлу, но когда я сохраняю его в базе данных (mysql), он не сохраняет \, поэтому, когда я получаю этот путь, файл не отображается.

Как сохранить путь к файлу с \\, чтобы его можно было экранировать с помощью кода Java?

Я пытался использовать метод replaceall, но он выдает ошибку из-за недопустимого набора символов.

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

Но это не сработало.

Ответы [ 5 ]

5 голосов
/ 21 января 2011

Используйте подготовленный оператор для хранения пути, содержащего \. PreparedStatement ничего не экранирует

4 голосов
/ 21 января 2011

Поскольку String является неизменным, и все методы, которые вы вызываете, не изменяют внутреннее значение String s, а возвращают измененный результат, вам необходимо присвоить результат замены:Переменная.Кроме того, поскольку вы хотите заменить символы, а не шаблоны регулярных выражений, метод replace() более чем достаточен.replaceAll() принимает регулярное выражение, а \ также является специальным символом в регулярном выражении.

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

Однако в Windows прямая косая черта должна работать хорошо.*

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

Однако # 2, вы можете захотеть сохранить его в БД, используя PreparedStatement, который удаляет плохие и чувствительные к SQL-символам символы. Подготовьтесь здесь .


Независимо от конкретной проблемы, почему вы хотите сохранить путь к файлу в БД?Это подвержено ошибкам переносимости.Я бы предложил хранить только (уникальное) имя файла и иметь фактические файлы по одному общему пути, который настраивается в качестве параметра приложения.

0 голосов
/ 01 августа 2012

Мы также можем использовать функцию addslashes для сохранения пути к файлу,

addslashes($filepath)
0 голосов
/ 21 января 2011

Что касается ваших сообщений BalusC, но я думаю, что не могу согласиться с вами в одном. Действительно, строки являются неизменяемыми, но filename.replace ("a", "b") возвращает новый экземпляр строки.

Так что я думаю, что присвоение новой переменной не обязательно?

0 голосов
/ 21 января 2011

Косая черта не должна быть проблемой.Убедитесь, что ваш путь имеет косую черту, прежде чем вставлять в базу данных.Также убедитесь, что вы используете PreparedStatement для вставки данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...