forum.bitel.ru http://forum.bitel.ru/ |
|
ПТ удаляется не так как ожидалось (deletePersonalTariff) http://forum.bitel.ru/viewtopic.php?f=19&t=10078 |
Страница 1 из 1 |
Автор: | oldb0y [ 15 янв 2015, 10:20 ] |
Заголовок сообщения: | ПТ удаляется не так как ожидалось (deletePersonalTariff) |
Здравствуйте. Пытаюсь "в корень" удалить персональный тариф, методом deletePersonalTariff. И вроде как удаляется, но столько мусора остается!! Сам код: Код: public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 ) throws Exception { print( "Loading ASD "); Connection con = setup2.getDBConnection(); PersonalTariffManager PTM = new PersonalTariffManager( con ); PTM.deletePersonalTariff(13896); } До удаления ПТ: Вложение: 0.png После удаления ПТ: Вложение: 1.png Получается метод deletePersonalTariff убирает только одну запись в базе, оставляя за собой кучу мусора! По мойму это не правильно, или я что-то упускаю? |
Автор: | stark [ 15 янв 2015, 11:46 ] |
Заголовок сообщения: | Re: ПТ удаляется не так как ожидалось (deletePersonalTariff) |
Это менеджер который удаляет только персональный тариф из одной таблицы. Полной логики по всей очистки там нет..Полная логика есть в нашем action-е, можно его вызвать по http. По хорошему когда-то переделаем его Web-cсервис, тогда будет проще - будете вызывать Web-сервис. Во такой сейчас у нас код пока в action-е. Код: String error = new TariffTreeBuilder( con ).deleteTree( tariff.getTreeId() );
if( Utils.notBlankString( error ) ) { throw new BGException( error ); } String query = "DELETE FROM contract_tree_link WHERE tree_id=?"; PreparedStatement ps = con.prepareStatement( query ); ps.setInt( 1, tariff.getTreeId() ); ps.executeUpdate(); manager.deletePersonalTariff( id ); |
Автор: | oldb0y [ 16 янв 2015, 10:31 ] |
Заголовок сообщения: | Re: ПТ удаляется не так как ожидалось (deletePersonalTariff) |
Жаль, конечно, что метод не обходит все "ветки"... Мне не понятно, зачем ваш код 2 раза удаляет запись из БД?? Для чего? Потому что у меня deletePersonalTariff( id ), делает String query = "DELETE FROM contract_tree_link WHERE tree_id=?";. |
Автор: | stark [ 16 янв 2015, 11:59 ] |
Заголовок сообщения: | Re: ПТ удаляется не так как ожидалось (deletePersonalTariff) |
oldb0y писал(а): Жаль, конечно, что метод не обходит все "ветки"... Мне не понятно, зачем ваш код 2 раза удаляет запись из БД?? Для чего? Потому что у меня deletePersonalTariff( id ), делает String query = "DELETE FROM contract_tree_link WHERE tree_id=?";. Хм..ну совсем...там делается Код: DELETE FROM contract_tree_link WHERE id=? Но все равно не совсем понятно зачем вначале удалять по tree_id, потом по id. Этому коду 7 лет ..Причем вначале добавили просто deletePersonalTariff, а потом еще и этот запрос. И произошло это в 2007. |
Автор: | oldb0y [ 16 янв 2015, 13:26 ] |
Заголовок сообщения: | Re: ПТ удаляется не так как ожидалось (deletePersonalTariff) |
Хм, не совсем понял мысль. Вы согласны что SQL-запрос и метод пытаются удалить одну и ту же запись, просто ищя по разным полям? Вот как-то так решил проблему с мусором: Код: String query_d = "SELECT tb0.id,tb1.id FROM contract_tree_link AS tb0 " +
"LEFT JOIN module_tariff_tree AS tb1 ON tb0.tree_id = tb1.tree_id " + "WHERE tb0.cid = " + contractId + " AND tb0.title LIKE '%" + like_and_title + "%'"; PreparedStatement psd = con.prepareStatement( query_d ); ResultSet rsd = psd.executeQuery(); int deletePTid = 0; int deleteTree = 0; if( rsd.next() ) { deletePTid = rsd.getInt(1); deleteTree = rsd.getInt(2);} if(deletePTid != 0) { // Удаляем запись тарифного дерева ПТ String dq1 = "DELETE FROM module_tariff_tree WHERE id = ?"; PreparedStatement dps1 = con.prepareStatement( dq1 ); dps1.setInt( 1, deleteTree ); dps1.executeUpdate(); // Удаляем непосредственно сами тарифные деревья ПТ String dq2 = "DELETE FROM mtree_node WHERE mtree_id = ?"; PreparedStatement dps2 = con.prepareStatement( dq2 ); dps2.setInt( 1, deleteTree ); dps2.executeUpdate(); // Удаляем ПТ PersonalTariffManager PTM = new PersonalTariffManager( con ); PTM.deletePersonalTariff( deletePTid ); } |
Автор: | stark [ 16 янв 2015, 14:59 ] |
Заголовок сообщения: | Re: ПТ удаляется не так как ожидалось (deletePersonalTariff) |
oldb0y писал(а): Хм, не совсем понял мысль. Вы согласны что SQL-запрос и метод пытаются удалить одну и ту же запись, просто ищя по разным полям? Да, согласен. Но не знаю почему так получилось. oldb0y писал(а): Вот как-то так решил проблему с мусором: Код: String query_d = "SELECT tb0.id,tb1.id FROM contract_tree_link AS tb0 " + "LEFT JOIN module_tariff_tree AS tb1 ON tb0.tree_id = tb1.tree_id " + "WHERE tb0.cid = " + contractId + " AND tb0.title LIKE '%" + like_and_title + "%'"; PreparedStatement psd = con.prepareStatement( query_d ); ResultSet rsd = psd.executeQuery(); int deletePTid = 0; int deleteTree = 0; if( rsd.next() ) { deletePTid = rsd.getInt(1); deleteTree = rsd.getInt(2);} if(deletePTid != 0) { // Удаляем запись тарифного дерева ПТ String dq1 = "DELETE FROM module_tariff_tree WHERE id = ?"; PreparedStatement dps1 = con.prepareStatement( dq1 ); dps1.setInt( 1, deleteTree ); dps1.executeUpdate(); // Удаляем непосредственно сами тарифные деревья ПТ String dq2 = "DELETE FROM mtree_node WHERE mtree_id = ?"; PreparedStatement dps2 = con.prepareStatement( dq2 ); dps2.setInt( 1, deleteTree ); dps2.executeUpdate(); // Удаляем ПТ PersonalTariffManager PTM = new PersonalTariffManager( con ); PTM.deletePersonalTariff( deletePTid ); } я не понял, зачем там сложно ? чем вас Код: new TariffTreeBuilder( con ).deleteTree( tariff.getTreeId() ); не устраивает. Проблему в приведенном выше мной куске кода какая? что он пытается делать одно и тоже 2 раза ? - так это не совсем проблема. Или что-то он все-таки не удаляет ? Что именно он не удаляет? Если он что-то не удаляет , то исправим. |
Автор: | oldb0y [ 16 янв 2015, 15:48 ] |
Заголовок сообщения: | Re: ПТ удаляется не так как ожидалось (deletePersonalTariff) |
stark Спасибо, что ткнули! Хороший код. Я решил, что эта часть кода не относится к проблеме. Сейчас, попробую применить. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |