模糊查询数据库所有字段的值

模糊查询数据库的所有值,例如:输入 张 显示数据库里所有含有张的信息  

   因为还是模糊查询,所以想到的解决思路是对所有字段进行查询  这时候就遇到了问题。
一般模糊查询用的是 select * from 表名 where 列名 like '%%'; 但是查询所有列不可能手动输入所有列。查了一下,sql中有concat(str1,str2,...,strn)函数,这个函数参数是列名,这样我们可以做到查询所有列,但是还是需要我们输入所有列名。那么有没有一种方法获得所有列名存储起来,然后放入concat()函数中呢。

    答案肯定是有的,想了一种办法,就是先连接数据库,将获得的所有列名放入list中。那么list里的内容就是[列名1,列名2,.....]。显然我们要的是list里面的内容,[]这个我们就不需要。利用list.toString().replaceAll("\\[|\\]","")可以将list外的[]去除,就可以在sql语句中利用concat()查询所有列了。

   还需要注意的是concat()函数有个缺点,如果带的参数(列名)下存在NULL的话,这一条数据就会返回null值,所以进行模糊查询所有字段的话,要先保证数据库里不存在NULL值,否则没模糊查询容易漏了数据。可以在获得列名的同时,对这一列进行判断是否存在NULL值,存在的话用''空字符串代替,这样就不会漏数据。
    获得所有字段(列名)并去除NULL值代码:

    Class.forName("com.mysql.jdbc.Driver").newInstance();
   conn=DriverManager.getConnection("jdbc:mysql://172.17.143.230/info?useUnicode=true&characterEncoding=UTF-8&useSSL=false","root","123456");
   String sql="select * from people";
   PreparedStatement stmt;
   stmt = (PreparedStatement) conn.prepareStatement(sql);
   ResultSet rs=stmt.executeQuery(sql);
   ResultSetMetaData data=(ResultSetMetaData) rs.getMetaData();
   if(rs.next()){
   for(int i = 1 ; i<= data.getColumnCount();i++){
     String columnName = data.getColumnName(i);
     General.list.add(columnName);
     String sql1="update people set "+columnName+"='' where "+columnName+" is null;";
     stmt.executeUpdate(sql1);
    }
   }
    模糊查询所有字段代码:

    String sql2="select * from people where concat("+General.list.toString().replaceAll("\\[|\\]","")+") like '%"+ZD+"%';";
   rs=stmt.executeQuery(sql2);
   while(rs.next())
   {
    HashMap<String, Object> map1 = new HashMap<String, Object>();
    for(int j=1;j<data.getColumnCount();j++)
    {
     map1.put(data.getColumnLabel(j), rs.getObject(j));
    }
    list.add(map1);
   }


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值