Соединение JDBC зависает без ответа от SQL Server 2008 r2 - PullRequest
4 голосов
/ 24 января 2012

При подключении к SQL Server 2008 (локально выраженный, полный сервер в работе) это прекрасно работает при разработке на моей локальной машине, но это просто зависает в работе.

Вот код:

package oata;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import sun.applet.Main;

public class Sql {

    public static final String SQLDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    protected Connection conn = null;
    private String ip = "";
    private int port = 0;
    private String databaseName = "";
    private String db_userid = "";
    private String db_password = "";

    public void callDb(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
        System.out.println("Initialising variables");
        ip = args[0];
        port =  Integer.parseInt(args[1]);
        databaseName = args[2];
        db_userid = args[3];
        db_password = args[4];
        try{
        Log logger = LogFactory.getLog(Main.class);
        System.out.println("Opening logger...");
        logger.debug("opening driver " + SQLDRIVER);
        System.out.println("Creating connection instance...");
        Class.forName(SQLDRIVER).newInstance();
        System.out.println("Driver Manager.getConnection...");
        conn = DriverManager.getConnection(getDBURL(), db_userid, db_password);
        System.out.println("Connection prepare statement...");
        PreparedStatement ps = conn.prepareStatement("select * from nstupersonal");
        System.out.println("Executing query...");
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
            System.out.println(rs.getString("StudentId"));
        }
        }catch(Exception e){
            System.out.println(e.getMessage());
        }

        conn.close();
    }


    private String getDBURL(){
                String url = "";
                try {
                    url = "jdbc:sqlserver://" + ip
                    +":" + port +";databaseName="+
                     databaseName + ";user=" + db_userid + ";password="+db_password;
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }   
                return url;
            } 

}

Это код, который запускается. В консоли он буквально просто висит на производстве. Кажется, он всегда зависает на SQL Server 2008, но отлично работает на всех остальных моих клиентах. Работает аналогично ...

TCP / IP включен на 1433 в SQL Server и разрешить удаленным соединениям значение true в консоли управления.

java -jar порт ipaddress dbname пароль пользователя

Есть идеи? Драйвер SQL не так? Я использую sqljdbc4.jar

Полученная командная строка ...

Инициализирующие переменные Открытие регистратора ... Driver Manager.getConnection ...

Не исключение, выбрасывается

Спасибо

* * D тысячу двадцать-один

Ответы [ 3 ]

11 голосов
/ 24 января 2012

Если производство выполняется на Java 6 с обновлением 29, то либо обновите до Java 6 с обновлением 30, либо перейдите на Java 6 с обновлением 27 (?). Обновление 29 содержит ошибку , из-за которой SSL работает некорректно и соединение с SQL Server зависает.

1 голос
/ 31 декабря 2012

Я столкнулся с тем же поведением с драйвером MS SQL Server 2012 + JDBC 4.0, и снова возникла проблема с обновлением 29 JDK 6.0.Соединение зависало при первом вызове executeQuery () или даже с setAutoCommit (false) перед выполнением любого запроса.После обновления до JDK 6.0 с обновлением 37 все работает нормально.

HTH, Michal

1 голос
/ 24 января 2012

Вы можете сделать снимок следов стека потоков и посмотреть, где он застрял. Если это в чтении сокета - что-то не так в БД (я думаю, что это было бы здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...