Привет, мне было интересно, можно ли выполнить что-то подобное с помощью JDBC, поскольку в настоящее время он предоставляет исключение, хотя это возможно в браузере запросов MySQL.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Хотя я понимаю, что это возможно, если строка запроса SQL будет разделена, а оператор будет выполнен дважды, но мне было интересно, есть ли для этого одноразовый подход.
String url = "jdbc:mysql://localhost:3306/";
String dbName = "databaseinjection";
String driver = "com.mysql.jdbc.Driver";
String sqlUsername = "root";
String sqlPassword = "abc";
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url+dbName, sqlUsername, sqlPassword);
allowMultiQueries=true
.Ответы:
Мне было интересно, можно ли выполнить что-то подобное с помощью JDBC.
Да, это возможно. Насколько я знаю, есть два пути. Они есть
Следующие примеры демонстрируют две вышеуказанные возможности.
Пример 1 : (Чтобы разрешить несколько запросов):
При отправке запроса на подключение вам необходимо добавить свойство подключения
allowMultiQueries=true
к URL-адресу базы данных. Это дополнительное соединение свойство для тех , если уже существует какой - то, какautoReConnect=true
и т.д .. Приемлемые значения дляallowMultiQueries
собственностиtrue
,false
,yes
, иno
. Любое другое значение отклоняется во время выполнения с расширениемSQLException
.Если такая инструкция не передана,
SQLException
выдается сообщение.Вы должны использовать
execute( String sql )
или другие его варианты для получения результатов выполнения запроса.Для перебора и обработки результатов вам потребуются следующие шаги:
Пример 2 : Действия, которые необходимо выполнить:
select
, иDML
запросами.CallableStatement
.ResultSet
s, выполняемых в процедуре.Результаты DML не могут быть захвачены, но могут выдать другой результат,
select
чтобы узнать, как повлияли на строки в таблице.
Примерная таблица и процедура :
Вызов процедуры из Java :
источник
Вы можете использовать пакетное обновление, но запросы должны быть запросами действий (например, вставка, обновление и удаление).
источник
Подсказка: если у вас более одного свойства подключения, разделите их:
Чтобы дать вам что-то вроде:
Я надеюсь, что это поможет кому-то.
С Уважением,
Глин
источник
На основании моего тестирования правильный флаг - «allowMultiQueries = true»
источник
Почему бы вам не попробовать написать
Stored Procedure
для этого?Вы можете получить то
Result Set
же самоеStored Procedure
иInsert
то, что хотите.Единственное, что вы можете не получить новые вставленные строки в,
Result Set
если выInsert
послеSelect
.источник
Я думаю, что это самый простой способ множественного выбора / обновления / вставки / удаления. Вы можете запустить столько обновлений / вставок / удалений, сколько захотите после выбора (вы должны сначала сделать выбор (фиктивный, если необходимо)) с executeUpdate (str) (просто используйте новый int (count1, count2, ...)) и если вам нужен новый выбор, закройте «оператор» и «соединение» и создайте новый для следующего выбора. Как пример:
Я надеюсь, что это помогает
источник