开发者社区 问答 正文

列位置“ 1”超出范围。此ResultSet的列数为'0'。在这方面需要帮助

列位置“ 1”超出范围。此ResultSet的列数为'0'。在这方面需要帮助

try {
    String host = "jdbc:derby://localhost:1527/Patients";

    String uname =  "admin123";
    String uPass = "admin123";`
    Connection con = DriverManager.getConnection(host, uname, uPass );

    String sql = "insert into patient(ID,NAME,AGE,GENDER,BTYPE,PARENT,CN)"
      + "VALUES('"+field1.getText()+"','"+field2.getText()+"','"+
      field3.getText()+"','"+field4.getText()+"','"+field5.getText()+"','"+
      field6.getText()+"','"+field7.getText()+"')";


    PreparedStatement preStatement = con.prepareStatement(sql);

    preStatement.setString(1,field1.getText());
    preStatement.setString(2,field2.getText());
    preStatement.setString(3,field3.getText());
    preStatement.setString(4,field4.getText());
    preStatement.setString(5,field5.getText());
    preStatement.setString(6,field6.getText());
    preStatement.setString(7,field7.getText());

    preStatement.execute();   
} catch(SQLException err) {
    System.out.println(err.getMessage());
}

展开
收起
几许相思几点泪 2019-12-08 21:55:56 627 分享 版权
阿里云 AI 助理回答

从您提供的代码片段来看,问题可能出在几个方面。首先,错误信息提示“列位置 '1' 超出范围”,这意味着您的 PreparedStatement 试图设置的参数索引超出了实际 SQL 语句中占位符的数量。但是,从您给出的 SQL 插入语句中,并没有使用问号(?)作为参数占位符,这可能是导致问题的直接原因。

正确的做法是,在 SQL 语句中的每个值的地方使用问号(?)作为占位符,然后通过 PreparedStatementsetString 方法按顺序为这些占位符赋值。请看修改后的代码示例:

try {
    String host = "jdbc:derby://localhost:1527/Patients";
    String uname = "admin123";
    String uPass = "admin123";

    Connection con = DriverManager.getConnection(host, uname, uPass);

    // 修改SQL语句,使用问号作为参数占位符
    String sql = "INSERT INTO patient (ID, NAME, AGE, GENDER, BTYPE, PARENT, CN) " +
                 "VALUES (?, ?, ?, ?, ?, ?, ?)";

    PreparedStatement preStatement = con.prepareStatement(sql);

    // 设置参数值,注意索引从1开始
    preStatement.setString(1, field1.getText());
    preStatement.setString(2, field2.getText());
    preStatement.setString(3, field3.getText());
    preStatement.setString(4, field4.getText());
    preStatement.setString(5, field5.getText());
    preStatement.setString(6, field6.getText());
    preStatement.setString(7, field7.getText());

    preStatement.execute();
} catch(SQLException err) {
    System.out.println("Error executing the query: " + err.getMessage());
}

这样修改后,您的代码应该能够正确地执行插入操作,而不会出现“列位置超出范围”的错误了。记得检查字段名和数据库表结构是否匹配,以及确保所有使用的字段都能正确获取到文本内容。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: