java.sql.SQLException: 列索引超出范围

java.sql.SQLException: Column Index out of range

我在 Navicat 中执行以下 MYSQL 命令时需要帮助,我得到

mysql> SELECT Password FROM workers;

    +----------+
    | Password |
    +----------+
    | A        |
    | B        |
    | B        |
    | B        |
    | B        |

当我在 java 中触发它时,我得到

java.sql.SQLException: Column Index out of range, 3 > 2. 

代码:-

try {
       ArrayList<String> A = new ArrayList<String>();
       Class.forName("com.mysql.jdbc.Driver");
       Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/employees", "root", "123456");
       Statement stmt = con.createStatement();
       ResultSet rs = stmt.executeQuery("SELECT Password FROM workers");
       int c =1;
       while(rs.next())  
       {
           A.add(rs.getString(c));
           c++;
       }
       con.close();
    } catch (Exception e) {
            System.out.println(e);
    }

由于您只得到 1 列,您超出了范围。您按如下方式更改代码,并删除计数器。

try {
         ArrayList<String> A = new ArrayList<String>();
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/employees", "root", "123456");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT Password FROM workers");

        while(rs.next())  
        {
          A.add(rs.getString("Password"));

        }
        con.close();
    } catch (Exception e) {
        System.out.println(e);
    }

您的数据库中有 5 个条目 table 并执行以下代码:

int c = 1;
while (rs.next()) {
    A.add(rs.getString(c)); // get value at column
    c++;
}
  • 第一次迭代:rs.getString(1),获取第 1 列的值
  • 第二次迭代:rs.getString(2),获取第 2 列的值
  • 等等

现在,您的 table 只有一列,因此您应该使用

访问您的值
  • rs.getString(int column),这里总是 1
  • rs.getString(String columnLabel),此处密码