Единственный символ, который необходимо экранировать в строковой константе SQL, - это одинарная кавычка по очевидной причине, что в противном случае его можно было бы спутать с концом строки.
Если вы используете JDBC PreparedStatement, тогда вопросительный знак сам по себе обозначает параметр. Вы бы написали что-то вроде
вставить в mytable (field1, field2) значения (?,?)
, а затем используйте операторы set для установки этих значений. Если вы заключите вопросительный знак в кавычки, то это должен быть просто другой символ в строке, т.е.
вставить в mytable (field1, field2) значения (?, '?')
имеет ОДИН параметр? и один строковый литерал '?'.
PreparedStatement.set выполнит необходимое экранирование кавычек. Если вы создаете запрос самостоятельно, вам нужно будет включить код для этого. (Просто удвойте цитату, например,
вставить в mytable (field1) значения («Боб сказал,« Привет »»)