ОК, у меня есть JSP, выполняющий следующий сценарий.
<% irCollection mgrq = new irCollection();
mgrq.setMgrid("Chris Novish");
mgrq.populateCollection();
int pagenum;
if (request.getParameter("p") != null) {
String pagedatum=request.getParameter("p");
pagenum = Integer.parseInt(pagedatum);
} else { pagenum = 0; }
for (int i=0;i<10;i++) {
int rownum = pagenum * 10 + i;
InquireRecord currec = mgrq.getCurRecords(rownum);
out.println(currec.getID()); %>
irCollection имеет свойство ArrayList, в котором хранятся несколько объектов InquireRecord. Он получает эти данные из базы данных, используя mgrid as (установленный в строке 2) в качестве совпадающего термина.
Но я получаю исключение IndexOutOfBounds для того, что здесь отображается в строке 11.
Я провел несколько тестов, и я уверен, что это потому, что populateCollection () ничего не делает. У меня есть метод getSize, который дает мне размер 0.
Я сделал тестовый класс в Eclipse, чтобы убедиться, что все мои методы работают:
пакет com.serco.inquire;
public class test {
public static void main (String[] args) {
String mgr = "Chris Novish";
irCollection bob = new irCollection();
bob.setMgrid(mgr);
bob.populateCollection();
InquireRecord fred = bob.getCurRecords(1);
System.out.println(fred.getID());
}
}
Этот тестовый класс производит именно то, что я ожидал.
Кроме имен некоторых локальных переменных, я не вижу, что я делаю иначе в JSP.
Итак ... скажи мне, какую ошибку я совершил?
ради тщательности, вот метод populateCollection ():
public void populateCollection() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String filename = "inquire.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
database+= filename.trim() + ";DriverID=22;READONLY=true}";
Connection con = DriverManager.getConnection( database ,"","");
Statement s = con.createStatement();
s.execute ("SELECT * FROM inquiries WHERE manager = '" + mgrid + "'");
ResultSet rs = s.getResultSet();
int cur;
if (rs != null) {
while (rs.next()) {
cur = rs.getRow();
cur -- ;
int curID = rs.getInt("ID");
this.newIR.setID(curID);
String cursub = rs.getString("submitter");
this.newIR.setSubmitter(cursub);
this.iRecords.add(cur, this.newIR);
}
this.size = iRecords.size();
this.pages = this.size / 10;
int remain = this.size % 10;
if (remain > 0) { this.pages++; }
} else { System.out.println("no records."); }
}
catch (Throwable e) {
System.out.println(e);
}
}