JDBC: exemple Simple de connexion MSSql qui ne fonctionne pas

j'apprends Java et j'ai juste besoin d'exécuter quelque chose de simple pour récupérer des données à partir de MSSQL via JDBC. L'exemple dans mon livre ne fonctionne pas (mais il a plusieurs années) et cet exemple ci-dessous de MS ne fonctionne pas pour moi non plus:

http://msdn.microsoft.com/en-us/library/ms378956 (v=sql.90).aspx

Voici mon code:

package javasql;
import java.sql.*;
import java.util.*;

public class Program {

    private static String url = "jdbc:sqlserver://localhostSQLExpress;database=Northwind;integratedSecurity=true;";
    //private static String userName = "sa";
    //private static String password = "myPassword";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        RunDemo();
    }

    public static void RunDemo() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection connection = DriverManager.getConnection(url);

            Statement statement = connection.createStatement();
            ResultSet results = statement.executeQuery("SELECT ProductName, Price FROM Products ORDER BY ProductName");

            while(results.next()) {
                System.out.println("Product Name: " + results.getNString("ProductName") + " Price: $" + results.getFloat("UnitPrice"));
            }

        } catch (ClassNotFoundException | SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

quand je lance le code, je n'obtiens aucune exception.. Je viens d'obtenir ce dans la sortie fenêtre:

run:
com.microsoft.sqlserver.jdbc.SQLServerDriver
BUILD SUCCESSFUL (total time: 0 seconds)

J'utilise NetBeans 7.2. Svp quelqu'un me donner un exemple de travail.

EDIT:

Par ailleurs, pour la chaîne de connexion, où vous voyez les SQLExpress, j'ai essayé de la retirer et à l'aide de instanceName=SQLExpress à la place.. mais qui n'ont pas d'effet non plus.

EDIT 2:

OK, j'ai téléchargé le dernier pilote JDBC pour MSSQL depuis MS et j'ai référencé les 2 fichiers JAR qui s'y trouvent. Maintenant, je suis l'obtention de ce résultat:

run:
The connection to the host localhost, named instance SQLExpress failed. 

Error: "java.net.SocketTimeoutException: Receive timed out". 

Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434.  
For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
BUILD SUCCESSFUL (total time: 15 seconds)

Progrès.. au moins nous pouvons voir que c'est en essayant de se connecter maintenant, quelqu'un peut-il m'éclairer quant à l'erreur ci-dessus, si?

EDIT 3:

2 autres problèmes résolus.. l'une est enable SQL Server Browser et la seconde était d'activer TCP/IP pour SQL Server. Merci @Vikdor maintenant je reçois cette erreur:

run:
The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
BUILD SUCCESSFUL (total time: 15 seconds)

j'ai vérifié le pare-feu windows et ajouté une règle entrante pour autoriser ce port, mais je suis toujours obtenir l'erreur ci-dessus. Des idées?

EDIT 4:

Essayé la solution dans ce lien: http://www.coderanch.com/t/306316/JDBC/databases/SQLServerException-TCP-IP-connection-host

ne plus avoir d'erreur dans EDIT 3. Maintenant obtenir un autre...

run:
Sep 21, 2012 11:33:16 AM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
WARNING: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path
This driver is not configured for integrated authentication. ClientConnectionId:577f359e-4774-45f3-96fb-588785911817
BUILD SUCCESSFUL (total time: 14 seconds)

très fatigué maintenant.. pourquoi Java, pourquoi?? Sérieusement...Je suis contente de travailler surtout avec .NET. Eh bien, quand je trouverai la solution, je le posterai ici pour faire bien sûr, ça peut aider les autres avant qu'ils ne deviennent fous comme je vais le faire...

EDIT 5:

Cela a aidé: java connexion à MicrosoftSQLServer 2005

j'ai mis le chemin de répertoire dans ma variable D'environnement PATH. N'a pas fonctionné, donc j'ai aussi placé le sqljdbc_auth.dll dans mon dossier JDK C:Program FilesJavajdk1.7.0_04bin. Résoudre.

18
demandé sur Community 2012-09-21 07:32:36

8 réponses

OK, alors voici ce qui a résolu mes problèmes:

  1. télécharger le dernier pilote MSSQL JDBC ici: http://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx

  2. référencé les 2 fichiers JAR dans mon projet: sqljdbc.jar et sqljdbc4.jar (Je ne suis pas encore sûr si les deux sont nécessaires ou seulement un..)

  3. assurez-vous que le service SQL Server Browser windows est cours d'exécution

  4. ouvrez SQL Server Configuration Manager et allez à protocoles pour SQLEXPRESSConfiguration du Réseau SQL Server. Cliquez-droit sur TCP / IP et choisissez Propriétés. Set Activé = Oui.

  5. Pendant que vous y êtes, cliquez sur adresses IP tab et trouver la section IP All. Set Port TCP pour 1433.

  6. Ajouter sqljdbc_auth.dll pour votre Variable d'Environnement PATH. Dans mon cas: D:\Java\sqljdbc_4.0\enu\auth\x64

  7. Copier sqljdbc_auth.dll pour votre répertoire JDK. Dans mon cas: C:\Program fichiers\Java\jdk1.7.0_04\bin

j'espère que cela aide quelqu'un.

28
répondu Matt 2014-07-31 18:54:06

Vous voudrez peut-être vérifier les étapes que j'ai énumérés ici: erreur: la connexion TCP/IP à l'hôte a échoué. java.net.ConnectException: Connection refused: connect et voir si L'instance SQLExpress est configurée correctement, puis modifier votre URL JDBC pour spécifier le nom de l'instance séparément. L'exemple est pour l'authentification par mot de passe, mais fonctionne avec votre integratedSecurity=true; propriété.

4
répondu Vikdor 2017-05-23 11:47:13

Merci finalement ça marche. Si elle montre ci-dessous le message d'erreur,

 Verify the server and instance names and check that no firewall is blocking
 UDP traffic to port 1434. For SQL Server 2005 or later,
 verify that the SQL Server Browser Service is running on the host

Veuillez activer Sql Server Browser,

Démarrer> Panneau De Contrôle> Systèmes Et Sécurité>outils d'Administration> Services

Sélectionner SQL Server Browser faites un clic droit et sélectionnez propriétés.

définir le type de départ comme automatique. Cliquez sur Appliquer > cliquez sur démarrer > cliquez sur Ok

assurez - vous que votre adresse IPAll TCP est - 1433 !

4
répondu Cnf271 2014-07-17 14:01:31

Causes:

  1. le protocole (TCP / IP) n'est pas activé
  2. le Port est incorrect
  3. manquant de sqljdbc_auth.dll
2
répondu user3029620 2013-11-25 18:15:36

Nommé et Plusieurs Instances SQL Server

si vous avez besoin de vous connecter d'uni* à une instance nommée, faites attention quand vous construisez le URL de connexion JDBC

si un portNumber et un instanceName sont utilisés, le portNumber aura priorité et le instanceName sera ignoré.

cela signifie aussi que si vous voulez utiliser des noms D'Instance, vous ne pouvez pas changer le port nombre.

dans l'une de ces lignes le paramètre myinstancename sera ignoré:

  • jdbc: sqlserver: / / db-devmyinstancename;databaseName=mydbname;portNumber=1433
  • jdbc: sqlserver: / / db-dev;databaseName=dbname;instanceName=myinstancename;portNumber=1433
  • jdbc: sqlserver: / / db-dev\myinstancename: 1433;databaseName=mydbname
  • jdbc: sqlserver: / / db-dev: 1433;databaseName=dbname;instanceName=myintancename

donc si vous voulez utiliser des noms d'instance le numéro de port doit être supprimé (essayé avec jdbc sql server pilotes ver. 3, 4, 4.1)

2
répondu freedev 2014-12-29 13:37:10

c'est peut-être idiot, mais vérifiez que votre table de produits n'est pas vide. Est la seule raison pour laquelle je ne vois aucune exception et aucune impression dans la console.

1
répondu Hernan Velasquez 2012-09-21 03:43:54

veuillez activer le navigateur du serveur Sql par, Démarrage > Panneau de contrôle > systèmes et sécurité > Outils administratifs > Services Sélectionnez le navigateur SQL Server clic droit et sélectionnez Propriétés.

définir le type de départ comme automatique. Cliquez sur Appliquer > cliquez sur démarrer > cliquez sur Ok

assurez - vous que votre adresse IPAll TCP est-1433 !

0
répondu praveen g 2017-04-23 18:33:48

dans mon cas : Je n'ajoutais pas le numéro de port dans la chaîne URL

String url = "jdbc:sqlserver://ABC\SQLEXPRESS;databaseName=xyz;portNumber=1433"

il a résolu mon problème

0
répondu uniqueSolutions 2018-10-04 21:32:18