Как заставить Java работать с SQL Server? - PullRequest
32 голосов
/ 21 августа 2009

Я знаю, что это основной вопрос, но я не могу найти ответ, и я прошу прощения, если этот вопрос слишком глуп, но мы идем:

Я должен работать с SQL Server (пока проблем нет) и с Java (люблю java, здесь тоже нет проблем), но теперь: что мне делать, чтобы комбинация работала? Я получил: JRE 1.6 и sqljdbc4.jar ... Прежде чем я поместил sqljdbc4.jar в мой путь к классам, у меня был sqljdbc.jar, и с помощью тестовой программы я получил исключение:

21.08.2009 09:26:59 com.microsoft.sqlserver.jdbc.SQLServerConnection <init>
SCHWERWIEGEND: Die Java-Laufzeitumgebung (Java Runtime Environment, JRE), Version 1.6,
wird von diesem Treiber nicht unterstützt. Verwenden Sie die Klassenbibliothek 
'sqljdbc4.jar', die Unterstützung für JDBC 4.0 bietet.
java.lang.UnsupportedOperationException: Die Java-Laufzeitumgebung (Java Runtime 
Environment, JRE), Version 1.6, wird von diesem Treiber nicht unterstützt. Verwenden 
Sie die Klassenbibliothek 'sqljdbc4.jar', die Unterstützung für JDBC 4.0 bietet.
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.<init>(SQLServerConnection.java:223)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:840)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at msSqlTest.DB.dbConnect(DB.java:13)
    at msSqlTest.TestConnection.main(TestConnection.java:7)

Извините за немецкий ... Это в основном означает, что я должен использовать sqljdbc4.jar, b / c JRE, которую я использую, не поддерживается драйвером. Поэтому я поместил sqljdbc4.jar в мой путь к классам, но он не сработал, поэтому я немного растерялся, что я мог сделать.

Может быть, кто-то скажет, что я должен защищать от идиотов: (

Ах да, вот тестовое приложение, которое я использую:

import java.sql.*;

public class TestConnection{
    public static void main(String[] args){
        // Neue DB und los geht's :)
        DB db = new DB();
        db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw" );
    }
}

class DB{
    public void dbConnect(  String db_connect_string, 
                            String db_userid, 
                            String db_password){
        try{
        Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );
            Connection conn = DriverManager.getConnection(
                            db_connect_string, 
                        db_userid, 
                        db_password);
            System.out.println( "connected" );
        }
        catch( Exception e ){
            e.printStackTrace();
        }
    }
};

Ответы [ 9 ]

28 голосов
/ 21 августа 2009

Вы пробовали драйвер jtds для SQLServer?

8 голосов
/ 21 августа 2009

Не помещайте и старый sqljdbc.jar, и новый sqljdbc4.jar в ваш путь к классам - это сделает его (более или менее) непредсказуемым, какие классы используются, если оба этих JAR содержат классы с одинаковыми квалифицированными именами .

Вы сказали, что поместили sqljdbc4.jar в свой путь к классу - вы удалили старый sqljdbc.jar из пути к классам? Вы сказали «это не сработало», что это значит? Вы уверены, что у вас все еще нет старого JAR-файла в вашем пути к классам (возможно, не явно)?

2 голосов
/ 12 июня 2012

Для тех, кто все еще прибегает к помощи, перейдите в \ blackboard \ config \ tomcat \ conf и в wrapper.conf добавьте дополнительную строку в wrapper.java.classpath, указывающую на sqljdbc4.jar, а затем обновите wrapper.conf.bb как хорошо

Затем перезапустите службы Blackboard и Tomcat, и он должен работать

Это не сработает, просто установив свой путь к классу java, вы должны установить его в конфигурационных файлах на доске, чтобы он указывал на ваш jar-файл с библиотекой jdbc

2 голосов
/ 08 ноября 2011

Возможно, немного поздно, но использование разных драйверов в целом является излишним в случае ошибки пользователя:

db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw" );

должен быть одним из следующих:

db.dbConnect("jdbc:sqlserver://localhost\muff", "user", "pw" );

(используя именованную трубу) или:

db.dbConnect("jdbc:sqlserver://localhost:1433", "user", "pw" );

с использованием номера порта напрямую; вы можете оставить 1433, потому что это порт по умолчанию, оставив:

db.dbConnect("jdbc:sqlserver://localhost", "user", "pw" );
2 голосов
/ 21 августа 2009

Драйвер, который вы используете, является драйвером MS SQL Server 2008 (sqljdbc4.jar). Как указано на странице MSDN, для работы требуется Java 6+.

http://msdn.microsoft.com/en-us/library/ms378526.aspx

Для библиотеки классов sqljdbc4.jar требуется Java Runtime Environment (JRE) из версия 6.0 или более поздняя.

Я бы предложил использовать драйвер 2005 года, который, как я полагаю, находится в (sqljdbc.jar) или, как говорит Oxbow_Lakes, попробовать драйвер jTDS (http://jtds.sourceforge.net/).

1 голос
/ 02 декабря 2011

У меня была такая же проблема с клиентом моей компании, проблема была в том, что драйвер sqljdbc4.jar, пытается преобразовать символ между базой данных и драйвером. Каждый раз, когда он выполнял запрос к базе данных, теперь вы можете представить 650 подключений одновременно, это делало мою систему очень-очень медленной, чтобы избежать этой ситуации, я добавляю в строку подключения следующий параметр:

 SendStringParametersAsUnicode=false, then te connection must be something like url="jdbc:sqlserver://IP:PORT;DatabaseName=DBNAME;SendStringParametersAsUnicode=false"

После этого система работает очень быстро, так как пользователи очень довольны изменениями, я надеюсь, что мой вклад будет таким же.

0 голосов
/ 08 февраля 2011

Действительно. Дело в том, что версия 2008 R2 очень хитрая. Драйвер JTDs, кажется, работает в некоторых случаях. На определенном сервере jTDS работал нормально для экземпляра 2008 R2. Однако на другом сервере мне пришлось использовать драйвер Microsoft JBDC sqljdbc4.jar. Но тогда он будет работать только после установки среды JRE на 1.6 (или выше).

Я использовал 1.5 для другого сервера, поэтому много времени тянул на этом.

Хитрый выпуск.

0 голосов
/ 26 января 2011

Если вы используете sqljdbc4.jar, используйте следующий код

ResultSet objResultSet = objPreparedStatement.getResultSet();
if (objResultSet == null) {
  boolean bResult = false;
  while (!bResult){
    if (objPreparedStatement.getMoreResults()){
      objResultSet = objPreparedStatement.getResultSet();
      bResult = true;
    }
  } 
}
objCachedRowSet = new CachedRowSetImpl();
objCachedRowSet.populate(objResultSet);
if (CommonUtility.isValidObject(objResultSet)) objResultSet.close();
objResultSet = null;
0 голосов
/ 21 августа 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...