2013-02-14 2 views
3

Я новичок в java. Я хочу вставить путь к файлу, выбранный из FileChooser в базу данных. Но когда я пытаюсь это сделать, путь верен до запроса и после ввода его в базу данных удаляет все обратные косые черты, присутствующие в пути к файлу.Вставка пути к файлу в базу данных удаляет

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

Если мой выбранный путь файла:

"C: \ Users \ Документы \ hello.txt";

Она вставляет его как:

"C: Usersdocumentshello.txt"

+1

вы можете показать нам больше своего кода? Я полагаю, что использование 'StringEscapeUtils.escapeSql' или надлежащего кода java-подготовки/привязки/выполнения поможет решить вашу проблему. – Najzero

+1

@Najzero: вам не нужно ничего * выходить *, если вы правильно используете параметризованный SQL. –

+1

@JonSkeet тот правильный. Изменено это или - и привязка/параметризация запросов предпочтительнее - отредактируйте, это пропустит ссылку на таблицы bobby. – Najzero

ответ

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 ...)

+0

Jon Skeet Я использую mysql, поэтому PreparedStatement показывает его под пакетом java.sql – sincerekamal

+1

@ user2057804: Пакет 'java.sql' - это обычный интерфейс JDBC, который будет поддерживать драйвер MySQL. Использование MySQL - это * не * причина не использовать PreparedStatement. –

+0

Спасибо всем за ответы. Моя особая благодарность [Najzero] (http://stackoverflow.com/users/1563305/najzero) за то, что она позволила мне узнать о ** StringEscapeUtils **, который помог наконец, что тоже легко. :) – sincerekamal

 Смежные вопросы

  • Нет связанных вопросов^_^