You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing中如何将ClassA的方法传入ClassB并自定义SQL查询

解决方案

首先,你需要重构ClassA的add()方法,让它能够接收外部传入的查询语句,这样ClassB就能在调用时传入自定义的SQL了。同时我也会帮你修复代码里的资源泄漏问题——原来的代码没有关闭数据库连接、Statement和ResultSet,这会导致严重的资源浪费。

第一步:重构ClassA的add方法

修改add()方法,添加一个String类型的参数来接收查询语句,并且使用try-with-resources自动管理数据库资源(Java 7+支持),这样就不用手动关闭资源了:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ClassA {
    private Connection conn;

    public void add(String query) { // 添加query参数,接收外部传入的SQL
        // 使用try-with-resources自动关闭stmt和rs,无需手动调用close()
        try (Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(query)) {
            
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
            String url = "jdbc:oracle:thin:@localhost:1521:XE";
            conn = DriverManager.getConnection(url, "Hr", "Hr");
            System.out.println("Connection Established");

            // 这里可以根据需求处理ResultSet结果,比如遍历输出
            while (rs.next()) {
                // 示例:获取指定列的值
                // System.out.println(rs.getString("column_name"));
            }

        } catch (Exception e) {
            System.err.println("connection error " + e);
        } finally {
            // 手动关闭Connection,避免连接泄漏
            try {
                if (conn != null && !conn.isClosed()) {
                    conn.close();
                    System.out.println("Connection Closed");
                }
            } catch (Exception e) {
                System.err.println("Failed to close connection: " + e);
            }
        }
    }
}

第二步:在ClassB中调用ClassA的add方法

现在ClassA的add()方法支持传入自定义查询了,你只需要在ClassB中实例化ClassA,然后调用add()并传入你的查询语句即可:

public class ClassB {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        // 传入你自定义的查询语句,这里以查询员工表为例
        String customQuery = "SELECT employee_id, first_name FROM employees";
        classA.add(customQuery);
    }
}

额外建议

  • 资源管理:try-with-resources是Java操作数据库的最佳实践,它会在代码块结束后自动关闭实现AutoCloseable接口的资源,彻底避免资源泄漏。
  • 连接复用:如果你的应用需要频繁操作数据库,建议使用数据库连接池(比如HikariCP)来管理连接,而不是每次调用都创建新连接,能大幅提升性能。
  • SQL注入防护:如果查询语句包含用户输入的参数,不要直接拼接字符串,应该使用PreparedStatement代替Statement,比如:
    String query = "SELECT * FROM employees WHERE department_id = ?";
    try (PreparedStatement pstmt = conn.prepareStatement(query)) {
        pstmt.setInt(1, 10); // 安全设置参数
        ResultSet rs = pstmt.executeQuery();
        // 处理结果
    }
    

内容的提问来源于stack exchange,提问作者Shaun Tait

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:31