我在执行 Web 应用程序时收到 "Index 6 out of bounds for length 6"
I am getting "Index 6 out of bounds for length 6" while executing my web application
我正在尝试编写一个 servlet,它从表单中获取值并将其存储在名为 material 的 table 中。页面如下:
This is my page.The number of entries can be anything between 1 to 6.
对于我的测试 运行,我只有一个条目,点击提交后出现错误 "index 6 out of bounds for length 6"。注意:单个条目意味着我只填写了 6.
中的一个 material 的详细信息
这就是我的 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<Materials.length; 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
另外,每当我事先不知道用户将填写多少行时,这是将数据输入我的 table 的正确方法吗?
编辑:这是我的 servlet 的完整代码
public class 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<Materials.length; 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;
}
}
如果所有数组的长度都相同,这段代码应该没问题,但我的猜测是不一样(只是猜测,因为没有提供异常堆栈)。您在视图中有什么 (jsp)?材料的元素可能多于单位、数量、日期?
要检查长度,您可以在 servlet 中添加一些调试输出,例如:
String[] Date = request.getParameterValues("materialDate"); // date of return
...
System.out.println("Materials length: " + Materials.length));
System.out.println("Unit length: " + Unit.length));
System.out.println("Quantity length: " + Quantity.length));
System.out.println("Date length: " + Date.length));
我正在尝试编写一个 servlet,它从表单中获取值并将其存储在名为 material 的 table 中。页面如下: This is my page.The number of entries can be anything between 1 to 6.
对于我的测试 运行,我只有一个条目,点击提交后出现错误 "index 6 out of bounds for length 6"。注意:单个条目意味着我只填写了 6.
中的一个 material 的详细信息这就是我的 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<Materials.length; 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
另外,每当我事先不知道用户将填写多少行时,这是将数据输入我的 table 的正确方法吗?
编辑:这是我的 servlet 的完整代码
public class 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<Materials.length; 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;
}
}
如果所有数组的长度都相同,这段代码应该没问题,但我的猜测是不一样(只是猜测,因为没有提供异常堆栈)。您在视图中有什么 (jsp)?材料的元素可能多于单位、数量、日期?
要检查长度,您可以在 servlet 中添加一些调试输出,例如:
String[] Date = request.getParameterValues("materialDate"); // date of return
...
System.out.println("Materials length: " + Materials.length));
System.out.println("Unit length: " + Unit.length));
System.out.println("Quantity length: " + Quantity.length));
System.out.println("Date length: " + Date.length));