2014-01-27 3 views
0

У меня есть хранимая процедура, которая создает временную таблицу и заполняет таблицу temp. После заселения он возвращает строки внутри таблицы с помощью (SELECT).Нет ResultSet из хранимой процедуры с временной таблицей с JDBC

При работе с Workbench MySQL работает чрезвычайно, но в JAVA с JDBC ResultSet пуст. Я прошел через некоторые должности, которые говорят, что мы не должны использовать PreparedStatment, но даже Statement не работает.

Для теста я разделил работу в Хранилище. Теперь я звоню

CallableStatement ps = connection.prepareCall("{CALL myProcedure(?)}"); 
ps.setString(1, "value"); 
ps.execute(); 

, который создает временную таблицу и заполняет ее. После этого с таким же соединением я стараюсь делать

Statement st = connection.createStatement(); 
ResultSet rs = st.executeQuery("SELECT * FROM tmp_table"); 

Still ResultSet пуст. Что я могу сделать? Любая помощь приветствуется.

+0

Какая у вас настройка связи? Может быть, они не совершены? – zencv

+0

Мое предположение, так как оно работает на рабочем столе, было бы связано с транзакциями, попробуйте добавить транзакцию к вашему java-коду. Может быть, временная таблица отбрасывается после завершения транзакции, а ваши коды не используют транзакцию при вызове хранимой процедуры. – Bhaskar

+0

Это пул соединений в ресурсах tomcat с auto-commit = true; Я пробовал транссировать и фиксировать в процедуре MySQL. но я могу попробовать и в java. –

ответ

1

Спасибо вам за помощь! Я нашел ошибку. Ошибка была в коде.

Я отправляю параметр при вызове процедуры. Для тестирования я сделал

SET @param = "value"; 

Позже, я удалил его, но я забыл удалить его при вставке данных во временную таблицу, которая используется, что @param. MySQL каким-то образом мог видеть, что @param и IN param одинаковы из-за имени, но JDBC этого не видел, и поэтому он не возвращал никаких данных.

Смежные вопросы