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

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

   因为还是模糊查询,所以想到的解决思路是对所有字段进行查询  这时候就遇到了问题。
一般模糊查询用的是 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);
   }


猜你喜欢

转载自blog.csdn.net/a862048518/article/details/80037129