日期:2014-05-17  浏览次数:20828 次

索引列无效,哪里出错了
下面是我的查询学生的方法。当只查询studentNo的时候,或者没有查询条件的时候能够正常显示结果。但是如果输入name,sex,classes,birthday的检索条件的话,都会报错 无效的索引列,请问哪里出错了啊。


public List<Student> SearchStudent(String studentNo, String name, int sex, int classes, String birthday) {
String sql = "SELECT a.* FROM AA_XQ a  WHERE 1 = 1";
if(studentNo != "" && studentNo.length() != 0)
sql+=" and a.STUDENTNO = ?";
if(name != "" && name.length() != 0)
sql+=" and a.NAME = ?";
if(sex != 0)
sql+=" and a.SEX = ?";
if(classes != 0)
sql+=" and a.CLASSES = ?";
if(birthday != "" && birthday.length() != 0)
sql+=" and a.BIRTHDAY = ?";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Student> list = new ArrayList<Student>();
try {
conn = connection.getConnection();
ps = conn.prepareStatement(sql);
if(studentNo != "" && studentNo.length() != 0)
ps.setString(1, studentNo);
if(name != "" && name.length() != 0)
ps.setString(2, name);
if(sex != 0)
ps.setInt(3, sex);
if(classes != 0)
ps.setInt(4, classes);
if(birthday != "" && birthday.length() != 0)
ps.setString(5, birthday);
rs = ps.executeQuery();
while (rs.next()) {
Student s = new Student();
s.setStudentNo(rs.getString("studentNo"));
s.setName(rs.getString("name"));
s.setSex(rs.getInt("sex"));
s.setClasses(rs.getInt("classes"));
s.setBirthday(rs.getDate("birthday"));
s.setId(rs.getInt("id"));
list.add(s);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
connection.close(rs, ps, conn);
}
return list;
}

------解决方案--------------------
把所有索引列打印出来先对一下
------解决方案--------------------
如果你的sex值等于0  ps.setInt(3, sex);这句就会跳过去,你的preparedStatement索引就跳过去一个  应该会有影响的
------解决方案--------------------
无效的索引列通常是列名写错了,建议把生成的SQL语句打印出来然后在数据库里执行一下,方便查错