Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC + ODBC + MSSQL2000 / 20 сообщений из 20, страница 1 из 1
28.12.2004, 01:11
    #32846922
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
Можно ли использовать JDBC-ODBC драйвер постовляемый в коплекте с jdk1.4.1_03-b02? Или надо сразу его апгрейдить?

Спрашиваю, потому что лезут какие-то странные баги. Например, не могу считать значения из некоторых колонок в одной таблице (получаю "[Microsoft][ODBC Driver Manager] Invalid descriptor index
"). Может конечно и сам виноват, но пока проблем не вижу.
Примечание: Значения из колонок считываю в том же порядке, в которов они упомянуты в SELECTе.
...
Рейтинг: 0 / 0
28.12.2004, 11:07
    #32847271
syncat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
Давай код
...
Рейтинг: 0 / 0
28.12.2004, 11:20
    #32847309
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
У меня была такая бодяга- поищи по форуму, но суть была в том что не сходились типы данных в базе и методы которыми я оперировал в яве.
...
Рейтинг: 0 / 0
28.12.2004, 12:07
    #32847426
big_mammoth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
А может не париться с ним и использовать родной без всяких там ODBC?
SQL Server 2000 Driver for JDBC Service Pack 3
...
Рейтинг: 0 / 0
28.12.2004, 12:22
    #32847456
syncat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
Он много чего не умеет и глючный (сам удивился когда узнал), лучше использовать JTDS
...
Рейтинг: 0 / 0
28.12.2004, 12:27
    #32847471
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
началось...

самый лучший - JSQLConnect http://www.jnetdirect.com

--
Lacrima Mosa Est
...
Рейтинг: 0 / 0
28.12.2004, 14:27
    #32847852
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
syncatДавай код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String query = "SELECT COL FROM TABLE1 WHERE col1 IS NOT NULL";
 try  {
   Statement s = c.createStatement();
   ResultSet rs = s.executeQuery (query);
    while  (rs.next()) {
    int  c1 = rs.getInt("COL1");
}  catch  (SQLException e1) {
   Msg.showError(e1.getMessage());
}
Валится на getInt. Если col1 заменить на col2, то всё работает. Обе клонки типа int в бд.

Проблема в том, что необходимо обеспечить возможность работы приложения с разными БД (MSSQL, Oracle, DB2, Sybase). Если использовать родные драйверы боюсь, что прийдётся в коде в некоторых местах поддерживать по отдельной ветке для каждого сервера.
Просто через ODBC этот же запроc естественно работает. Так что похоже проблема в JDBC-ODBC мосте. Его можно как-то заапгрейдить?
...
Рейтинг: 0 / 0
28.12.2004, 14:32
    #32847870
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
mahorkin syncatДавай код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String query = "SELECT COL FROM TABLE1 WHERE col1 IS NOT NULL";
 try  {
   Statement s = c.createStatement();
   ResultSet rs = s.executeQuery (query);
    while  (rs.next()) {
    int  c1 = rs.getInt("COL1");
}  catch  (SQLException e1) {
   Msg.showError(e1.getMessage());
}
Валится на getInt. Если col1 заменить на col2, то всё работает. Обе клонки типа int в бд.

Проблема в том, что необходимо обеспечить возможность работы приложения с разными БД (MSSQL, Oracle, DB2, Sybase). Если использовать родные драйверы боюсь, что прийдётся в коде в некоторых местах поддерживать по отдельной ветке для каждого сервера.
Просто через ODBC этот же запроc естественно работает. Так что похоже проблема в JDBC-ODBC мосте. Его можно как-то заапгрейдить?

запрос который ты привел и получение полей из него, работать не будет.
в результате запроса получаешь один столбец с именем COL, а строкой
int c1 = rs.getInt("COL1"); пытаешься забрать значение поля, которого
в результате нет.
...
Рейтинг: 0 / 0
28.12.2004, 14:33
    #32847875
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
результат - приводи тот код, который не работает. или меняй названия
полей синхронно :)

--
Lacrima Mosa Est
...
Рейтинг: 0 / 0
28.12.2004, 14:38
    #32847894
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
А.Грасоff™ mahorkin syncatДавай код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String query = "SELECT COL FROM TABLE1 WHERE col1 IS NOT NULL";
 try  {
   Statement s = c.createStatement();
   ResultSet rs = s.executeQuery (query);
    while  (rs.next()) {
    int  c1 = rs.getInt("COL1");
}  catch  (SQLException e1) {
   Msg.showError(e1.getMessage());
}
Валится на getInt. Если col1 заменить на col2, то всё работает. Обе клонки типа int в бд.

Проблема в том, что необходимо обеспечить возможность работы приложения с разными БД (MSSQL, Oracle, DB2, Sybase). Если использовать родные драйверы боюсь, что прийдётся в коде в некоторых местах поддерживать по отдельной ветке для каждого сервера.
Просто через ODBC этот же запроc естественно работает. Так что похоже проблема в JDBC-ODBC мосте. Его можно как-то заапгрейдить?

запрос который ты привел и получение полей из него, работать не будет.
в результате запроса получаешь один столбец с именем COL, а строкой
int c1 = rs.getInt("COL1"); пытаешься забрать значение поля, которого
в результате нет.

Sorry, очепятка :). Именна колонок у меня совпадают. Просто я заменяя своё название таблицы и колонок на table1 и col1 опечатался.
...
Рейтинг: 0 / 0
28.12.2004, 14:47
    #32847918
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
mahorkin А.Грасоff™ mahorkin syncatДавай код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
String query = "SELECT COL FROM TABLE1 WHERE col1 IS NOT NULL";
 try  {
   Statement s = c.createStatement();
   ResultSet rs = s.executeQuery (query);
    while  (rs.next()) {
    int  c1 = rs.getInt("COL1");
}  catch  (SQLException e1) {
   Msg.showError(e1.getMessage());
}
Валится на getInt. Если col1 заменить на col2, то всё работает. Обе клонки типа int в бд.

Проблема в том, что необходимо обеспечить возможность работы приложения с разными БД (MSSQL, Oracle, DB2, Sybase). Если использовать родные драйверы боюсь, что прийдётся в коде в некоторых местах поддерживать по отдельной ветке для каждого сервера.
Просто через ODBC этот же запроc естественно работает. Так что похоже проблема в JDBC-ODBC мосте. Его можно как-то заапгрейдить?

запрос который ты привел и получение полей из него, работать не будет.
в результате запроса получаешь один столбец с именем COL, а строкой
int c1 = rs.getInt("COL1"); пытаешься забрать значение поля, которого
в результате нет.

Sorry, очепятка :). Именна колонок у меня совпадают. Просто я заменяя своё название таблицы и колонок на table1 и col1 опечатался.

дай мне БД свою. приватно.
...
Рейтинг: 0 / 0
28.12.2004, 15:24
    #32848027
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
автордай мне БД свою. приватно.

Куда слать (914кб)? Кинь аддрес, please, на lavrimax@hotmail.com.
...
Рейтинг: 0 / 0
28.12.2004, 21:59
    #32848700
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
А ларчик просто открывался...

Разобрался. В Eclipse в Watch expressions были добавлены выражения, которые считывают значения из колонок рекордсета (rs.getInt(<colName>), rs.getString(<colName>) и т.д). Как я понимаю эти значения могут быть считаны только 1 раз. У меня получалось, что сначала их считывала IDE, и только после этого пыталось считать моё приложение.

Хочется ругаться матом ;)
...
Рейтинг: 0 / 0
29.12.2004, 09:59
    #32848946
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
Кто такой рекордсет? Никогда о таких ограничениях на считывагие данных из бд не слышал. Скорее уж rs.next() подвёл. Покаж код.
...
Рейтинг: 0 / 0
29.12.2004, 13:36
    #32849597
big_mammoth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
А.Грасоff™началось...

самый лучший - JSQLConnect http://www.jnetdirect.com

--
Lacrima Mosa Est

Так за него же денужку надо платить, или уже появилась есть таблетка?
...
Рейтинг: 0 / 0
29.12.2004, 13:40
    #32849610
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
NaugКто такой рекордсет? Никогда о таких ограничениях на считывагие данных из бд не слышал. Скорее уж rs.next() подвёл. Покаж код.

Код: plaintext
1.
Допустим в коде есть комманда: rs.getInt("COL") и в Watch Expressions (Eclipse IDE) есть выражение rs.getInt("COL"). Втаком случае rs.getInt("COL") в коде всегда кидает exception (у меня, по крайней мере). Если удалить rs.getInt("COL") из Watch Expressions, то всё работает.
...
Рейтинг: 0 / 0
29.12.2004, 13:41
    #32849612
mahorkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
Sorry, c тагами намудрил.
...
Рейтинг: 0 / 0
18.03.2005, 15:48
    #32968607
СыР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
Ошибка:[Microsoft][ODBC Driver Manager] Invalid descriptor index
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.sql.*;

public class HowToUseTable {

    public static void main (String[] args){
              ShowForm();
         }

   public static void ShowForm(){
             ConnectToBase();

  JFrame frame1=new JFrame("БД");
    frame1.setSize( 400 , 300 );
    frame1.setLocationRelativeTo(null);//...центр экрана
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setVisible(true);
    }

    public static void ConnectToBase() {
        try{
             Class.forName(DBConnection.drv);
                     System.out.println("Драйвер загружен...");
        Connection conn=DriverManager.getConnection(DBConnection.dsn,DBConnection.user, DBConnection.psw);
       System.out.println("Подключились...");

             JTable table=new JTable();
            String[] tableColumnsName = {"col 1"};
            DefaultTableModel aModel = (DefaultTableModel) table.getModel();
            aModel.setColumnIdentifiers(tableColumnsName);

       Statement stmt= conn.createStatement();
          ResultSet rs=  stmt.executeQuery("select COF_NAME from COFFEES");

// Loop through the ResultSet and transfer in the Model
                java.sql.ResultSetMetaData rsmd = rs.getMetaData();
                int colNo = rsmd.getColumnCount();

                while(rs.next()){
                 Object[] objects = new Object[colNo];
                 for(int i= 0 ;i<colNo;i++){

                  objects[i]=rs.getObject(i);
                     System.out.println(rs.getObject(i));
                  }
                 aModel.addRow(objects);
                }
              table.setModel(aModel);

                }
        catch (ClassNotFoundException e) {
            System.out.println("Ошибка:"+e.getMessage());
        } catch (SQLException e) {
            System.out.println("Ошибка:"+e.getMessage());
        }
     }
}
...
Рейтинг: 0 / 0
18.03.2005, 16:14
    #32968695
СыР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
паки-паки выручил :) спасибо!
поля с 1-цы нумеруются
...
Рейтинг: 0 / 0
18.03.2005, 16:16
    #32968703
паки-паки
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC + ODBC + MSSQL2000
ошибка здесь:

Код: plaintext
1.
2.
3.
4.
5.
6.
...
 for  ( int  i =  0 ; i < colNo; i++) {
  objects[i] = rs.getObject(i);
  System.out.println(rs.getObject(i));
}
...

должно быть так:

Код: plaintext
1.
2.
3.
4.
5.
6.
...
 for  ( int  i =  1 ; i <= colNo; i++) {
  objects[i] = rs.getObject(i);
  System.out.println(rs.getObject(i));
}
...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC + ODBC + MSSQL2000 / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]