Java 查询 SQL Server 数据库指南
要在 Java 中查询 SQL Server 数据库,你可以使用 JDBC (Java Database Connectivity),以下是完整的步骤和示例代码:

添加 JDBC 驱动依赖
你需要添加 SQL Server JDBC 驱动到你的项目中,如果你使用 Maven,在 pom.xml 中添加:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>9.4.0.jre11</version> <!-- 使用适合你JDK版本的驱动 -->
</dependency>
如果你使用 Gradle,在 build.gradle 中添加:
implementation 'com.microsoft.sqlserver:mssql-jdbc:9.4.0.jre11'
基本查询示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
public class SqlServerQueryExample {
public static void main(String[] args) {
// 数据库连接信息
String url = "jdbc:sqlserver://localhost:1433;databaseName=your_database;encrypt=true;trustServerCertificate=true";
String username = "your_username";
String password = "your_password";
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 1. 加载JDBC驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2. 建立数据库连接
connection = DriverManager.getConnection(url, username, password);
// 3. 创建Statement对象
statement = connection.createStatement();
// 4. 执行SQL查询
String sql = "SELECT id, name, email FROM users";
resultSet = statement.executeQuery(sql);
// 5. 处理结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String email = resultSet.getString("email");
System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
}
} catch (ClassNotFoundException e) {
System.err.println("找不到SQL Server JDBC驱动");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("数据库操作出错");
e.printStackTrace();
} finally {
// 6. 关闭资源
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
使用 PreparedStatement 防止SQL注入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SqlServerPreparedExample {
public static void main(String[] args) {
String url = "jdbc:sqlserver://localhost:1433;databaseName=your_database;encrypt=true;trustServerCertificate=true";
String username = "your_username";
String password = "your_password";
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection(url, username, password);
// 使用参数化查询
String sql = "SELECT * FROM users WHERE name = ? AND age > ?";
preparedStatement = connection.prepareStatement(sql);
// 设置参数
preparedStatement.setString(1, "John");
preparedStatement.setInt(2, 25);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println("ID: " + resultSet.getInt("id") +
", Name: " + resultSet.getString("name") +
", Age: " + resultSet.getInt("age"));
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) resultSet.close();
if (preparedStatement != null) preparedStatement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
连接字符串参数说明
SQL Server JDBC 连接字符串常用参数:
server或host: 服务器地址port: 端口号(默认1433)databaseName: 数据库名称user或username: 用户名password: 密码encrypt: 是否加密连接(true/false)trustServerCertificate: 是否信任服务器证书(true/false)integratedSecurity: 是否使用Windows集成认证(true/false)
使用连接池(推荐)
对于生产环境,建议使用连接池如 HikariCP:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class SqlServerWithPool {
private static HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:sqlserver://localhost:1433;databaseName=your_database;encrypt=true;trustServerCertificate=true");
config.setUsername("your_username");
config.setPassword("your_password");
config.setMaximumPoolSize(10);
dataSource = new HikariDataSource(config);
}
public static void main(String[] args) {
try (Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {
while (resultSet.next()) {
System.out.println(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注意事项
- 确保SQL Server服务正在运行,并且网络连接正常
- 对于生产环境,始终使用连接池
- 始终使用PreparedStatement防止SQL注入
- 正确处理异常和关闭资源
- 考虑使用try-with-resources语句自动关闭资源
- 对于大型结果集,考虑使用分页查询
希望这些信息对你有帮助!如果有任何具体问题,欢迎提问。
