MSSQL - проблема с апдейтом данных
От: fastgrave Россия  
Дата: 25.08.04 09:25
Оценка:
Соединение с базой проходит нормально (там все чисто, поэтому код не привожу), когда делаю выборку — тоже все ок. Локализовал ошибку. Где-то здесть. Где понять не могу

Использую com.microsoft.jdbc

try {
  Statement st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String query="SELECT name AS 'имя',description AS 'описание' from simpletable";
  ResultSet rs=st.executeQuery(query);
  rs.first();
  rs.updateString(1,"test");
  rs.updateString(2,"description");
  rs.updateRow();
}
catch (SQLException ex) {
  cat.error(ex.getMessage());
}


На rs.updateRow() выскакивает эксепшн.
[Microsoft][SQLServer 2000 Driver for JDBC]Row update failed
sqlState: HY000
Re: MSSQL - проблема с апдейтом данных
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 25.08.04 09:30
Оценка: 1 (1)
Здравствуйте, fastgrave, Вы писали:

F>Соединение с базой проходит нормально (там все чисто, поэтому код не привожу), когда делаю выборку — тоже все ок. Локализовал ошибку. Где-то здесть. Где понять не могу


F>Использую com.microsoft.jdbc


F>
F>try {
F>  Statement st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
F>  String query="SELECT name AS 'имя',description AS 'описание' from simpletable";
F>  ResultSet rs=st.executeQuery(query);
F>  rs.first();
F>  rs.updateString(1,"test");
F>  rs.updateString(2,"description");
F>  rs.updateRow();
F>}
F>catch (SQLException ex) {
F>  cat.error(ex.getMessage());
F>}
F>


F>На rs.updateRow() выскакивает эксепшн.

F>
F>[Microsoft][SQLServer 2000 Driver for JDBC]Row update failed
F>sqlState: HY000
F>


а "SELECT name AS 'имя',description AS 'описание' from simpletable FOR UPDATE" не пробовал?
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: MSSQL - проблема с апдейтом данных
От: fastgrave Россия  
Дата: 25.08.04 10:02
Оценка:
Здравствуйте, Lucker, Вы писали:


L>а "SELECT name AS 'имя',description AS 'описание' from simpletable FOR UPDATE" не пробовал?


Попробовал — не работает, что естественно, потому что там должно происходить создание курсора и т.п.

После того, как я убедился, что это не работает, моя мысль пришла к тому, что ситуация довольно типичная и нааверное дело в том, что я не до конца понимаю механизм работы, и обратился к инфе

вот что я нашел http://java.sun.com/developer/Books/JDBCTutorial/

там все подробно разъяснено, в частности приведен вот такой код
  Connection con = DriverManager.getConnection(
                      "jdbc:mySubprotocol:mySubName");
  Statement stmt = con.createStatement(
                       ResultSet.TYPE_SCROLL_SENSITIVE, 
                       ResultSet.CONCUR_UPDATABLE);
  ResultSet uprs = stmt.executeQuery(
                      "SELECT * FROM COFFEES");


т.е. до этого момента верно, а дальше судя по всему действовать надо по-другому, что я и буду выяснять сейчас.

В любом случае спасибо, вы меня вывели из какого-то мозгового ступора, когда я на протяжении последних 2х часов искал ошибку, не удосужившись взглянуть на мануалы.
Re: MSSQL - проблема с апдейтом данных
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 25.08.04 10:09
Оценка:
Здравствуйте, fastgrave, Вы писали:

тут подумалось что правильно так
try {
  if (rs.first()) {
        rs.updateString(1,"test");
        rs.updateString(2,"description");
        rs.updateRow();
    } else {
        //no rows in table handle code.
    }
}


может просто таблица пустая?
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: MSSQL - проблема с апдейтом данных
От: Аноним  
Дата: 25.08.04 10:23
Оценка:
Здравствуйте, Lucker, Вы писали:


L>тут подумалось что правильно так

L>...
L>может просто таблица пустая?

не.. таблица 100% не пустая

в реальном коде там вообще по-другому, это для проверки только
Re[2]: MSSQL - проблема с апдейтом данных
От: fastgrave Россия  
Дата: 25.08.04 10:27
Оценка:
Предыдущее сообщение я писал
Re[3]: MSSQL - проблема с апдейтом данных
От: fastgrave Россия  
Дата: 25.08.04 12:46
Оценка:
Все чисто, в вышеупомянутом мануале код примерно такой же как у меня
  Connection con = DriverManager.getConnection(
                                "jdbc:mySubprotocol:mySubName");
  Statement stmt = con.createStatement(
               ResultSet.TYPE_SCROLL_SENSITIVE, 
               ResultSet.CONCUR_UPDATABLE);
  ResultSet uprs = stmt.executeQuery(
               "SELECT COF_NAME, 
               PRICE FROM COFFEES");

 

uprs.last();
  uprs.updateFloat("PRICE", 10.99f);
  uprs.updateRow();


Еще я проверил может у меня на самом деле не вот эти параметры
ResultSet.TYPE_SCROLL_SENSITIVE, 
ResultSet.CONCUR_UPDATABLE);

не устанавливаются соответсвующими проверками. Всё чисто!

а не работает
... << RSDN@Home 1.1.3 stable >>
Re: MSSQL - проблема с апдейтом данных
От: fastgrave Россия  
Дата: 26.08.04 05:53
Оценка:
Если кому-то понадобится или найдет в поиске, сообщу как я решил проблему.
1. Дело окзалось в mssql-драйвере, который оказался реализован криво. Более подробно читайте в MSSQL &mdash; jdbc драйвер
Автор: fastgrave
Дата: 25.08.04
, там же есть ссылка на правильный драйвер, который поддерживает jdbc-2 полностью и частично (пока) jdbc-3
2. http://jtds.sourceforge.net/faq.html#forwardOnlyResultSet цитирую
>The scroll insensitive/updateable combination is not supported by SQL Server, so such a ResultSet is automatically downgraded to scroll insensitive/read-only by the server. Use the scroll sensitive/updateable combination and it should work.
Чем дальше -> тем лучше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.