1. 程式人生 > >Java動態拼接SQL--01

Java動態拼接SQL--01

    2、SQL語句的拼接

  1. privatevoid button1_Click(object sender, EventArgs e)  
  2.        {  
  3.            //先寫一個基礎的查詢語句,即無論是否有條件,都執行這段程式碼。
  4.            string sql = "select * from T_User";  
  5.            //定義一個list<string>型別的集合,用來放拼接的SQL語句
  6.            List<string> list = new List<string>();  
  7.            //根據使用者輸入的情況來拼接後面的SQL語句。
  8.            if (!string .IsNullOrEmpty(txtID.Text.Trim()))  
  9.            {  
  10.                string sqla = "Chr_UserID='" + txtID.Text.Trim() +"'";  
  11.                list.Add(sqla);  
  12.            }  
  13.            if (!string .IsNullOrEmpty(txtName.Text .Trim ()))  
  14.            {  
  15.                string sqlb = "Chr_Name='" + txtName.Text.Trim() + "'";  
  16.                list.Add(sqlb);  
  17.            }  
  18.            if (!string.IsNullOrEmpty(txtClass.Text.Trim()))  
  19.            {  
  20.                string sqlb = "Chr_Class='" + txtClass.Text.Trim() + "'";  
  21.                list.Add(sqlb);  
  22.            }  
  23.            //判斷如果list中有值,即使用者輸入了某些條件,就開始進行SQL語句的拼接。
  24.            if (list .Count >0)  
  25.            {  
  26.                //這個是用了string.join方法,用and作為連線符傳來起list中的各個SQL語句
  27.                sql += " where " + string.Join(" and ", list.ToArray());  
  28.            }  
  29.            string constr = "server=.;database=Charge;uid=sa;pwd=1;";  
  30.            SqlConnection con = new SqlConnection(constr);           
  31.            con.Open();              
  32.            SqlCommand sqlcmd = new SqlCommand(sql,con);                      
  33.            SqlDataReader dr = sqlcmd.ExecuteReader();  
  34.            DataTable dt = new DataTable();  
  35.            //之後用datatable來接收讀取到的資料。
  36.            dt.Load(dr);  
  37.            //賦值給控制元件。
  38.            dataGridView1.DataSource = dt;  
  39.            //最後記得關閉
  40.            con.Close();                            
  41.        }  

關於java多條件查詢SQL語句拼接的小技巧

最近在實驗室做專案的時候遇到了java的多條件查詢,翻看了論壇上其他大牛們的部落格,都沒有給出一個詳細的解答。自我探索了一會後給出了下面這樣的使用技巧,還算方便,僅供各位參考。

前端的頁面顯示

頁面上方是查詢所給欄位名,下方是測試的查詢資料

查詢所給的表單程式碼

<form action="" >
    <table>
    <tr>
    <td><span>PMNM(內碼)</span></td>
    <td><span><input name="PMNM" type="text"></span></td>
    <td><span>PMBM(編碼)</span></td>
    <td><span><input name="PMBM" type="text"></span></td>
    <td><span>PMCS(名稱)</span></td>
    <td><span><input name="PMCS" type="text"></span></td>
    <td><span>LBQF(型別)</span></td>
    <td><span><input name="LBQF" type="text"></span></td>
    <td><span><input name="codeSubmit" class="search-btn" 

type="submit" value="查詢"></span></td>
    </tr>
    </table>
</form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在後臺servlet中獲取表單的name

HashMap<String, Object> key=new HashMap<String, Object>();//在不知道屬性型別的情況下,用HashMap<String,Object>來代替從上述表單中所獲取的name值,並統一存放在HashMap中
            String PMNM=request.getParameter("PMNM");
            key.put("內碼", PMNM);
            String PMCS=request.getParameter("PMCS");
            key.put("名稱", PMCS);
            String PMBM=request.getParameter("PMBM");
            key.put("編碼", PMBM);
            String LBQF=request.getParameter("LBQF");
            key.put("型別",LBQF);

    //呼叫Service層的serach方法進行查詢
            ArrayList<Commmon9831> a=h.Search(key);//用ArrayList來表示所查詢的結果
            request.setAttribute("a", a);
            request.getRequestDispatcher("所要跳轉的顯示查詢結果頁面").forward(request, response);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

好了,上述的操作完成以後,就可以寫DAO層中查詢方法了,也是最重要的部分

public ArrayList<“bean的型別”> Search(HashMap<String ,Object> key )
    {   ArrayList<Commmon9831> a=new ArrayList<Commmon9831>();
       String sql="select * from “資料庫名” ";//最原始的sql查詢語句
       //依次用Object類來表示HashMap中的屬性值
       Object m=key.get("內碼");
       Object s=key.get("名稱");
       Object P=key.get("編碼");
       Object L=key.get("型別");

       int count=0;//引入一個count值來控制where條件後的屬性值,及在sql語句中的位置
    //注意:**完成上述操作後,並沒有判斷Object物件是否為空值,下面判斷是否為空的方法也很重要**
    if(!(m.toString().equals(""))||!(s.toString().equals(""))||!(P.toString().equals(""))||!(L.toString().equals("")))
       {       sql=sql+" where";
       //如果上述所給條件有一個不為空,則在sql語句中加上“where”。

        if(m.toString().equals(""))
           sql=sql+"";
       else{
       //用多個if來表示查詢的情況,這裡是本文的重點。
       //因為不清楚所給的條件是哪一個,設定count值為0,當在HashMap值前的查詢條件不為空,則count++。當count>0時,說明當前查詢條件不為一,則sql=sql+“and”。
       if(count>0)
            sql=sql+" and ";

            sql=sql+" PMNM = '" +key.get("內碼")+ "'";

             if(s.toString().equals(""))
           sql=sql+"";   //sql關鍵字指尖要存在空格,不然無法執行
       else {if(count>0)
            sql=sql+" and ";

            sql=sql+" PMCS = '" +key.get("名稱")+ "'";
            count++;
        }
       if(P.toString().equals(""))
           sql=sql+"";
       else {if(count>0)
            sql=sql+" and ";

            sql=sql+" PMBM = '" +key.get("編碼")+ "'";
            count++;
        }
       if(L.toString().equals(""))
           sql=sql+"";
       else {if(count>0)
            sql=sql+" and ";

            sql=sql+" LBQF = '" +key.get("型別")+ "'";
            count++;
        }
       }
       System.out.println(sql);//在控制檯上打印出sql語句檢視拼接結果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

隨筆:

———————————————————————————— 

拼接sql語句是多條件查詢的重要部分,在上述所給的技巧中,使用一切查詢情況。其中判斷HashMap中鍵值對是否為空,利用count值來判斷查詢條件情況是本文的重點。

===========================================================================

使用Java註解實現拼接sql語句的功能

原創 2016年05月14日 16:18:42

相關推薦

Java動態拼接SQL--01

    2、SQL語句的拼接 privatevoid button1_Click(object sender, EventArgs e)          {              //先寫一個基礎的查詢語句,即無論是否有條件,都執行

spring-data-jpa動態拼接sql語句實現動態的多表條件查詢

** spring-data-jpa 動態拼接sql語句 ** spring-data-jpa對於簡單的資料操作確實使用起來比較方便,但是對於一些比較複雜的動態的多表條件查詢就不是那麼簡單了,對於需要些sql語句並且需要動態的新增條件的時候就得使用jpa的EntityManager來

解析xml檔案動態拼接sql語句

現在有很多開源的持久層框架,比如Mybatis、BeetlSQL、Hibernate、DbUtils。當我們需要自己手寫sql的時候。使用Mybatis、BeetlSQL(這個個人更喜歡,因為結合了hibernate和mybatis各自的優點)框架相對來說更好,因為它將sql 放到配置檔案裡面。

使用mybatis提供的各種標籤方法實現動態拼接Sql。這裡演示where標籤和if標籤實現使用姓名的模糊查詢和性別查詢使用者列表,當用戶沒有選擇姓名以及性別時查詢出所有的記錄。

1.需求:   使用姓名的模糊查詢和性別查詢使用者列表,當用戶沒有選擇姓名以及性別時查詢出所有的記錄。 2.在UserMapper介面中定義方法:   public List<User> findUserByNameAndSex(User user); 3.在UserMapper.xml中

使用mybatis提供的各種標籤方法實現動態拼接Sql。使用sql片段提取重複的標籤內容

Sql中可將重複的sql提取出來,使用時用include引用即可,最終達到sql重用的目的,如下: <select id="findUserByNameAndSex" parameterType="com.huida.po.User" resultType="com.huida.po.Us

mybatis if test 相等的情況如何動態拼接sql

今天程式需要根據前臺的傳過來的狀態判斷在資料庫裡是取 where a>b  還是 a<b 還是 a=0 的情況  搞了一下午最後試了下 在if 裡面拼接  #{status}=#{status}  一切ok了  詳細程式碼如下   

mysql 儲存過程動態拼接sql並執行賦值

CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定義變數 DECLARE _num FLOAT(14,6) DEFAULT 0; ## @表示全域性變數 相當於php

mysql 存儲過程動態拼接sql並執行賦值

pro roc ddt reat create 不用 lec efi 語句 CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定義變量 DECLA

根據條件查詢動態拼接sql語句

function append_where(&$sql, $has_where) { $sql .= $has_where ? ' AND ' : ' WHERE '; return $sql; } function demo($name = ''

Mybatis動態拼接SQL

MyBatis中用於實現動態SQL的元素主要有: ifchoose(when,otherwise)trimwheresetforeachif就是簡單的條件判斷,利用if語句我們可以實現某些簡單的條件選擇。先來看如下一個例子:        XML程式碼事例 <sele

Java動態生成SQL語句通過JDBC達成資料庫操作

在java中使用jdbc進行資料庫操作的時候 我們或許需要從多個表中進行查詢和插入操作 特別是如果多個表還有相互的依賴關係的話,插入操作就顯得非常難受 因為或許每一個動作,都需要重寫一個完全不同的sql語句 這樣的話程式碼量確實十分的大 而且程式碼會顯

儲存過程中動態拼接sql拼接單引號問題

create or replace procedure mergerOrder(       v_ids in varchar2,       v_productCode in varchar2,       v_productCateCode in varchar2)

Java拼接執行動態SQL語句

  在實際業務中經常需要拼接動態SQL來完成複雜資料計算,網上各類技術論壇都有討論,比如下面這些問題:   拼接動態SQL的一般做法有:   1、使用動態語句   很多資料庫都提供了處理動態SQL的語法,如Oracle的EXECUTE IMMEDIATE語

Java中如何拼接sql或者其他含有變量語句

java中如何拼接sql或者其他含有變量語句個人淺談Java拼接sql語句原則。本原則是個人感悟(不保證完全正確)第一條原則,首先將一條完整的字符串寫好。(例如是"select * from users where id=(id+1)")凡是變量都需要在其前面加上+,且前面是要加上",如果後面不是",則後面必

java 中的 sql 單引號雙引號拼接變量

urn logs number pla page select ava ringbuf flag String sqlString="select * from tb_wf_main where trim(WF_NAME) = ‘ " + wfName.trim() +

Java中如何拼接sql或者其他含有變數語句

本原則是個人感悟(不保證完全正確) 第一條原則,首先將一條完整的字串寫好。(例如是"select * from users where id=(id+1)") 凡是變數都需要在其前面加上+,且前面是要加上",如果後面不是",則後面必須也要加上+"。 第二條原則如果遇上括號(id+1),那加號必定死以括號

linq to sql 動態拼接條件

遇到了一個比較特殊的查詢(表沒有設計好,也就是加一個欄位能解決了),才發現了linq to sql 還可以這樣的去動態的拼接where條件,不然也不會這樣寫,這裡記錄一下,程式碼如下: from

java反射拼接方法名動態執行方法

近期由於負責專案的一個模組,該模組下有很多分類,每個分類都有一個編碼code,這個值是作為一個引數攜帶過來的.但是每個code確實對應一個方法的. code的值有很多個,自己又不想做ifelse或者switch判斷於是就狂搜資料,主要讓我發現利用java的反射機制可以完

java連線資料庫和執行靜態和動態sql語句

►JDBC (Java DatabaseConnectivity) 是用於執行SQL 語句的Java 應用程式介面,由一組用Java 語言編寫的類和介面組成。 ►JDBC 是一種規範,各資料庫廠商為J

mybatis中怎麼使用like形成動態模糊查詢,錯誤使用CONCAT拼接sql的看過來

這個問題曾經困擾了我很長時間,因為我需要動態引數的模糊查詢,上網找了很多,都說用CONCAT但我用ORACLE的時候發現並不能滿足我的需求。 今天就說一下,我是怎麼解決這個問題的。 其實我當時為了拼sql一經頭昏腦脹了,但是你想想看,為什麼一定要在sql中拼湊sql呢?