Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Отключить генерацию update count/rows affecte (magicprinc) 25/11/2009 - 15:32:05



From: magicprinc - 25/11/2009 - 15:32:05
Subject:Отключить генерацию update count/rows affecte
-----------------
Все руки отбил о неприятную особенность MySQL:
MySQL считает присвоение переменной update’ом с обновленных строк == 0 (либо пустым ResultSet-ом).

Поясняющий пример:
sql = "set @i = 10; select @i; -- тут мегазапрос, переменные используются много раз";


Statement st = ds.getConnection().createStatement();
ResultSet rs = st.executeQuery(sql);
rs.next();//throws java.sql.SQLException: ResultSet is from UPDATE. No Data.
final boolean isRs = st.execute(sql);
assert !isRs;//получен не ResultSet, а UpdateCount
assert st.getUpdateCount() == 0;//причем обновлено строк == 0

Работай бы я с JDBC напрямую - ладно вручную пропускал бы все update до первого ResultSet, но я работаю с Spring JDBC Template

simpleJdbcTemplate.queryForInt(sql);
//^throws org.springframework.dao.TransientDataAccessResourceException: ResultSet is from UPDATE. No Data.

Если делать "select @i =", вместо "set @i=" проблема та же, вид сбоку: вместо левого update count мы получаем левый ResultSet, а нужный нам идет вторым.

Проблема не в JDBC, т.к. тоже самое наблюдается в sqlyog.

Помогите! Обыскал всё!

Может быть есть какой-нибудь параметр в my.ini/my.conf или в JDBC URL (вроде allowMultiQueries=true),
отключающий генерацию нафиг никому ненужных updateCount/Rows Affected/ResultSet для операции присваивания переменных.

Переменные мне нужны, т.к. без них запросы получаются крайне громоздкими (вся логика ранее была в MSSQL хранимых, а T-SQL очень мощный язык).


Протестировано на разных билдах MySQL 5.1 в т.ч. на самой свежей версии 5.1.41-community MySQL Community Server


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
36476



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |