有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jdbc列索引超出范围

有谁能告诉我,为什么getColumnClassName会告诉我,当rs.getString调用在前一行运行正常,而我从1开始迭代时,列索引超出了范围

int i = 1;
    while (rs.next()) {

        columns.put("id", Integer.toString(i));
        columns.put("name", rs.getString(4));
        columns.put("type", rs.getMetaData().getColumnClassName(i));
        columns.put("nullable", Integer.toString(rs.getMetaData().isNullable(i)));

        i++;
        s.add(columns);
    }
    return s;

共 (1) 个答案

  1. # 1 楼答案

    每次通过while循环,都需要将i变量重置为1。当前逻辑将在第二条记录上为getColumnClassName(2),在第三条记录上为getColumnClassName(3),以此类推。如果您的记录多于所选的列,则会出现索引超出范围错误

    不清楚您是想从记录中获取数据,还是只想获取有关返回列的元数据

    如果你真的想遍历所有的列来获取类型信息,你需要得到column count并使用它

    final int cnt = rs.getMetaData().getColumnCount();
    
    for (int i=0; i<cnt; ++i)
    {
        columns.put("id", Integer.toString(i));
        columns.put("name", rs.getMetaData().getColumnName());
        columns.put("type", rs.getMetaData().getColumnClassName(i));
        columns.put("nullable", Integer.toString(rs.getMetaData().isNullable(i)));
    
        s.add(columns);
    }