mssqljdbc:实现微软SQL数据库和Java之间的连接

1. 简介

mssqljdbc是微软提供的官方JDBC驱动程序,它使得Java应用程序能够连接到Microsoft SQL数据库。使用mssqljdbc可以方便地在Java应用程序中执行各种操作,例如查询、插入、更新和删除数据。

2. 下载mssqljdbc驱动程序

在使用mssqljdbc之前,需要先下载并安装这个驱动程序。可以从Microsoft的官方网站上下载文件,网址为:https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017

驱动程序的文件名为mssql-jdbc-7.0.0.jre8.jar。将这个文件复制到您的项目的classpath中。在Eclipse中,可以将它放到“WebContent/WEB-INF/lib”文件夹中,在IntelliJ IDEA中,可以将它放到“src/main/resources”文件夹中。

3. 连接到Microsoft SQL数据库

连接到Microsoft SQL数据库的第一步是使用JDBC驱动程序注册驱动程序,例如:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

在注册了JDBC驱动程序之后,可以使用DriverManager.getConnection()方法连接到数据库,例如:

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=sa;password=123456";

Connection conn = DriverManager.getConnection(connectionUrl);

在这个例子中,数据库名为myDatabase,用户名为sa,密码为123456。注意,您需要用实际的用户名和密码来替换这里的“sa”和“123456”。如果要连接到其他服务器,请将localhost替换为服务器名称或IP地址。

3.1 连接选项

除了使用用户名和密码之外,还可以使用其他选项来连接到Microsoft SQL数据库,例如:

IntegratedSecurity – 如果希望使用操作系统身份验证,则可以设置这个选项,例如:

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase;IntegratedSecurity=true;";

Connection conn = DriverManager.getConnection(connectionUrl);

Encrypt – 如果希望通过安全套接字层(SSL)加密连接,则可以设置这个选项,例如:

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=sa;password=123456;Encrypt=true;";

Connection conn = DriverManager.getConnection(connectionUrl);

TrustServerCertificate – 如果不需要使用由受信任的证书颁发机构颁发的服务器证书,则可以设置这个选项,例如:

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=sa;password=123456;Encrypt=true;TrustServerCertificate=true;";

Connection conn = DriverManager.getConnection(connectionUrl);

4. 执行查询操作

在连接到数据库之后,可以使用PreparedStatement对象执行各种操作,例如查询操作。例如,查询名为“employees”的表中所有“firstName”为“John”的员工记录:

String sql = "SELECT * FROM employees WHERE firstName = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "John");

ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

int id = rs.getInt("id");

String firstName = rs.getString("firstName");

String lastName = rs.getString("lastName");

Date birthDate = rs.getDate("birthDate");

System.out.println(String.format("%d, %s, %s, %s", id, firstName, lastName, birthDate.toString()));

}

在这个例子中,使用了占位符“?”来代替firstName的值。使用pstmt.setString(1, "John")方法设置占位符的值。如果要设置多个占位符的值,则可以使用pstmt.setString(2, "Doe")等方法。

对于查询操作,将返回一个ResultSet对象。使用rs.next()方法迭代ResultSet对象中的每一行。rs.getInt(“id”)、rs.getString(“firstName”)等方法用于获取一行中每个列的值。

5. 执行插入、更新和删除操作

可以使用PreparedStatement对象执行各种插入、更新和删除操作。例如,在名为“employees”的表中插入一条新记录:

String sql = "INSERT INTO employees (firstName, lastName, birthDate) VALUES (?, ?, ?)";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "John");

pstmt.setString(2, "Doe");

pstmt.setDate(3, new java.sql.Date(new java.util.Date().getTime()));

int affectedRows = pstmt.executeUpdate();

System.out.println(String.format("%d rows affected.", affectedRows));

在这个例子中,使用占位符“?”并设置其值。使用pstmt.executeUpdate()方法执行INSERT INTO语句。如果成功插入一行则返回1,如果未成功插入则返回0。

类似地,可以使用PreparedStatement对象执行UPDATE和DELETE语句。例如,在名为“employees”的表中将所有lastName为“Doe”的记录的firstName更新为“Jane”:

String sql = "UPDATE employees SET firstName = ? WHERE lastName = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "Jane");

pstmt.setString(2, "Doe");

int affectedRows = pstmt.executeUpdate();

System.out.println(String.format("%d rows affected.", affectedRows));

6. 关闭数据库连接

使用完数据库连接后,需要将其关闭。可以调用Connection对象的close()方法来关闭连接:

conn.close();

如果在使用过程中出现异常,则需要调用catch块中的代码关闭连接:

try {

// code that uses the database connection

} catch (SQLException e) {

// exception handling

} finally {

conn.close();

}

7. 示例代码

以下是一个连接到Microsoft SQL数据库,查询employees表中所有John Doe员工的Java示例代码:

import java.sql.*;

public class TestMssqlJdbc {

public static void main(String[] args) {

try {

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=sa;password=123456";

Connection conn = DriverManager.getConnection(connectionUrl);

String sql = "SELECT * FROM employees WHERE firstName = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "John");

ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

int id = rs.getInt("id");

String firstName = rs.getString("firstName");

String lastName = rs.getString("lastName");

Date birthDate = rs.getDate("birthDate");

System.out.println(String.format("%d, %s, %s, %s", id, firstName, lastName, birthDate.toString()));

}

conn.close();

} catch (SQLException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

参考文献

Microsoft JDBC Driver for SQL Server (https://docs.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server)。

数据库标签