super.getHibernateTemplate().find(String queryString, Object[]values);的用法以下代码是否有错?
以下代码在debug模式下测试,发现hql拼接没有问题,问题在于ob[i]=("%"+us.getFullname()+"%");这一语句执行报异常,异常为ArrayIn...
以下代码在debug模式下测试,发现hql拼接没有问题,问题在于ob[i]=("%"+us.getFullname()+"%");这一语句执行报异常,异常为ArrayIndexOutOfBoundsException,不是很明白,求详细解答。知道的朋友能不能详细的跟我介绍下对象赋值和super.getHibernateTemplate().find(String queryString, Object[]values);的用法。本人想做个多条件的模糊查询,条件可为空,下面的写法能否实现?
public List<Teluser> seleUser(Teluser us) {
// TODO Auto-generated method stub
Object[] ob=new Object[]{};
int i=0;
String hql="from Teluser tu where ";
int k=0;
if (us!=null) {
if (us.getTel()!=null) {
hql=hql+"tu.tel like ?";
ob[i]=us.getTel();
k=k+1;
}
if (k==1) {
if (us.getFullname()!=null) {
hql=hql+"and tu.fullname like ?";
ob[i=i+1]="%"+us.getFullname()+"%";
k=k+1;
}
}else{
if (us.getFullname()!=null) {
hql=hql+"tu.fullname like ?";
ob[i]="%"+us.getFullname()+"%";
k=k+1;
}
}
if (k==1||k==2) {
if (us.getLoginname()!=null) {
hql=hql+"and tu.loginname like ?";
ob[i=i+1]="%"+us.getLoginname()+"%";
k=k+1;
}
}else{
if (us.getLoginname()!=null) {
hql=hql+"tu.loginname like ?";
ob[i]="%"+us.getLoginname()+"%";
k=k+1;
}
}
if (k==1||k==2||k==3) {
if (us.getType()!=null) {
hql=hql+"and tu.type like ?";
ob[i=i+1]="%"+us.getType()+"%";
k=k+1;
}
}else{
if (us.getType()!=null) {
hql=hql+"tu.type like ?";
ob[i]="%"+us.getType()+"%";
}
}
}
return super.getHibernateTemplate().find(hql, ob);
}
问题里代码写错了ob[i]=us.getTel(); 是 ob[i]="%"+us.getTel()+"%"; 在查找问题时修改代码测试,把修改后的代码拷贝到描述里了 汗一个。 还有就是ob[i]=("%"+us.getFullname()+"%");这句也是一样 加了括号还是一样的异常。 展开
public List<Teluser> seleUser(Teluser us) {
// TODO Auto-generated method stub
Object[] ob=new Object[]{};
int i=0;
String hql="from Teluser tu where ";
int k=0;
if (us!=null) {
if (us.getTel()!=null) {
hql=hql+"tu.tel like ?";
ob[i]=us.getTel();
k=k+1;
}
if (k==1) {
if (us.getFullname()!=null) {
hql=hql+"and tu.fullname like ?";
ob[i=i+1]="%"+us.getFullname()+"%";
k=k+1;
}
}else{
if (us.getFullname()!=null) {
hql=hql+"tu.fullname like ?";
ob[i]="%"+us.getFullname()+"%";
k=k+1;
}
}
if (k==1||k==2) {
if (us.getLoginname()!=null) {
hql=hql+"and tu.loginname like ?";
ob[i=i+1]="%"+us.getLoginname()+"%";
k=k+1;
}
}else{
if (us.getLoginname()!=null) {
hql=hql+"tu.loginname like ?";
ob[i]="%"+us.getLoginname()+"%";
k=k+1;
}
}
if (k==1||k==2||k==3) {
if (us.getType()!=null) {
hql=hql+"and tu.type like ?";
ob[i=i+1]="%"+us.getType()+"%";
k=k+1;
}
}else{
if (us.getType()!=null) {
hql=hql+"tu.type like ?";
ob[i]="%"+us.getType()+"%";
}
}
}
return super.getHibernateTemplate().find(hql, ob);
}
问题里代码写错了ob[i]=us.getTel(); 是 ob[i]="%"+us.getTel()+"%"; 在查找问题时修改代码测试,把修改后的代码拷贝到描述里了 汗一个。 还有就是ob[i]=("%"+us.getFullname()+"%");这句也是一样 加了括号还是一样的异常。 展开
1个回答
展开全部
看了你的代码我觉得你是不知道如何用数组,而不是hibernate
Object[] ob=new Object[]{};
并没有申请任何存储空间,你的os[i]肯定报数组下标越界的异常啊
Object[] ob=new Object[]{};
并没有申请任何存储空间,你的os[i]肯定报数组下标越界的异常啊
更多追问追答
追问
汗,忘了,好久没写代码了,忘记要定义数组长度了.. 但是,这里有个疑问了,我的数组长度需要根据最终的i值来确定,那么,我能不能直接定义一个比i值最大化还+1的数组长度? 这样在最后(hql,ob)取值的时候,是否会有影响?
追答
你既然要用一个动态的数据存储结构(数组是静态结构的),就不应该选择数组....看你的代码我建议你用list,你不过是想根据传入的对象判断需要加入哪些where条件,然后再将where部分的限定参数给加上不是吗?
比如你直接写成
List l= new ArrayList();
if (us.getTel()!=null) {
hql += "and tu.fullname like ?";
list.add(us.getTel());
}
......
最后return super.getHibernateTemplate().find(hql, l.toArray());就可以了吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询