2013-11-19 5 views
1

Я пытаюсь сохранить закодированный маршрут Google Maps в моей базе данных Postgres. Когда я делаю это с помощью своего сервлета с JDBC, я получаю следующее исключение. Это происходит, когда API пытается проанализировать строку, которую я вставляю. Однако, когда я непосредственно вставляю значение в таблицу базы данных, он работает без жалоб.JDBC Malformed Unicode Exception

org.postgresql.util.PSQLException: ERROR: invalid Unicode escape 
     Hint: Unicode escapes must be \uXXXX or \UXXXXXXXX. 
     Position: 123 

Часть значения, для которого брошена это исключение:

}[email protected]`[email protected]@[email protected]}[email protected][email protected]@[email protected]@[email protected]@[email protected][email protected]@?OBKHI`@[email protected]\\[email protected]@[email protected][email protected][[email protected]@ROxJ?^[email protected][email protected]}HRcQFuHH{[email protected][email protected]{@[email protected][email protected]@GiBLEoAOkBC{@[email protected]{[email protected]@H[[email protected]@[email protected]@[email protected]{DjAqELUX][email protected]}@|@kB`CmEjCcFnAaD`@mAV}@`@[email protected]\\[email protected]}[email protected]`@[email protected]{[email protected] 
+0

Зачем вам нужно значение такого синтаксиса? Почему бы не использовать что-то вроде base-64? – hexafraction

ответ

3

Это происходит, когда API пытается разобрать строку, которую я вставить.

Я думаю, вы имеете в виду, что это происходит, когда он пытается проанализировать SQL, в который вы вставляете строку, не так ли?

Используйте PreparedStatement и используйте его должным образом.

+0

Большое спасибо. Раньше я использовал PreparedStatement. Однако я не использовал его правильно. Теперь значение сохраняет штраф. –

2

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

Использование параметров инструкции позволит избежать:

  • проблемы со специальными символами
  • и, таким образом, также SQL инъекции
+1

Большое спасибо за разъяснение и разъяснение меня по значению PreparedStatements при обработке специальных символов. –

-1

JDBC интерпретирует этот раздел Строка \uCPaAf как попытка на ввод в юникода. Вам нужно удвоить выход из предыдущего \\, чтобы он стал \\\\uCPaAf