Avatar billede odsgaard Praktikant
29. februar 2012 - 20:43 Der er 8 kommentarer og
1 løsning

ODBC + SQLServer 2005 EXPRESS

Hej Eksperter

Jeg er ved at lege lidt med java og sqlserver 2005. Kan ikke få oprettet forbindelsen til databasen og har ikke kunnet finde noget på nettet, der kunne hjælpe mig på vej.

Jeg har oprettet en ODBC datakilde (under System-DNS) som tester ok:

Microsoft SQL Native Client Version 09.00.4035
Running connectivity tests...
Attempting connection
Connection established
Verifying option settings
Disconnecting from server
TESTS COMPLETED SUCCESSFULLY!

Jeg har oprettet en DAO klasse, der skal lave forbindelsen:
public class Dao {

public static void main(String[] args) {
Connection con = null;
String odbc = "sqlnative";
String username = "sa";
String password = "root";
String connString = "jdbc:odbc:" + odbc;
try {
con = DriverManager.getConnection(connString, username,password);
System.out.println("Connection created ....");
con.close();
System.out.println("Disconnected to database");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Når jeg kører denne klasse får jeg følgende fejl:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Streng- eller bufferlængden er ugyldig.
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.buildTypeInfo(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at dao.Dao.main(Dao.java:20)

Jeg har prøvet at google rundt efter et svar, men har ikke fundet noget jeg kunne bruge.

Håber, at der er nogle af jer, der kan hjælpe mig

Hilsen
Brian
Avatar billede odsgaard Praktikant
29. februar 2012 - 20:45 #1
I øvrigt, så kører min computer med w7x64 og jeg har installeret en sqlserver 2005 express, da det er den jeg skal prøve at få til at virke.

/Brian
Avatar billede arne_v Ekspert
29. februar 2012 - 20:49 #2
JDBC-ODBC bridgen sucks.

Hvorfor installerer du ikke den rigtige JDBC driver for SQLServer?

Ja - MS har lavet saadan en!
Avatar billede odsgaard Praktikant
29. februar 2012 - 21:06 #3
Har du et link til den 'rigtige' JDBC driver - så prøver jeg den :)

/Brian
Avatar billede arne_v Ekspert
29. februar 2012 - 21:24 #4
Avatar billede odsgaard Praktikant
29. februar 2012 - 23:47 #5
Efter nu at have prøvet i flere timer at få hul igennem til databasen, må jeg erkende, at jeg har givet op.

Jeg kan simpelthen ikke forstå hvad der er galt. Det er ikke noget problem at lave hul igennem til en  MySQL database, men SQLServer 2005 gider simpelthen ikke snakke med mig ..... :(

Nedenstående program giver denne fejl:
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties, check that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port, and that no firewall is blocking TCP connections to the port.".
   
Jeg har prøvet at tjekke tcp/ip indstillingerne på SQLServeren, deaktiveret firewall og en hulens masse mere.

Er der nogle forslag ..... ? -> udover at droppe at bruge SQLExpress 2005, hvilket nok bliver enden på det hele ...

/Brian


public class TestJDBC {
    private java.sql.Connection con = null;
    private final String url = "jdbc:sqlserver://";
    private final String serverName = "localhost";
    private final String portNumber = "1433";
    private final String databaseName = "test";
    private final String userName = "sa";
    private final String password = "root";

    public TestJDBC() {
        System.out.println(getConnectionUrl());
        getConnection();
        closeConnection();
    }

    private String getConnectionUrl() {
        return url + serverName + ":" + portNumber + ";DatabaseName="
                + databaseName;
    }

    private Connection getConnection() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(getConnectionUrl(), userName,
                    password);
            if (con != null) {
                System.out.println("Connection successfull");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }

    private void closeConnection() {
        try {
            if (con != null) {
                con.close();
            }
            con = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {

        new TestJDBC();
    }
}
Avatar billede arne_v Ekspert
29. februar 2012 - 23:53 #6
Hvis du laver:

netstat -an

er der saa noget paa port 1433?
Avatar billede arne_v Ekspert
29. februar 2012 - 23:53 #7
Re config: er TCP aktiveret og den bruger port 1433 paa alle IP addresser?
Avatar billede odsgaard Praktikant
03. marts 2012 - 17:06 #8
Så lykkedes det. Jeg havde aktiveret TCP, men ikke fået åbnet for den rigtige ip adresse. Efter at have åbnet dem alle fandt jeg frem til det.

Tak for hjælpen - smider du et svar
Avatar billede arne_v Ekspert
03. marts 2012 - 17:30 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester