你的程序有问题,是数组越界了。
看看你的错误是在那。
比如:
List list = new ArrayList(2);
list.get(3); ///这里就出现了你上边的错误

解决方案 »

  1.   

    可能事因为数据库连接没有取得。然后再rs.getstring("col")的时候抛出这样的错误。
    估计只有调整数据库连接池的大小。或者看看数据库连接释放完全没有。或者伸几数据库服务起。
      

  2.   

    各位看看这段数据库连接代码有没有问题:
    import javax.naming.InitialContext;
    import javax.naming.Context;
    import javax.naming.NamingException;import java.sql.Statement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import javax.sql.DataSource;
    public class DBConnect{ private Connection _conn = null;
    public String _charsetDB = "gb2312"; //所连接数据库的字符集:cp850、iso_1等,在ConnectionPool.xml定义
    public String _charsetFromWEB = "GB2312"; //WEB读入环境所使用的字符集GB2312、iso-8859-1、UTF-8等,因环境不同而不同!
    public String _charsetToWEB = "GB2312"; //输出WEB所使用的字符集GB2312、iso-8859-1、UTF-8等,因环境不同而不同!
    private String _errorString = null;
      private String[][] _resultArray;  //查询的结果数据
    private int allRow = 0; //select结果集总的行数
    private int cacheRecords = 10;   //Database records cache number
    public void DBConnect(){
    }   public boolean createConnect(){
    boolean status = true;
    try{
    // 调用mssql的java类库建立连接
    Context iniCtx = new InitialContext();
    DataSource ds = (DataSource) iniCtx.lookup("java:comp/env/jdbc/xshrDS");
    _conn = ds.getConnection();
    }
    catch(NamingException ne){
    _errorString = "查找数据源错误:" + ne.toString();
         status = false;
    }
    catch(SQLException sqle){
    _errorString = "数据库建立连接错误: " + sqle.toString();
         status = false;
    }
    return status;  
    }


    // 得到连接
       public Connection getConnect(){
    return _conn;  
    }
    //执行查询select,最后一个参数为查询返回结果的列数。注意:select全部为string类型
       public boolean exeQuery(String query){
         return exeQuery(query,0,0,0);
    }
       public boolean exeQuery(String query,int columnCount){
    //返回指定列
         return exeQuery(query,columnCount,0,0);
       }
       public boolean exeQuery(String query,int columnCount,int rowCount){
    //返回指定列、行 
         return exeQuery(query,columnCount,rowCount,0);
       }   public boolean exeQuery(String query,int columnCount,int rowCount,int beginRow){
    //返回指定列、行 (0全部行返回),开始位置(0:第一行开始)
    boolean status = true;
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
    try{
    if(createConnect())
    con = getConnect();
    else
         return (false); stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rs = stmt.executeQuery(setStringFromTo(query,_charsetFromWEB,_charsetDB));
    //Cache database records
    rs.setFetchSize(cacheRecords);
    ResultSetMetaData rsmd = rs.getMetaData();
    int totalColumn = rsmd.getColumnCount();
    int returnColumn = 0;
    //返回列 0全部返回
    if(columnCount == 0){
    returnColumn = totalColumn;
    }
    else{
    if(totalColumn > columnCount)
    returnColumn = columnCount;
    else
    returnColumn = totalColumn;
    }
      

  3.   

    int row = 0,count = 0,j = 0;
    if(rs.last()){
    allRow = rs.getRow();
    //结果集所有行
    if(allRow <= beginRow){
    _resultArray = new String[0][0];
    }
    else{
    row = allRow - beginRow;
    //返回行 0全部返回
    if(rowCount == 0)
    count = row;
    else{
    if(row > rowCount)
    count = rowCount;
    else
    count = row;
    }
    _resultArray = new String[count][returnColumn];
    if(beginRow == 0)
    rs.beforeFirst();
    else
    rs.absolute(beginRow);

    j = 0;
    while (rs.next()){
    if(j == count) break;
    for(int i=0;i < returnColumn;i++){
    _resultArray[j][i] = setStringFromTo(rs.getString(i+1),_charsetDB,_charsetToWEB);
    }
    j++;
    }
    }
    }
    else{
    _resultArray = new String[count][returnColumn];
    }

    }
    catch(SQLException sqle){
    _errorString = "数据库获取结果集失败: " + sqle.toString();
         status = false;
    }
    catch (Exception e){
    _errorString = "数据库获取结果集时应用程序发生意外: \n" + e.toString();
    e.printStackTrace();
         status = false;
    }
    finally{
    try{
    // 关闭连接,同时关闭结果集
    if (rs != null) rs.close();
    if (stmt != null) stmt.close();
    if (con != null) con.close();
    }
    catch (SQLException sqle){
    _errorString = "关闭数据库连接失败: \n" + sqle.toString();
         status = false;
    }
    }
        return status;
       }   public boolean exeCount(String query){

    boolean status = true;
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
    try{
    if(createConnect())
    con = getConnect();
    else
         return (false);
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rs = stmt.executeQuery(query);
    if(rs.next()){
    allRow = rs.getInt(1);
    }

    }
    catch(SQLException sqle){
    _errorString = "数据库获取结果集失败: " + sqle.toString();
         status = false;
    }
    catch (Exception e){
    _errorString = "数据库获取结果集时应用程序发生意外: \n" + e.toString();
    e.printStackTrace();
         status = false;
    }
    finally{
    try{
    // 关闭连接,同时关闭结果集
    if (rs != null) rs.close();
    if (stmt != null) stmt.close();
    if (con != null) con.close();
    }
    catch (SQLException sqle){
    _errorString = "关闭数据库连接失败: \n" + sqle.toString();
         status = false;
    }
    }
        return status;
       } public boolean exeUpdate(String query){ boolean status = true;
    Statement stmt = null;
    Connection con = null;
    try{
    if(createConnect())
    con = getConnect();
    else
         return (false);
    if(con == null){
    _errorString = "数据库建立连接失败: <br>可能原因:<br>1. 系统太忙,请稍候再试;<br>2. JDBC无法加载;<br>3. 系统无法登录!";
         return (false);
    }
    stmt = con.createStatement();
    stmt.executeUpdate(setStringFromTo(query,_charsetFromWEB,_charsetDB));

    }
    catch(SQLException sqle){
    _errorString = "数据库(Update)更新失败: " + sqle.toString();
         status = false;
    }
    catch (Exception e){
    _errorString = "应用程序发生意外(Update) : \n" + e.toString();
    e.printStackTrace();
         status = false;
    }
    finally{
    try{
    // 关闭连接
    if (stmt != null) stmt.close();
    if (con != null) con.close();
    }
    catch (SQLException sqle){
    _errorString = "关闭数据库连接失败: \n" + sqle.toString();
         status = false;
    }
    }
         return status;
       }   public boolean exeUpdate(String[] queryArray){ boolean status = true;
    Connection con = null;
    boolean foreAutoCommit = true;
    Statement[] stmt = new Statement[queryArray.length];
    try{
    if(createConnect())
    con = getConnect();
    else
         return (false);
    if(con == null){
    _errorString = "数据库建立连接失败: <br>可能原因:<br>1. 系统太忙,请稍候再试;<br>2. JDBC无法加载;<br>3. 系统无法登录!";
         return (false);
    }

    foreAutoCommit = con.getAutoCommit();
    con.setAutoCommit(false);

    for(int i=0; i < queryArray.length; i++){
    stmt[i] = con.createStatement();
    stmt[i].executeUpdate(setStringFromTo(queryArray[i],_charsetFromWEB,_charsetDB));
    }
    con.commit();
    }
    catch(SQLException sqle){
    try{
    con.rollback();
    _errorString = "数据库记录更新操作失败: " + sqle.toString();
         status = false;
    }
    catch(SQLException sqle1){
    _errorString = "数据库记录更新时回滚失败: " + sqle1.toString();
         status = false;
    }
    }
    catch (Exception e){
    _errorString = "数据库记录更新时应用程序发生意外: " + e.toString();
    e.printStackTrace();
         status = false;
    }
    finally{
    try{
    // 关闭连接,同时关闭结果集
    for(int i=0; i < queryArray.length; i++){
    if (stmt[i] != null) stmt[i].close();
    }
     
    if (con != null){
    con.setAutoCommit(foreAutoCommit);
    con.close();
    }
    }
    catch (SQLException sqle){
    _errorString = "关闭数据库连接失败: \n" + sqle.toString();
         status = false;
    }
    }
        return status;
       } //查询的结果数据
       public String[][] getResultArray(){
    return _resultArray;       
       }
       public String getErrorString(){
    return _errorString;
       }
       public int getAllRow(){
    return allRow;
       } //读数据时,按数据库使用的字符集获取数据;写数据时,转换成数据库使用的字符集数据
      public String setStringFromTo(String str,String charset1,String charset2){

    if(charset1.equals("iso_1") || charset1.equals("ISO_1")) charset1 = "iso-8859-1";
    if(charset2.equals("iso_1") || charset2.equals("ISO_1")) charset2 = "iso-8859-1";
    try{
    if(str == null) return "";
    String temp_p=str.trim();
    if(str.length() == 0) return "";
    return new String(temp_p.getBytes(charset1),charset2);
    }
    catch(Exception e){
    System.out.println("err");
    return str;
    }
    }
    }
      

  4.   

    你们是自己写连接池的啊,推荐还是用现成的连接池吧比较稳定,如websphere,tomcat,jrun里自带的
      

  5.   

    关于 gks_cn(981530)   CAYU(中原) 说的问题也考虑过~~ 要是数据库连接没释放,或者数组越界 那么 刷新就又能得到结果~ 当网站的流量不是很大的时候 就没有上面的情况发生,流量一大 就出现 信息反馈:读取岗位信息时,数据库出错!刷新重试!数据库获取结果集时应用程序发生意外:java.lang.ArrayIndexOutOfBoundsException:4   这个是连接池 的配置参数:
    <attribute name="MinSize">0</attribute>
    <attribute name="MaxSize">1000</attribute>
    <attribute name="BlockingTimeoutMillis">1000</attribute>
    <attribute name="IdleTimeoutMinutes">10</attribute>