杰瑞科技汇

Java连接SQLServer的JDBC配置步骤?

Of course! Here is a comprehensive guide on how to use Java to connect to a Microsoft SQL Server database using JDBC (Java Database Connectivity).

Java连接SQLServer的JDBC配置步骤?-图1
(图片来源网络,侵删)

This guide covers everything from setting up your project to writing the code and handling potential issues.


Prerequisites

Before you start, make sure you have the following:

  1. Java Development Kit (JDK): Installed and configured on your system.
  2. SQL Server Instance: A running SQL Server (e.g., Express, Developer, or Standard edition).
  3. A Database and User on SQL Server:
    • A database you want to connect to (e.g., MyTestDB).
    • A SQL Server login with permissions on that database.
  4. SQL Server JDBC Driver: The JAR file that allows Java to communicate with SQL Server.

Get the SQL Server JDBC Driver

You need the JDBC driver JAR file. Microsoft provides it as a free download.

Easy Method (Recommended): Use Maven or Gradle

Java连接SQLServer的JDBC配置步骤?-图2
(图片来源网络,侵删)

This is the best practice as it handles dependency management for you.

For Maven: Add this dependency to your pom.xml file. Check the Maven Central Repository for the latest version.

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.6.1.jre11</version> <!-- Use the latest version compatible with your JDK -->
</dependency>

For Gradle: Add this line to your build.gradle file's dependencies block.

implementation 'com.microsoft.sqlserver:mssql-jdbc:12.6.1.jre11' // Use the latest version

Manual Method: If you're not using a build tool, download the JAR file directly from the official Microsoft site:

Java连接SQLServer的JDBC配置步骤?-图3
(图片来源网络,侵删)
  1. Go to the Microsoft JDBC Driver for SQL Server download page.
  2. Download the JAR file that matches your Java version (e.g., "JDBC 11.2.x for JDBC 4.3").
  3. Add the downloaded .jar file to your project's classpath.

Connection URL Syntax

The most critical part is the JDBC connection URL. It tells the driver how to find and connect to your database.

Basic Format: jdbc:sqlserver://[server_name][;databaseName=database_name][;user=user][;password=password]

Breakdown:

  • jdbc:sqlserver://: The protocol and sub-protocol.
  • [server_name]: The address of your SQL Server.
    • Localhost: localhost or 0.0.1
    • Named Instance: localhost\\SQLEXPRESS (for a default named instance)
    • Remote Server: 168.1.100 or dbserver.yourdomain.com
    • Default Port (1433): Usually not needed if it's the default. If you use a non-default port, add ;port_number=1433.
  • [;databaseName=database_name]: Highly Recommended. Specifies the database to connect to. If omitted, you might connect to the default database of the user, which can be unpredictable.
  • [;user=user]: The SQL Server username.
  • [;password=password]: The SQL Server password.

Examples:

  1. Connecting to a local default instance on the default port: jdbc:sqlserver://localhost;databaseName=MyTestDB;user=sa;password=your_strong_password

  2. Connecting to a local named instance (e.g., SQLEXPRESS): jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=MyTestDB;user=sa;password=your_strong_password

  3. Connecting to a remote server with a specific port: jdbc:sqlserver://192.168.1.100;port=1433;databaseName=MyTestDB;user=myuser;password=mypassword


Java Code Example (Try-with-Resources)

This is the modern, recommended way to handle database connections in Java. The try-with-resources statement ensures that your connection, statement, and result set are automatically closed, even if an error occurs.

This example performs a simple SELECT query.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServerJdbcExample {
    // Replace with your database connection details
    private static final String DB_URL = "jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=MyTestDB;encrypt=true;trustServerCertificate=true;";
    private static final String USER = "sa";
    private static final String PASS = "your_strong_password";
    public static void main(String[] args) {
        // The try-with-resources statement ensures that the connection is closed automatically.
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT id, name, email FROM Users")) {
            // Check if the connection was successful
            if (conn != null) {
                System.out.println("Connected to the database successfully!");
            }
            // Loop through the result set and print the data
            System.out.println("ID\tName\tEmail");
            System.out.println("--------------------");
            while (rs.next()) {
                // Retrieve by column name is safer and more readable
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String email = rs.getString("email");
                System.out.println(id + "\t" + name + "\t" + email);
            }
        } catch (SQLException e) {
            System.err.println("Connection error or SQL error!");
            e.printStackTrace();
        }
    }
}

Important Configuration Parameters (SSL/TLS)

For modern SQL Server connections, especially in production, you should use SSL/TLS encryption. You have two main options:

A. encrypt=true;trustServerCertificate=true; (For Development/Testing)

  • encrypt=true: Tells the driver to use SSL encryption.
  • trustServerCertificate=true: This is for development only! It tells the driver to trust any SSL certificate presented by the server, even if it's self-signed or not trusted by your Java's truststore. Do not use this in production.

Example URL: jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=MyTestDB;user=sa;password=your_password;encrypt=true;trustServerCertificate=true;

B. Proper Certificate Handling (For Production)

In a production environment, you should properly configure your Java truststore to trust the SQL Server's certificate.

  1. Export the SQL Server Certificate:

    • Use SQL Server Management Studio (SSMS) or openssl to get the server's certificate.
    • In SSMS, connect to your server, right-click on the server name -> Properties -> Security -> "View Certificate". Export it as a .cer or .crt file.
  2. Import the Certificate into Java's Truststore:

    • Open a command prompt and run the keytool command.
      keytool -import -alias sqlserver-cert -file path/to/your/certificate.cer -keystore $JAVA_HOME/lib/security/cacerts
    • You will be prompted for the keystore password (the default is changeit).
  3. Update your Connection URL:

    • Remove trustServerCertificate=true.
    • The driver will now automatically use the certificates in your cacerts file to validate the server's identity.

Example Production URL: jdbc:sqlserver://prod-db-server;databaseName=MyProdDB;user=app_user;password=app_password;encrypt=true;


Troubleshooting Common Issues

Issue / Error Message Possible Cause and Solution
The TCP/IP connection to the host has failed. Network/Connection Issue: SQL Server may not be configured to accept TCP/IP connections.
Fix: In SSMS, go to Server Properties -> Connections and ensure "Allow remote connections to this server" is checked. Also, check the SQL Server Configuration Manager to ensure the TCP/IP protocol is enabled and running.
Login failed for user 'user'. Authentication Issue: The username or password is incorrect, or the user does not have permission to access the database.
Fix: Double-check credentials. Try connecting with SSMS using the same details.
The driver is not configured for integrated authentication. Windows Authentication Issue: You are trying to use integrated security (integratedSecurity=true) but the JDBC driver JAR you downloaded does not include the necessary Windows libraries.
Fix: Download the "Microsoft JDBC Driver for SQL Server"
分享:
扫描分享到社交APP
上一篇
下一篇