![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 3 Всего: 36 |
Привет. Как узнать какую таблицу я изменил? Мне нужно изменить таблицу, а потом из неё выдернуть данные (ну SELECT * FROM тырым-пырым).
Поиск в гугле пока ничего не дал. -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
А чем тупой парсинг строки query не подходит?
Ежели выполняется executeUpdate то там может быть три варианта:
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Утверждать не буду...
Точного ответа не знаю. Но давайте пораскинем мозгами по асфальту.... Общение с скл-серверами происходит примерно так: - Мы отправляем запрос (неважно какой), можем ещё сделать prepare (это не только к джаве относится) для предкомпиляции на сервере(для ускорения последующих выполнений ) - Сервер его выполняет. Обновляет, вставляет, удаляет, выбирает. - Возвращает нам результаты. Типично для скл-серверов возвращаются: * резалтсеты (они же наборы данных) * аутпут параметры процедур * результат выполнения * сообщения сервера(о выполнении или трактование ошибок) Насколько я знаю, в сообщениях сервера обработанные таблицы не фигурируют. Поскольку есть много утилит которые могут показать план запроса - логично предположить что план можно вытянуть. НО! опять таки.. разбирать его..... Возвращаемся к предложению парсить query. Гораздо эффективнее. Ещё есть журнал транзакций сервера :-). Если кто-то, как-то, когда-то..... Тогда и мне расскажите :-) То есть мнение: просто взять и обратиться к чему-то вроде statement.UpdatedTables - вряд ли Остаётся старый, добрый
а вообще интересно задание.... передаются неизвестные query, ты их выполняешь... а селект-то зачем потом? куда резалтсет идёт? или необходим подсчёт строк? или статистика? (мол, обновляли такие-то таблицы, теперь в них столько-то строк) Так легче помозговать будет :-) -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| maximb |
|
|||
![]() Новичок Профиль Группа: Awaiting Authorisation Сообщений: 48 Регистрация: 23.5.2005 Где: Украина, г.Симфер ополь Репутация: 4 Всего: 6 |
а если запрос делается из нескольких таблиц ? думаю парсинг уместен только в случае если заранее известно, что выполняется простой SELECT |
|||
|
||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 3 Всего: 36 |
Собственно проблема в задании. Сейчас попробую сформулировать:
Необходимо разработать систему проверки правильности SQL запросов при экзамене. Т.е. у нас есть заготовки SQL запросов и сам вопрос. Пользователь, как ответ, шлёт свою версию запроса и система должная проверить - решит ли запрос поставленную проблему. Если кто имел дело с чемпионатом по программированию (ACM ICPC), то примерно то и надо сделать. Просто тупое сравнение не пойдёт, поскольку несколько вариантов запросов могут одинаково решить проблему. Я думал о том, чтобы просто последовательно выполнить заготовок и тестируемый запросы и посмотреть результат. Но опять же, надо будет парсить запрос из-за INSERT, UPDATE, CREATE, DELETE, etc. Только парсинг? -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
Задача напоминает задачу тестирования: есть тестируемый код, нужно проверить 1) для select, что он вернул правильный ResultSet, 2) для insert, update, delete что БД пришла в должное (эталонное) состояние.
Мне кажется, решить задачу можно вот таким способом: с каждым заданием ассоциируется 1) код, приводящий БД в начальное состояние (иначе не понятно, что делать после выполнения каждого тестируемого запроса, как убедиться, что БД в правильном состоянии и т.п.) 2а) код проверяющий, что БД находится в правильном состоянии ИЛИ 2b) код проверяющий, что ResultSet правильный 2b можно свести к 2а, если обязать результат всегда записывать в таблицу (т.е. оборачивать select insert-ом). (1) можно писать как попало. Для (2) чтобы получить универсальное решение, я бы сделал класс эталон таблицы, который бы инициировался именем таблицы, структурой и наборами кортежей (строк). Набор таких эталонов "сам" бы проверял, что в БД все как должно или возвращал расхождение. |
|||
|
||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 3 Всего: 36 |
hatsumeika, спасибо, я о постоянстве состояния как-то и не подумал
-------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| hatsumeika |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.5.2005 Где: Минск Репутация: 2 Всего: 2 |
я еще немного подумал, и теперь мне кажется, что нужно сводить не 2b к 2а а наоборот, 2а к 2b. т.к. так в обоих случаях мы будем работать с ResultSet-ом
|
|||
|
||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 3 Всего: 36 |
Короче, решил сделать так.
UPDATE, DELETE, INSERT: 1. Вызываю запрос, введенный тестируемым 2. Сохраняю состояние измененной таблицы 3. Восстанавливаю таблицу 4. Вызываю шаблонный запрос 5. Сохраняю состояние измененной таблицы 6. Восстанавливаю таблицу 7. Сравниваю два сохраненных состояния SELECT: Просто сравниваю два результат. От тестируемого и от шаблонного CREATE, DROP: А хз... DESC что-ли как-нибудь заюзать? -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
При желании можно обойтись чистым SQL-ем.
- изначально имеем 2 комплекта таблиц, половина содержит начальное состояние, половина итоговое - выполняем DML, а затем выполняем что то вроде:
- для select можно выполнять:
- для того чтобы не возвращать таблицы в начальное состояние использовать rollback -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 3 Всего: 36 |
MySQL используется... какой rollback -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А это обязательно? Тем более, что MySQL не полность SQL92 (по части хранимок, триггеров и вложенных запросов) поддерживает. Может лучше Firebird или PostgreSQL. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 3 Всего: 36 |
Пока да. Мне надо пока это показать, чтобы раскрутить. И это нужно к концу недели -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |