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

如何通过RMI使用数组方法获取数据库表完整数据并在JTable展示

问题修复方案

报错1:接口方法编译错误

原因有2个:

  • Java接口中静态方法必须提供实现体,而RMI远程调用的方法必须是可重写的实例方法,不能声明为static
  • Remote Exception拼写错误,正确写法是连写的RemoteException,中间不能有空格

修正后的接口代码:

import java.rmi.Remote;
import java.rmi.RemoteException;

// 不建议用Interface作为类名,属于Java关联关键字,容易引发混淆
public interface MyRemoteInterface extends Remote {
    // 接口方法默认public abstract,不需要加static修饰
    String[] getArray() throws RemoteException;
}

报错2:实现类找不到符号tbData

原因有2个:

  • tbData是在while循环内部声明的,作用域仅限制在循环块内,循环外无法访问
  • 每次循环都新建长度为1的数组,只会覆盖之前的内容,最终只能保存最后一条数据,无法存储全表内容
  • 额外问题:实现类的方法不能加static,静态方法无法重写接口的实例方法,会导致接口实现不生效
  • 额外问题:构造方法中的Remote Exception同样存在拼写错误,中间不能有空格

你可以先用ArrayList动态收集所有数据,再转为数组返回,修正后的实现类代码:

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class TheImplementation extends UnicastRemoteObject implements MyRemoteInterface{
    
    public TheImplementation() throws RemoteException{
        super();
    }
    
    private static final long serialVersionUID = -3763231206310559L;

    // 去掉static修饰,和接口方法签名保持一致
    @Override
    public String[] getArray() throws RemoteException{
        ArrayList<String> fruitList = new ArrayList<>(); 
        try {
            Connection connection = ConnectionProvider.getConnection();
            Statement st = connection.createStatement();
            ResultSet rs = st.executeQuery("select * from details");
            while(rs.next()) { 
                String fruitdetails = rs.getString("fruit");
                fruitList.add(fruitdetails);
            }
            // 建议补充资源关闭逻辑,避免数据库连接泄露
            rs.close();
            st.close();
            connection.close();
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
        // 集合转为字符串数组返回
        return fruitList.toArray(new String[0]);
    }
}

额外注意事项

  • RMI远程调用的方法不能声明为static,必须是实例方法才能被代理层调用
  • 后续客户端拿到返回的字符串数组后,直接封装到JTable的TableModel里即可完成渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:24:04