Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема со вставкой записи в НД, JDBC 
:(
    Опции темы
<Spawn>
Дата 13.1.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



СУБД - Oracle.
При попытке добавить новую запись в Набор Данных получаю такое сообщение: java.sql.SQLException: ORA-01732: обработка данных для данного предст. пользователя не разрешена.

Можно, конечно, попробовать добавить запись через SQL, но хотелось бы это сделать встроенными средствами.

Вот код:

Код

    connection = funcs.getInbSession();
    statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
        ResultSet.CONCUR_UPDATABLE);
    resultSet = statement.executeQuery(sqlQuery);

    ...

    try
    {
      resultSet.moveToInsertRow();

      Object[][] requestFieldsInfo = addDialog.getRequestFieldsInfo();

      materialsTableModel.setRowCount(materialsTableModel.getRowCount() + 1);
      for (int i = 0; i < requestFieldsInfo.length; i++)
      {
        materialsTableModel.setValueAt(((JTextField)requestFieldsInfo[i][2]).getText(),
           materialsTableModel.getRowCount() - 1, i);
        resultSet.updateString(i + 1, ((JTextField)requestFieldsInfo[i][2]).getText());
      }

      resultSet.insertRow(); //Вот тут получаю ошибку.
    }
    catch (Exception ex)
    {
      MessageBox.post(ex.toString(), "", 0);
    }


Чего я не учел?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
batigoal
Дата 13.1.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Я вообще не много в этом понимаю, но все же: откуда ты берешь ResultSet? Я имею в виду конкретный запрос.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
<Spawn>
Дата 13.1.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



В вышеприведенном коде строчка № 4:

Код

resultSet = statement.executeQuery(sqlQuery);


resultSet объявлен полем текущего класса как

Код

ResultSet resultSet;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
batigoal
Дата 13.1.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Это понятно. Я имел в виду - может, там идет вставка во view без триггера на insert, или еще куда-нибудь, куда принципиально вставлять нельзя.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
<Spawn>
Дата 13.1.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Хм, запрос выглядит так:

Код

  private static final String REQUEST_MATERIALS_SQL =
      "SELECT Name, NTD, Units, PrimaryUnits, Weight, Price, OrderID, ItemType, OwnerClass " +
      "  FROM uetm_material_requests " +
      " ORDER BY Name ASC";


На before insert таблицы висит триггер с генерацией первичного ключа из соответствующей sequence.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
batigoal
Дата 13.1.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Может, дело в ORDER BY? Можно ли вставлять в упорядоченный набор?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
<Spawn>
Дата 13.1.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



А вот этого я не знаю - сам первый раз работаю с JDBC. У меня подозрение, что обновление должно идти по rowid записи, тогда совершенно не важно есть сортировка или нет ее. Тем более, что тут по идее должен сработать скрытый INSERT - там тоже сортировка не имеет ни какого значения.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
batigoal
Дата 13.1.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Да, но ведь тут вставка идет не в таблицу, а в resultSet, для которого сортировка важна.

Впрочем, может, мы и не в ту сторону копаем.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
<Spawn>
Дата 13.1.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Разве в ResultSet? Мне казалось, что метод insertRow() производит физическую вставку записи, тем более что ошибка то от Oracle приходит! По идее в ResultSet осуществляется вставка методами moveToInsertRow() + updateXXX(). Хотя может я не прав... но если сравнивать с Дельфовым TDataSet, то там метод post приводит к вставке данных в таблицу СУБД.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
batigoal
Дата 13.1.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Вот что говорит дока:

Цитата

public void insertRow()
              throws SQLExceptionInserts the contents of the insert row into this ResultSet object and into the database. The cursor must be on the insert row when this method is called.

Throws:
SQLException - if a database access error occurs, if this method is called when the cursor is not on the insert row, or if not all of non-nullable columns in the insert row have been given a value


То есть вставка идет и туда, и туда.
Добавлено @ 12:30
Тут еще есть пример, но вроде он от твоего не отличается: http://javaalmanac.com/egs/java.sql/InsertRow.html

Попробуй все-таки временно убрать ORDER BY.
Добавлено @ 12:32
Вот еще цитата:
Цитата

The query of an updatable result set must specify the primary key as one of the selected columns and select from only one table. For some drivers, `SELECT * FROM my_table' will return a read-only result set, so make sure that you specify the column names.


Вроде тоже соблюдено...
Добавлено @ 12:37
И вот здесь еще обсуждли ту же проблему, но решение так и не нашли: http://archives.java.sun.com/cgi-bin/wa?A2...;D=0&P=8951


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 13.1.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



1. Версия базы и драйверов?
2. У Oracle VIEW-ра в которых используется ORDER BY, являются необновляемыми. Возможно именно этот эффект мы тут и наблюдаем, надо поподробней глянуть.


--------------------
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.
PM MAIL WWW   Вверх
skif18
Дата 12.11.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 1



Цитата(LSD @  13.1.2006,  16:17 Найти цитируемый пост)
 У Oracle VIEW-ра в которых используется ORDER BY, являются необновляемыми. Возможно именно этот эффект мы тут и наблюдаем

Скорее всего так и есть. Надо с доками Оракла проконсультироваться.


--------------------

PM MAIL ICQ   Вверх
LSD
Дата 12.11.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



skif18, давай ты не будешь поднимать темы в которых последнему сообщению уже больше года (если у тебя конечно нет полного ответа на вопрос, в котором 100% уверен). Потому как автор давно уже забыл про этот топик, и вопрос им так или иначе решен.


--------------------
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.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.