1. 程式人生 > >模糊查詢資料庫所有欄位的值

模糊查詢資料庫所有欄位的值

模糊查詢資料庫的所有值,例如:輸入 張 顯示資料庫裡所有含有張的資訊     因為還是模糊查詢,所以想到的解決思路是對所有欄位進行查詢  這時候就遇到了問題。一般模糊查詢用的是 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);
   }