







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
36476
|
|