列位置“ 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());
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您提供的代码片段来看,问题可能出在几个方面。首先,错误信息提示“列位置 '1' 超出范围”,这意味着您的 PreparedStatement
试图设置的参数索引超出了实际 SQL 语句中占位符的数量。但是,从您给出的 SQL 插入语句中,并没有使用问号(?)作为参数占位符,这可能是导致问题的直接原因。
正确的做法是,在 SQL 语句中的每个值的地方使用问号(?)作为占位符,然后通过 PreparedStatement
的 setString
方法按顺序为这些占位符赋值。请看修改后的代码示例:
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());
}
这样修改后,您的代码应该能够正确地执行插入操作,而不会出现“列位置超出范围”的错误了。记得检查字段名和数据库表结构是否匹配,以及确保所有使用的字段都能正确获取到文本内容。