杰瑞科技汇

java 查询sqlserver

Java 查询 SQL Server 数据库指南

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

java 查询sqlserver-图1
(图片来源网络,侵删)

添加 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 连接字符串常用参数:

  • serverhost: 服务器地址
  • port: 端口号(默认1433)
  • databaseName: 数据库名称
  • userusername: 用户名
  • password: 密码
  • encrypt: 是否加密连接(true/false)
  • trustServerCertificate: 是否信任服务器证书(true/false)
  • integratedSecurity: 是否使用Windows集成认证(true/false)

使用连接池(推荐)

对于生产环境,建议使用连接池如 HikariCP:

java 查询sqlserver-图2
(图片来源网络,侵删)
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();
        }
    }
}

注意事项

  1. 确保SQL Server服务正在运行,并且网络连接正常
  2. 对于生产环境,始终使用连接池
  3. 始终使用PreparedStatement防止SQL注入
  4. 正确处理异常和关闭资源
  5. 考虑使用try-with-resources语句自动关闭资源
  6. 对于大型结果集,考虑使用分页查询

希望这些信息对你有帮助!如果有任何具体问题,欢迎提问。

分享:
扫描分享到社交APP
上一篇
下一篇