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

Java遍历SQL Resultset判断类型并添加Player/Coach到列表的实现方法

首先你要明确一个前提:JDBC返回的ResultSet是纯数据库查询的结构化数据,本身不携带任何Java类的类型信息,你不可能直接对结果集行用instanceof判断类型,必须在你的tblmember表中新增类型标识字段来区分该行存储的是球员还是教练数据,比如新增字段fld_member_type,约定值为0对应Player类、值为1对应Coach类即可,也可以直接复用表中已有的、能区分成员身份的字段做判断。

另外你现有代码有两处明显错误:

  • SQL语句结尾多写了一个多余的单引号,执行时会直接报SQL语法错误
  • 循环前的if(r.next())会让你直接跳过结果集的第一行数据,直接删除即可,while(r.next())本身就会自动判断是否还有未读取的行

修正后的完整代码如下:

// 修正SQL的多余单引号
String sql = "SELECT * FROM tblmember;";

System.out.println("Before query");
ResultSet r = stmt.executeQuery(sql);

ArrayList<Member> rlist = new ArrayList<>();
                    
// 去掉多余的if(r.next())判断
while(r.next()) {
    // 读取类型标识字段判断要生成的对象类型
    int memberType = r.getInt("fld_member_type");
    if (memberType == 0) {
        // 构造Player对象,可根据实际需求补全构造参数
        rlist.add(new Player(r.getInt("fldmemberid"), r.getString("fldfirstname")));
    } else if (memberType == 1) {
        // 构造Coach对象,可根据实际需求补全构造参数
        rlist.add(new Coach(r.getInt("fldmemberid"), r.getString("fldfirstname")));
    }
}

如果你的类型标识用的是字符串类型,把判断逻辑改成r.getString("fld_member_type").equals("PLAYER")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:06