Database.getConnection()错误 - >参数索引超出范围(1>参数数量,为0)
问题描述:
我开发了一个应用程序,它显示了id,subject,indexno和其他信息。每个字段都有单独的文本框,每当用户填写表单并点击提交按钮时,该值必须插入到我的数据库中。如果我尝试将其提交给数据库,则不会发生任何事情。请看下面的代码。Database.getConnection()错误 - >参数索引超出范围(1>参数数量,为0)
try {
Connection con = null;
PreparedStatement pst = null;
String id = "", subject = "", indexNo = "", additional = "";
Class.forName("com.mysql.jdbc.Driver").newInstance();
int updateQuery = 0;
if (id == null && subject == null && indexNo == null && additional == null) {
if (id == "" && subject == " " && indexNo == "" && additional == "") {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "KUMAR");
String query="insert into circularindex(id,subject,indexNo,additional)values(?,?,?,?)";
pst = con.prepareStatement(query);
pst.setString(1, id);
pst.setString(1, subject);
pst.setString(2, indexNo);
pst.setString(3, additional);
pst.executeUpdate();
}
}
} catch (Exception ex) {
System.out.println("Database.getConnection() Error -->" + ex.getMessage());
}
请帮我解决上面的编码错误,并做好必要的工作。
答
似乎当你设置的参数就像是一个错字:
pst.setString(1, id);
pst.setString(1, subject);
pst.setString(2, indexNo);
pst.setString(3, additional);
你被覆盖其他设置第一个参数的两倍。你应该这样做,就像
pst.setString(1, id);
pst.setString(2, subject);
pst.setString(3, indexNo);
pst.setString(4, additional);
答
似乎有一个错字已经被almas指出。如果它仍然存在,尝试添加它没有主键(以防万一它是一个汽车发电机组):
String query="insert into circularindex(id,subject,indexNo,additional) values (?,?,?)";
pst = con.prepareStatement(query);
pst.setString(1, subject);
pst.setString(2, indexNo);
pst.setString(3, additional);
pst.executeUpdate();
答
你有一些冲突的if语句。第一个测试是所有输入都是空的,然后嵌套的if测试是否全部为空。他们不能兼而有之。
我删除了两个if语句,并为setString参数硬编码了一些值。代码起作用。
您想要将空字符串插入数据库似乎不合逻辑。我想你想确定他们是不是 null和不是空。
更改if语句,以便它们测试非null且不为空,向所有四个字符串添加一些值,并且您应该能够访问数据库。
感谢您的快速反应,但即使我也尝试过。它仍然没有工作。 – Jeevetha
它解决了还是你得到了一些其他异常? – SMA
还没有我得到相同的错误 – Jeevetha