#java #sql-server #netbeans
#java #sql-сервер #netbeans
Вопрос:
Я создаю небольшой внутренний инструмент (непроизводственный код), который получает некоторые данные из нашей базы данных MS SQL. Я хотел попробовать NetBeans 6.9.1, поэтому использую это.
У меня есть эта функция для подключения к БД, и у меня есть системный DSN для настройки FAND_DEV в качестве собственного клиента SQL.
private static Connection GetConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:odbc:FAND_DEV");
} catch (SQLException ex) {
Logger.getLogger(DAL.class.getName()).log(Level.SEVERE, null, ex);
}
return conn;
}
Когда я просматриваю код в режиме отладки, все работает отлично. Я без проблем получаю ожидаемые данные из базы данных.
Однако, когда я пытаюсь запустить (запустить основной проект в NetBeans), он выдает исключение для подключения к БД. Любая помощь по этому вопросу была бы высоко оценена.
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid string or buffer length
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3907)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5698)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:354)
at sun.jdbc.odbc.JdbcOdbcConnection.buildTypeInfo(JdbcOdbcConnection.java:1503)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:381)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at gosDbCopy.db.DAL.GetConnection(DAL.java:53)
Комментарии:
1. Похоже, что это тонкая ошибка многопоточности глубоко внутри кода JDBC-ODBC. Действительно, попробуйте использовать только JDBC, как предлагает @John.
Ответ №1:
С MS SQL вы должны иметь возможность использовать JDBC вместо использования моста JDBC-ODBC. Однако причина может быть связана с этим. Причина также может быть в типе данных, которые вы возвращаете. Это, кажется, дает один из примеров этого.
Комментарии:
1. В итоге я отказался от этого и просто переключился на JDBC.