对于我的测试运行,我只有一个条目,单击提交后,出现错误“索引6超出长度6的范围”。注意:一次输入意味着我只填写6种材料的详细信息。
这是我的servlet代码的样子。我已经使用request.getParameterValues在数组中输入表单数据。Class.forName(driver);
Connection connection = DriverManager.getConnection(connectionUrl + database, userid, password);
connection.setAutoCommit(false);
String insertTableSQL = "INSERT INTO material" + " (PassNumber, InitiatingOfficer, staff_id, Materials, Quantity, Unit, Date_of_return) VALUES " + " (?, ?, ?, ?, ?, ?, ?);";
PreparedStatement st = connection.prepareStatement(insertTableSQL);
for(int i=0; i
st.setString(1, PassNumber);
st.setString(2, InitiatingOfficer);
st.setInt(3, staff_id);
st.setString(4, Materials[i]);
st.setString(5, Quantity[i]);
st.setString(6, Unit[i]);
st.setString(7, Date[i]);
st.addBatch();
}
st.executeBatch();
这是初始化数组的方式:public class raisegatepass extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
LoginBean loginBean = new LoginBean();
String PassNumber = generatePIN(); //Pass Number
String InitiatingOfficer = loginBean.getName(); // Name
int staff_id = loginBean.getstaffid(); // Staff ID
String[] Materials = request.getParameterValues("materialInfo"); // Array containing Material Name list
String[] Unit = request.getParameterValues("materialUnit"); // Array containing Unit
String[] Quantity = request.getParameterValues("materialQuantity"); // Array containing Quantity in string
String[] Date = request.getParameterValues("materialDate"); // date of return
而且,如果我事先不知道用户将填充多少行,这是将数据输入到表中的正确方法吗?
编辑:这是我完整的servlet代码
公共类raisegatepass扩展HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
LoginBean loginBean = new LoginBean();
String PassNumber = generatePIN(); //Pass Number
String InitiatingOfficer = loginBean.getName(); // Name
int staff_id = loginBean.getstaffid(); // Staff ID
String[] Materials = request.getParameterValues("materialInfo"); // Array containing Material Name list
String[] Unit = request.getParameterValues("materialUnit"); // Array containing Unit
String[] Quantity = request.getParameterValues("materialQuantity"); // Array containing Quantity in string
String[] Date = request.getParameterValues("materialDate"); // date of return
String driver = "com.mysql.jdbc.Driver";
String connectionUrl = //Url
String database = //Database
String userid = //userid
String password = //password
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(connectionUrl + database, userid, password);
connection.setAutoCommit(false);
String insertTableSQL = "INSERT INTO material" + " (PassNumber, InitiatingOfficer, staff_id, Materials, Quantity, Unit, Date_of_return) VALUES " + " (?, ?, ?, ?, ?, ?, ?);";
PreparedStatement st = connection.prepareStatement(insertTableSQL);
for(int i=0; i
st.setString(1, PassNumber);
st.setString(2, InitiatingOfficer);
st.setInt(3, staff_id);
st.setString(4, Materials[i]);
st.setString(5, Quantity[i]);
st.setString(6, Unit[i]);
st.setString(7, Date[i]);
st.addBatch();
}
st.executeBatch();
} catch(Exception e)
{
JOptionPane.showMessageDialog(null, e.getMessage());
RequestDispatcher view = request.getRequestDispatcher("gatepass_raise.jsp");
view.forward(request, response);
}
public String generatePIN()
{
int x = (int)(Math.random() * 6);
x = x + 1;
Random r = new Random();
char c = (char)(r.nextInt(26) + 'A');
String randomPIN = c + (x + "") + ( ((int)(Math.random()*100)) + "" );
return randomPIN;
}
}