2014-07-01 8 views
5

Ich habe das heute ungefähr 3 Stunden lang untersucht, und ich fühle mich, als ob ich nah dran bin, aber ich habe ein paar Fragen. Die beste Quelle für Informationen, die ich bisher gefunden habe, ist hier: https://stackoverflow.com/a/2840358, aber es beantwortet nicht alle meine Fragen.Wie erzeuge ich eine JDBC-Datenbank-URL?

Ein wenig Hintergrund: Ich verwende Microsoft SQL Server 2014 und ich habe überprüft, dass die IP-Adresse 127.0.0.1 aktiv ist und mit dem Port 1433 aktiviert ist. Ich habe keine Probleme mit der Datenbank über das SQL Server-Programm auf demselben Computer, aber ich versuche, eine Verbindung über ein Java-Programm herzustellen, das ich schreibe, und es gibt derzeit diesen Fehler: com.microsoft.sqlserver.jdbc.SQLServerException: Die Portnummer 1433/R2M_Database ist nicht gültig. Ich bin verwirrt, weil ich weiß, dass der Port 1433 korrekt ist, und ich weiß, dass die Datenbank, die ich verbinden möchte, R2M_Database heißt. Nun, hier sind meine Fragen zusammen mit meinem Quellcode.

1.) Was ist der Unterschied zwischen den Subprotokollen "mysql" und "sqlserver", und woher weiß ich, welche zu verwenden? (Ich bin mir ziemlich sicher, dass ich sqlserver verwenden sollte, aber nur für den Fall)

2.) Wie stelle ich sicher, dass ich den richtigen Hostnamen verwende? (Ich bin mir ziemlich sicher, dass 127.0.0.1/localhost der ist, den ich verwenden soll, aber wie kann ich dieses Programm von anderen Rechnern ausführen, um auf die Datenbank zuzugreifen?)

3.) Gibt es welche? externe Probleme, die dies verursachen könnten wie Firewalls oder Passwortanforderungen? (Ich bin ziemlich sicher, dass der Benutzername und das Passwort korrekt sind, da sie die, die ich erfolgreich verwenden sind, um eine Verbindung in Microsoft SQL Server zu erhalten 2014)

EDIT:

import java.sql.DriverManager; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import org.apache.ibatis.jdbc.ScriptRunner; 

public class SQLTest { 
    public static void main(String[] args){ 
     String script = "CreatePersons.sql"; 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      new ScriptRunner(DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=R2M_Database", userName, password)) 
        .runScript(new BufferedReader(new FileReader(script))); 
     } catch (Exception e) { 
      System.err.println(e); 
     } 
    } 
} 

ich eine leichte Syntax Änderung (; Datenbankname = anstelle von /), und jetzt erhalte ich diesen Fehler:

com.microsoft.sqlserver.jdbc.SQLServerException: Anmeldung fehlgeschlagen für Benutzer 'RSquaredMacro'. ClientConnectionId: 35281a40-0f87-42e4-bc46-b9a81a371529

+0

Wenn Sie Probleme haben, verbinden, höchstwahrscheinlich das Problem ist, dass Sie noch nicht die TCP aktiviert haben/IP-Listener an Port 1433. Ein kurzer "netstat -an" -Befehl sagt Ihnen, ob er gehört hat. Überprüfen und kommentieren Sie, was Sie bekommen haben ??? –

+0

Dies ist, was ich bekam, als ich "netstat -an" machte: [Bild von Protokoll] (http://i.imgur.com/vjh2LZO) – user1654889

+0

Gemäß Ihrer Abbildung, Port-Nr. 1433 hört zu. Es ist also überhaupt kein Problem! –

Antwort

3
  1. mysql ist eine ganz andere Datenbankserver. Verwenden Sie es nicht für SQL Server.

  2. müssen Sie eine öffentliche Adresse für Ihren Datenbankserver bereitstellen. entweder eine IP oder ein Hostname ist in Ordnung, solange alle Ihre Clients es sehen können. Wenn Sie keine haben, können Sie versuchen, dyndns.org oder etwas ähnliches zu verwenden. Beachten Sie, dass Ihre Clients weiterhin Zugriff auf Ihren Server im Netzwerk haben müssen (potenzielle Firewall-Probleme). Schwer zu sagen mehr ohne mehr über Ihre Situation zu wissen.

  3. Eine Firewall könnte möglicherweise ein Problem sein, aber dies ist unwahrscheinlich für localhost. Ich vermute, das Problem ist mit den TCP/IP-Listener, Benutzernamen, Passwort oder Datenbanknamen Einstellungen.

Hier ist ein Link mit weiteren Informationen über einen String JDBC-Verbindung Aufbau: http://technet.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx

Auch einige Randnotizen:

  1. Sie brauchen nicht die 1433-Port-Nummer enthalten.

  2. Das Drucken der gesamten Stack-Trace hilft Ihnen beim Debuggen. (siehe unten Code)

  3. Sie sollten eine Variable für Ihre Verbindung deklarieren und sicherstellen, dass es geschlossen wird. Beispiel:

    Connection c = null; 
    try { 
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
        c = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433/R2M_Database", userName, password); 
        new ScriptRunner(c).runScript(new BufferedReader(new FileReader(script))); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } finally { 
        if (c != null) try { c.close(); } catch (Exception e) { } 
    } 
    
+0

Danke für die Hilfe, ich werde dyndns.org betrachten. Der Port, nach dem ich suche, scheint auf der Grundlage des Netstat-Befehls zu hören, den ich ausgeführt habe. Ich habe einige weitere Dokumente durchgesehen und eine Bearbeitung vorgenommen, die Ihre Passwort-/Benutzernamen-Theorie wahrscheinlich erscheinen lässt, aber ich habe dieses Passwort und meinen Benutzernamen heute erfolgreich verwendet. – user1654889

+0

Gibt es Sonderzeichen (besonders Backslash) im Passwort? Versuchen Sie 'System.err.println (" passwd = "+ password)', um den Wert zu bestätigen. – Barett

+0

Das Passwort wurde korrekt gedruckt. Es ist eine Zeichenfolge aus Zahlen und Buchstaben ohne Sonderzeichen. – user1654889

0

Es stellt sich heraus, dass das Problem alle in der Formatierung meiner JDBC-URL war. Das Problem, das ich hatte, war, dass verschiedene Subprotokolle unterschiedliche Syntax für ihre URL-s, aber die Syntax für das SQLServer-Protokoll (und wie jedes Teil zu finden) ist unten aufgeführt:

"jdbc:sqlserver://" + serverName + ";database=" + databaseName 

1.) -serverName: finden Name Ihres Servers, stellen Sie eine Verbindung zu Microsoft SQL Server her (diese Anweisungen basieren auf SQL Server 2014), und sehen Sie sich den Bereich "Eigenschaften" auf der rechten Seite an. Wählen Sie "Aktuelle Verbindungsparameter" in der Combobox oben und schauen Sie unter "Verbindungsdetails" nach dem Feld "Servername".

2.) databaseName: Dies ist ziemlich einfach, da es der Name der Datenbank ist, auf die Sie Daten zugreifen möchten. Obwohl der Benutzer, bei dem Sie sich anmelden, unter der "Master" -Datenbank aufgeführt ist, müssen Sie sich nicht bei "Master" anmelden, sondern Sie können jede gewünschte Datenbank verwenden, solange der Benutzer, mit dem Sie sich anmelden, berechtigt ist um die Aufgaben zu erledigen, die Sie erreichen möchten.

Endlich: hier ist der Link, den ich endlich mein Problem lösen half, die mehr ins Detail geht: http://www.programcreek.com/2010/05/java-code-for-connecting-ms-sql-server-by-using-sql-server-authentication/

Verwandte Themen