Как мне обрабатывать специальные символы в Java prepareStatement?

StackOverflow https://stackoverflow.com/questions/911822

  •  06-09-2019
  •  | 
  •  

Вопрос

В следующем SQL-запросе, использующем PreparedStatement класс:

String query_descrip = "insert into timitemdescription (itemkey, languageid, longdesc, shortdesc) values (?, 1033, ?,?)";
PreparedStatement pstmt2 = con.prepareStatement(query_descrip); 
pstmt2.setInt(1, rs4);
pstmt2.setString(2, itemdescription);
pstmt2.setString(3, itemdescription.substring(0,39));
pstmt2.executeUpdate();       

Иногда в описаниях товаров я использую апострофы и одинарные и двойные кавычки.например, моя последняя проблема с одним элементом - это монитор "Planar 22"".Конечно, строка была неправильно истолкована и считалось, что значение описания было просто "Planar 22".Каков наилучший способ обработки специальных символов в строке?

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

ДАТА ОБНОВЛЕНИЯ После некоторого более тщательного тестирования выяснилось, что в моем коде возникло больше проблем.это также была проблема с кодировкой URL.Когда html-форма заполнялась кодом jsp, он пытался переместить поле описания в онлайн-форму, но усекал его там, в форме, а не в запросе.jTDS также исправила проблему с получением специальных символов.Поскольку jTDS - это jar, это также помогло избежать перезагрузки компьютера.Я назначу награду потоку jTDS, поскольку это было то, что я частично использовал.

заранее спасибо

Это было полезно?

Решение

Поскольку вы используете PreparedStatement, вам вообще ничего не нужно делать, это будет обработано за вас драйвером JDBC.Единственное, на что вам нужно обратить внимание, это символы, отличные от ASCII, в частности, вы должны убедиться, что таблицы DB используют кодировку для текстовых столбцов, которая может обрабатывать все символы, которые вы собираетесь использовать.Но это проблема SQL, а не проблема Java.

Другие советы

Вам не нужно специально обрабатывать эти символы, если вы привязываете их в качестве параметров к PreparedStatement, как вы это делаете.Это одно из главных преимуществ подхода, основанного на подготовленном заявлении.

Как уже говорили другие, вам не нужно ничего делать для обработки специальных символов.Вам нужно попробовать другой драйвер JDBC.

Попробуйте использовать Драйвер jTDS и посмотрите, поможет ли это вам с вашим подготовленным заявлением.Это драйвер базы данных с открытым исходным кодом для SQL Server.Сейчас я использую его на работе, и он работает как чемпион и фактически соответствует спецификации JDBC в отличие от драйвера MS.

Я совершенно уверен, что проблема не в коде, который вы опубликовали.Чтобы помочь устранить неполадки:

  1. Вы пробовали запускать приведенный выше фрагмент кода в отладчике?Каково значение "itemdescription" перед передачей его в вызов базы данных?
  2. Как вы на самом деле проверяете значение в базе данных?Это что, еще один Java-код?Или вы смотрите на это с помощью SQLCMD или что-то в этом роде?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top