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)。