Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JDBC connection hangs with no response from SQL Server 2008 r2

When connecting to SQL Server 2008 (express locally, full server in production) this works fine for me when developing on my local machine, but this thing just hangs in production.

Here is the code :

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;
            } 

}

That's the code that gets run. In the console it literally just hangs in production. It always seems to hang on SQL server 2008 but works fine in production for all my other customers. Runs simiply with...

TCP/IP is enabled on 1433 in SQL Server and allow remote connections is set to true in the management console.

java -jar ipaddress port dbname user password

Any ideas? Is the SQL driver wrong? I'm using sqljdbc4.jar

The resulting command prompt is...

Initialising variables Opening logger... Driver Manager.getConnection...

No exception gets thrown

Thanks,

D

like image 455
david99world Avatar asked Jan 24 '12 11:01

david99world


People also ask

How do I know if my JDBC connection is successful?

First, it submits a validation query to the database. Second, it uses the timeout parameter as a threshold for the operation. Finally, the connection is marked as valid if the operation succeeds within the timeout.

How do I fix no suitable driver found for JDBC Sqlserver?

This happens because many developers use jTDS driver in the development environment and Microsoft JDBC driver (sqljdbc4. jar) in the production environment. In order to solve that error, just remove the jTDS driver and add Microsoft JDBC driver i.e. sqljdbc4. jar in your project's build path.

Which JDBC driver for SQL Server?

The Microsoft JDBC Driver for SQL Server is a Type 4 JDBC driver that provides database connectivity through the standard JDBC application program interfaces (APIs) available on the Java platform. The driver downloads are available to all users at no extra charge.


1 Answers

If production is running on Java 6 Update 29, then either upgrade to Java 6 Update 30 or downgrade to Java 6 update 27(?). Update 29 contains a bug where SSL doesn't work correctly and the connection to SQL Server hangs.

like image 82
Mark Rotteveel Avatar answered Oct 02 '22 05:10

Mark Rotteveel