public ArrayList<UserBO> querySystemUser(UserBO user, QueryInfo queryInfo)
throws Exception { Connection con = ConnectionHelperOracle.getConnection();

                String sql, criteria, tmpSql;                /*
                  这里会根据一些条件生成n=1或2或3;
                */ criteria = " WHERE UserName LIKE ? AND Position like ? AND CHECKEDORNO =? "; tmpSql = "SELECT ID,UserID,Password FROM AllUserTable"+ criteria ; sql = " SELECT * FROM (" + tmpSql + ")WHERE ROWNUM < = 10 " MINUS SELECT * FROM (" + tmpSql + ") WHERE ROWNUM <=5; OraclePreparedStatement ost_1 = (OraclePreparedStatement) con.prepareStatement(sql); if (n == 1) {
if (user.getUserName() != null && user.getUserName().length() > 0) {
ost_1.setString(1, "%" + user.getUserName() + "%");
ost_1.setString(2, "%" + user.getUserName() + "%");
}
if (user.getPosition() != null && user.getPosition().length() > 0) {
ost_1.setString(1, "%" +user.getPosition()+"%" );
ost_1.setString(2, "%" +user.getPosition()+"%" );
}
if(user.getCheckOrNo() != null && user.getCheckOrNo().length() > 0){
ost_1.setString(1, user.getCheckOrNo());
ost_1.setString(2, user.getCheckOrNo());
}
}
if (n == 2) {
if (user.getUserName()== null || user.getUserName().length() == 0) {
ost.setString(1,"%" +user.getPosition()+"%" );
ost.setString(2,user.getCheckOrNo());
ost.setString(3,"%" +user.getPosition()+"%" );    //出错 
ost.setString(4,user.getCheckOrNo());
}
if (user.getPosition() == null || user.getPosition().length()== 0) {
ost.setString(1, "%" + user.getUserName() + "%");
ost.setString(2, user.getCheckOrNo());
ost.setString(3, "%" + user.getUserName() + "%");    //出错
ost.setString(4, user.getCheckOrNo());
}
if(user.getCheckOrNo() == null || user.getCheckOrNo().length() == 0){
ost.setString(1, "%" + user.getUserName() + "%" );
ost.setString(2, "%" + user.getPosition() + "%" );
ost.setString(3, "%" + user.getUserName() + "%" ); //出错
ost.setString(4, "%" + user.getPosition() + "%" );
}
}
if (n == 3) {
ost.setString(1, "%" + user.getUserName() + "%");
ost.setString(2, "%" +user.getPosition()+"%" );
ost.setString(3, user.getCheckOrNo());
ost.setString(4, "%" + user.getUserName() + "%");     //出错
ost.setString(5, "%" + user.getPosition()+"%" );
ost.setString(6, user.getCheckOrNo());
} ost_1.executeQuery();
ResultSet rtst = ost_1.getResultSet(); ArrayList<UserBO> userList = new ArrayList<UserBO>(queryInfo.pageSize);
while (null != rtst && rtst.next()) {
String id = rtst.getString("ID");
String userID = rtst.getString("UserID");
String password = rtst.getString("Password");
userList.add(new UserBO(id, userID, password, employee, userName));
}
return userList;
}代码我删减了一部分  剩下的是会出现的问题的部分
前面的都没错
就是到了上面代码我标注错误的地方  
当n=1的时候 程序是没问题的
当n=2的时候 会在ost.setString(3,XXX );的地方出错 
当n=3的时候 会在ost.setString(4,XXX );的地方出错 
而且所有的错误提示都是java.sql.SQLException: 无效的列索引