# jdbc grundlegende verbindung zu sql server geht nicht



## Guest (10. Dez 2007)

Moin,

vielleicht kann mir von euch jemand helfen. Ich bekomme folgendes Skript gar nicht zum Laufen. Es wird einfach keine Verbindung aufgebaut.

Ich habe MS SQL Server 2005 installiert. Das läuft auf localhost und wenn ich ne Verbindung aufbaue ist der Benutzer als LATOSSEK-64BIT\Administrator aufgelistet. Fragt sich ob der Computername hier so wichtig ist für den Connection String. Wenn ich nur Administrator beim ConnectionString eingebe kommt der Fehler:

com.microsoft.sqlserver.jdbc.SQLServerException: Fehler bei der Anmeldung für den Benutzer 'Administrator'. Der Benutzer ist keiner vertrauenswürdigen SQL Server-Verbindung zugeordnet

Auch bin ich mir nicht sicher, ob es an der Zeile Class.forName liegt. Ich habe das Packet nicht in den Clathpath auf genommen sondern separat in Eclipse beim Erstellen des Projektes mit geladen. Der Treiber sollte also stimmen. Der ConnectionString ist halt fragwürdig. Im Internet findet man keinerlei verständliche Aussage woher man die Daten bekommt. Ich habe also keine Ahnung ob jdbc:sqlserver:// überhaupt richtig ist. Danach sollte der Servername kommen, was bei mir localhost ist und der user. Passwort gibt es nicht. Wie bereits gesagt, kommt die obige Fehlermeldung.

Ich muss schon sagen, dass Java in diesem Zusammenhang einfach nur nervig ist und man ständig alle Packete nachinstallieren muss. SQL Server, Oracle usw. sind standart DBs warum die nicht einfach implementiert sind, verstehe ich nicht. Aber das ist eben Java... es geht auch umständlich. Eben das was .Net hat und Java nicht.

Aber danke für die Hilfe!


```
import java.sql.*;

public class Zugriff {

	public static void main(String[] args) {
		
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
		      Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );
		    }
		    catch ( ClassNotFoundException e ) {
		      e.printStackTrace();
		      System.exit(1);
		    }

		    try{
		      con = DriverManager.getConnection("jdbc:sqlserver://localhost;user=Administrator");

		      stmt = con.createStatement();

		      rs = stmt.executeQuery("SELECT * FROM stadt");

		      while ( rs.next() ){
		        System.out.println("Name: " + rs.getString(1));
		      }

		      rs.close();
		      stmt.close();
		      con.close();
		    }

		    catch ( SQLException e ){
		     e.printStackTrace();
		      System.exit(1);
		    }  

	}

}
```


----------



## Guest (10. Dez 2007)

Ich habe nen String wie diesen hier noch probiert, um direkt an die DB zu kommen... aber auch ohne Erfolg.


```
con = DriverManager.getConnection("jdbc:sqlserver://localhost; DATABASENAME = Kreis Holzminden","Administrator","");
```


----------



## FenchelT (10. Dez 2007)

Hallo,

Du solltest hinter localhost noch ein *:1433* anhaengen, sofern 1433 der Port ist, auf dem Deine MSSQL Server Instanz laeuft?!

Benutzt Du den MSSQL Server >= Standard oder die Express Version?


----------



## Guest (10. Dez 2007)

An 1433 liegt es nicht.

Ich benutze den Standart.

Im Internet lese ich noch solche Sachen:



> Lösung
> 
> Um einen Benutzer anzulegen, bin ich wie folgt vorgegangen:
> 
> ...



Habe allerdings das Problem, dass es der Express ist und ich gar nicht weiß, wie ich es in der Standartversion anstelle. Denn die Punkte Sicherheit usw. gibt es da nicht. Da kommt direkt die Anmeldung erstmal und dann bin ich auch schon auf der Oberfläche.


----------



## maki (10. Dez 2007)

Ungefähr so:
Ein Login Account mit dem man sich anmeldet, diesem account solltest du ein Standardschema zuweisen, eine Rolle für die DB vergeben (owner) und  zum Datenbankbenutzer mappen.

Hast du so etwas wie ein "SQL Server 2005 Management Studio"?
Was sagt die Doku?


----------



## y0dA (11. Dez 2007)

Versuche es mal hiermit, denke dass es um das *SSL* geht, ist zwar mit SQL Server 2000 getestet, aber ich denke trotzdem dass es sich um ein SSL Problem handelt.


```
package at.pcd.wam.technologie.controller;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import net.sourceforge.jtds.jdbcx.JtdsDataSource;
import net.sourceforge.jtds.ssl.Ssl;

public class JtdsConnection {

	/**
	 * @param args
	 */
    public static void main(String[] args) {

        JtdsDataSource datasource = new JtdsDataSource();
        datasource.setServerName("www.servername.de");
        datasource.setDatabaseName("Datenbankname");
        datasource.setUser("*******"); //Benutzername im SQL Server mit Zugriff auf pubs
        datasource.setPassword("******"); //Benutzerpasswort im SQL Server
        datasource.setSsl(Ssl.SSL_REQUEST);
        datasource.setPortNumber(1433); //Standard MS SQL Server 2000 Port
        datasource.setCharset("UTF-8"); //aktuell beim MS SQL Server 2000
                                        //eingestelltes Zeichen Encoding (Wichtig!)
        datasource.setDescription("JTDS Datasource");

        Connection connection = null;
        try {
              //Verbindung aufbauen
              connection = datasource.getConnection();

              if (connection == null)
                    throw new SQLException("con == null");

              Statement stmt = connection.createStatement();

              //Abfrage definieren
              ResultSet rs = stmt.executeQuery("SELECT * FROM dbo.driver");

              if (rs == null)
                    throw new SQLException("rs == null");

              ResultSetMetaData rsmd = rs.getMetaData();
              //Anzahl der Spalten ermitteln
              int clmCnt = rsmd.getColumnCount();

              //Datensätze ausgeben
              while (rs.next()) {
                    for (int i = 1; i <= clmCnt; i++)
                          System.out.print(rs.getString(i) + " ");
                    System.out.println();
              }

              //Verbindung schließen
              connection.close();

        } catch (SQLException e) {
        	e.printStackTrace();
        }
    }
}
```


----------



## maki (11. Dez 2007)

Wieso denn nun ein SSL Problem?

Ich finde die Exception sehr aussagekräftig.

Gibt es den "Administrator" überhaupt in der DB?


----------



## y0dA (11. Dez 2007)

Ich sehe hier nix von einer Execption? Bin ich blind?



> com.microsoft.sqlserver.jdbc.SQLServerException: Fehler bei der Anmeldung für den Benutzer 'Administrator'. Der Benutzer ist keiner vertrauenswürdigen SQL Server-Verbindung zugeordnet



ah gefunden ich habe, na dann nehme ich das mit dem SSL zurück.


----------



## maki (11. Dez 2007)

War aber auch sehr versteckt 

Ist aber trotzdem interessant zu wissen wie das mit dem SSL geht, zumindest für mich


----------



## y0dA (11. Dez 2007)

maki hat gesagt.:
			
		

> War aber auch sehr versteckt
> 
> Ist aber trotzdem interessant zu wissen wie das mit dem SSL geht, zumindest für mich



Ja hatte mich 4 Stunden gekostet bis ich endlich draufkam was der sql server von mir wollte


----------

