精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解Java EE中SQL語句的自動(dòng)構(gòu)造方法

開發(fā) 后端 數(shù)據(jù)庫運(yùn)維
在通常的Web開發(fā)中對(duì)INSERT、DELETE、UPDATE 三種SQL語句的處理可以說是無處不在,如果簡單的都用手工來構(gòu)造這些SQL語句的話, 一方面給我們的開發(fā)帶來很大的工作量, 另一方面系統(tǒng)靈活性受到很大的限制。

INSERT、DELETE、UPDATE 三種SQL語句是數(shù)據(jù)庫技術(shù)的三大基本語句. 在通常的Web開發(fā)中對(duì)它的處理可以說是無處不在。如果簡單的都用手工來構(gòu)造這些SQL語句的話, 一方面給我們的開發(fā)帶來很大的工作量, 另一方面系統(tǒng)靈活性受到很大的限制. 那么能不能基于某種規(guī)則讓系統(tǒng)自動(dòng)從頁面表單中取出元素構(gòu)造出SQL語句呢? 首先讓我們看看一般INSERT、DELETE、UPDATE 三種語句的基本形式:

INSERT INTO table_name (col_1,col_2,col_3,) VALUES (value_1,value_2,value_3 …)
DELETE FROM table_name WHERE col_n=value_n
UPDATE table_name SET col_1=value_1,col_2=value_2,col_3=value_3 WHERE col_x=value_x

我們知道,借用Java EE中的request.getParameterNames()方法可以讀到表單中的所有元素的名稱,有了元素名稱借用request.getParameter(elementName)方法可以獲取該元素的值。假設(shè)在開發(fā)中我們讓頁面元素的名稱和底層數(shù)據(jù)庫表的字段名一致。那么在這三種語句中col_n 和 value_n 對(duì)我們來說就不是未知的,未知的數(shù)據(jù)就剩下了 table_name,col_x和value_x 。現(xiàn)在如果我們寫一個(gè)方法,傳入request對(duì)象,再把table_name,col_x,value_x作為參數(shù)傳入方法,那么我們可以輕松的自動(dòng)構(gòu)造SQL語句了。但這樣做還是有欠靈活,因?yàn)橐环矫婷恳淮问褂迷摲椒ㄎ覀兌嫉萌斯さ脑O(shè)置table_name,col_x和value_x;另一方面別忘了sql語句中對(duì)于字符串的字段需要加單引號(hào)和替換字符串中間的單引號(hào),而整型、浮點(diǎn)型、系統(tǒng)函數(shù)(如now(),to_date()等數(shù)據(jù)庫函數(shù))等不需要做單引號(hào)的處理,這些如果沒有好的解決的話,我們的方法將受到非常大的限制。要達(dá)到再進(jìn)一步分離***的辦法就是在表單元素命名上面做文章,我們可以自己定義一套元素命名規(guī)則,對(duì)不同規(guī)則命名的元素做不同的處理--設(shè)我們定義元素命名規(guī)格如下:

1. table_name,col_x,value_x這類元素,為公共元素。我們規(guī)定這類元素名以c_k開頭(c=common),我們限制table_name的元素名為c_table,col_x=value_x定義到一起,元素名定為c_where. 當(dāng)然我們別忘了我們還需要一個(gè)元素表示構(gòu)造什么樣(INSERT、DELETE、UPDATE)的SQL語句。我們給這個(gè)元素命名c_genre,它的值被限制在INSERT、DELETE、UPDATE這三者之中。

2. 對(duì)于表單中對(duì)應(yīng)數(shù)據(jù)庫字符串類型的元素,在SQL構(gòu)造中需要做單引號(hào)的處理。這類元素我們暫且稱他們?yōu)樽址驮亍W址驮匚覀円?guī)定其名為s_+數(shù)據(jù)庫表字段名 (s=String)。

3. 對(duì)于不需要做但引號(hào)處理的元素(如integer型、float型、數(shù)據(jù)庫系統(tǒng)函數(shù)--如now(),to_date()等等)。我們暫且簡單的統(tǒng)稱這類元素為整型元素。對(duì)于整型元素我們限制其命名規(guī)則為i_+數(shù)據(jù)庫表字段名(i=Integer)。

基于上面的規(guī)格我們可以非常輕松寫一個(gè)Javabean,代碼如下:

/**
 * @version: 1.1
 * @Time: 2008.03.02
 */
package com.river.page ;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
public class PageUtil {
  private HttpServletRequest request = null ;
  public PageUtil(){
  }
  public void init(HttpServletRequest _request){
    this.request = _request ;
  }
  public void clear(){
    if(this.request != null){
      this.request = null ;
    }
  }
  public String get(String elementName){
    if(request == null || request.getParameter(elementName) == null){
      return "";
    }else{
      return request.getParameter(elementName);
    }
  }
  public String get(HttpServletRequest _request,String elementName){
    init(_request);
    return get(elementName);
  }
 
  public String getSQL(HttpServletRequest _request){
    init(_request);
 return getSQL();
  }
  public String getSQL(){
    String sqlstr = "";
    String c_table = get("c_table");
    String c_genre = get("c_genre");
    String c_where = get("c_where");
    if(c_genre == null || c_genre.equals("")){
      return "the action is null/empty";
    }
    if(c_table == null || c_table.equals("")){
      return "unknow table/empty" ;
    }
    if(c_genre.equalsIgnoreCase("INSERT")){
      java.util.Enumeration arg_names = request.getParameterNames();
      String colstr = "",valstr = "";
      String arg_name,pre_name,end_name ;
      while(arg_names.hasMoreElements()){
        arg_name = String.valueOf(arg_names.nextElement());
        if(arg_name.length() < 2){
          continue;
        }
        pre_name = arg_name.substring(0,2);
        end_name = arg_name.substring(2);
        if(pre_name.equalsIgnoreCase("i_")){
          colstr = colstr+","+end_name;
          if(get(arg_name).equals("")){
            valstr = valstr+",NULL";
          }else{
            valstr = valstr + "," + String.valueOf(get(arg_name));
          }
        }else if(pre_name.equalsIgnoreCase("s_")){
          colstr = colstr+","+end_name;
          if(get(arg_name).equals("")){
            valstr = valstr+",NULL";
          }else{
            valstr = valstr+",'"+get(arg_name).replaceAll("'","''")+"'";
          }
        }
      }
      if(!colstr.equals("")){
        colstr = colstr.substring(1);
        valstr = valstr.substring(1);
      }
      sqlstr = "INSERT INTO "+c_table+" ("+colstr+") VALUES ("+valstr+")";
      return sqlstr;
    }else if(c_genre.equalsIgnoreCase("UPDATE")){
      java.util.Enumeration arg_names = request.getParameterNames();
      String colstr = "";
      String arg_name,pre_name,end_name ;
      while(arg_names.hasMoreElements()){
        arg_name = String.valueOf(arg_names.nextElement()).trim();
        if(arg_name.length() < 2){
          continue;
        }
        pre_name = arg_name.substring(0,2);
        end_name = arg_name.substring(2);
        if(pre_name.equalsIgnoreCase("i_")){
          if(get(arg_name).equals("")){
            colstr += ","+end_name+"=NULL";
          }else{
            colstr += ","+end_name+"="+get(arg_name);
          }
        }else if(pre_name.equalsIgnoreCase("s_")){
          if(get(arg_name).equals("")){
            colstr += ","+end_name+"="+get(arg_name);
          }else{
            colstr += ","+end_name+"='"+get(arg_name).replaceAll("'","''")+"'";
          }
        }
      }
      if(!colstr.equals("")){
        colstr = colstr.substring(1);
      }
      sqlstr = "UPDATE "+c_table+" SET "+colstr;
      if(!c_where.equals("")){
        sqlstr += " WHERE "+c_where;
      }
      return sqlstr;
    }else if(c_genre.equalsIgnoreCase("DELETE")){
      sqlstr = "DELETE FROM "+c_table;
      if(c_where != null && !c_where.equals("")){
        sqlstr += " WHERE "+c_where;
      }
    }else{
      com.river.debug.Debug.show("unknow action type : "+c_genre);
      return null;
    }
    return sqlstr;
  }
  public String toString(){
    return "version 1.0, date 2005.03.02, author river";
  }
}

這樣我們就可以根據(jù)頁面元素的命名來指導(dǎo)SQL語句的生成。這樣做有很多的明顯的好處:

1.減少編碼工作,對(duì)于元素很多表單,用不著我們?nèi)懸淮蠖训拇a,不用去擔(dān)心哪個(gè)元素落下了,元素名有沒有些錯(cuò),單引號(hào)有沒有處理。

2.通用、穩(wěn)定、易于維護(hù),Javabean固有的優(yōu)點(diǎn),就不用太多的說明了。

3.分離表層的表單內(nèi)容與邏輯層SQL語句的構(gòu)造。設(shè)想一下,如果我們數(shù)據(jù)庫表結(jié)構(gòu)有調(diào)整時(shí),那么我們只要修改一下表單就好了,根本就不用理原來寫好的邏輯處理。附帶著再說一句,設(shè)想如果我們再寫一個(gè)類自動(dòng)執(zhí)行SQL,那么對(duì)于一些基本的增、刪、改操作都可以映射到同一個(gè)action里面來處理,且不是很爽?

當(dāng)然,這樣做的缺點(diǎn)也是有的。那就是有一定的性能損耗。特別是碰到表單元素非常多時(shí)。但是我想對(duì)于那些不是很"苛刻"的項(xiàng)目這點(diǎn)損耗是值得的。

【編輯推薦】

  1. SQL高手進(jìn)階 深入SQL語句性能調(diào)整
  2. 教你快速掌握一些經(jīng)常用到的SQL語句
責(zé)任編輯:佚名 來源: 51CTO整理
相關(guān)推薦

2010-09-07 11:53:00

SQL語句

2010-10-14 09:32:52

SQL Server

2009-06-23 08:18:31

SQL語句構(gòu)造JavaBeanJ2EE

2010-12-03 09:55:31

PHP構(gòu)造方法

2017-03-14 14:38:21

數(shù)據(jù)庫SQL語句集合運(yùn)算

2020-09-21 08:32:03

JavaSQL公共字段

2017-03-01 14:16:20

2010-04-29 14:06:40

Oracle SQL

2010-09-06 11:46:03

SQL Server語句

2010-04-13 14:36:17

Oracle性能檢測

2010-09-25 16:21:41

SQL語句

2009-07-16 11:35:57

自動(dòng)生成ibatis改造

2010-09-07 16:46:56

SQL語句nsert

2010-11-12 13:08:36

動(dòng)態(tài)sql語句

2010-09-17 16:53:14

SQL中CREATE

2010-09-17 09:35:51

SQL中if語句

2010-11-09 17:13:17

SQL Server中

2010-09-06 09:36:51

SQL語句

2009-06-29 17:03:41

自動(dòng)生成Getter和Eclipse

2010-06-08 17:42:50

UML構(gòu)造塊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲欧美在线视频| 午夜在线视频一区二区区别| 欧美精品 日韩| 成人在线免费高清视频| 丰满大乳国产精品| 久久蜜桃资源一区二区老牛| 中文一区二区视频| 国产精品久久久久久久99| xxx.xxx欧美| 久久久久久久久久电影| 国产在线播放不卡| 国产黄色片视频| 国产一区二区在线| 欧美成人性战久久| 亚洲五月天综合| av免费在线观| 久久久久国产精品免费免费搜索| 国产精自产拍久久久久久| 久久艹精品视频| 精品国产乱码久久久久久1区2匹| 91精品国产91久久综合桃花| av免费观看网| 国产美女在线观看| 久久久久久亚洲综合影院红桃| 成人h片在线播放免费网站| 日韩激情在线播放| 综合激情婷婷| 亚洲视频日韩精品| 日本一级大毛片a一| 成人国产精品| 日韩欧美成人精品| 妞干网在线播放| 自拍视频在线播放| wwwwxxxxx欧美| 99re视频| 国产精品久久久午夜夜伦鲁鲁| 国产精品视区| 欧美疯狂做受xxxx高潮| 999久久久国产| 尤物tv在线精品| 日韩久久久精品| 中日韩av在线播放| 欧美日韩视频网站| 天天影视涩香欲综合网| 欧美这里只有精品| fc2ppv国产精品久久| 国产精品嫩草99a| 久久久婷婷一区二区三区不卡| 国产精品一级二级| 美女久久久精品| 欧美在线视频在线播放完整版免费观看| 在线免费观看亚洲视频| 香蕉视频官网在线观看日本一区二区| 在线观看日韩www视频免费| 成人无码www在线看免费| 亚洲精品国产九九九| 欧美一区二区三区四区五区 | 丰满人妻一区二区三区四区53 | 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 深夜福利视频一区| 成+人+亚洲+综合天堂| 丁香五月网久久综合| 国产高清不卡视频| 国产精品12区| 超碰97网站| 亚洲成人精品女人久久久| 国产精品白丝av| 51国偷自产一区二区三区| 国产aⅴ爽av久久久久成人| 精品中文字幕一区二区 | 欧美午夜在线播放| 日韩欧美成人激情| 欧美成人精品一区二区综合免费| 亚洲天堂中文字幕在线观看| 337p日本欧洲亚洲大胆色噜噜| 337p日本欧洲亚洲大胆张筱雨| 久久伊人精品| 日韩欧美精品三级| 国产激情视频网站| 久久99久久人婷婷精品综合 | 天天干天天操天天做| a成人v在线| 91精品婷婷国产综合久久| 99九九99九九九99九他书对| 国产精一区二区| 日韩欧美国产午夜精品| 成人欧美精品一区二区| 亚洲自拍都市欧美小说| 最新日韩中文字幕| 免费网站看av| 在线亚洲欧美| 国产精品美女免费看| 91av国产精品| 高清国产一区二区| 欧美日韩亚洲在线| 激情视频在线观看| 天天色综合天天| 免费看污污网站| 日本免费精品| 日韩精品免费在线播放| 午夜国产福利视频| 黄色免费成人| 国产精品你懂得| 性做久久久久久久久久| 国产午夜精品久久久久久免费视| 波多野结衣激情| 日本在线影院| 91麻豆精品国产91久久久| 最新在线黄色网址| 亚洲成av人电影| 欧美孕妇毛茸茸xxxx| 国产精品热久久| 91小视频免费看| 一本—道久久a久久精品蜜桃| av有码在线观看| 精品视频123区在线观看| 欧美一级片黄色| 日韩免费久久| 欧美一级在线播放| 国产av无码专区亚洲av| 国产欧美日韩亚州综合| 国产精彩视频一区二区| 国产999精品在线观看| 日韩高清中文字幕| 国产一级二级三级| 美女网站视频久久| 欧美一区二区三区四区夜夜大片| 97超碰在线公开在线看免费| 欧美日韩卡一卡二| 久久久久亚洲av无码专区桃色| 欧美黄在线观看| 国产精品88a∨| 色香蕉在线视频| 亚洲欧美另类在线| 中文字幕国产免费| 欧美亚洲在线日韩| 欧美在线一级视频| 欧美特黄一级视频| 亚洲一区在线观看网站| 天天操精品视频| 成人激情开心网| 日韩免费在线播放| 欧美黄色小说| 精品国产乱码久久久久久婷婷| 免费看91视频| 欧美黄色免费| 99久久综合狠狠综合久久止| 九七电影韩国女主播在线观看| 在线观看免费亚洲| 色哟哟精品观看| 久久久久久婷| 久久综合福利| 欧美日韩国产v| 亚洲欧美日韩中文在线| 黄色在线免费观看| 26uuu国产一区二区三区| 免费看黄在线看| 成人资源在线| 午夜精品99久久免费| 日本精品一二区| 婷婷国产v国产偷v亚洲高清| 人妻av一区二区| 99精品国产在热久久| 国产在线播放一区二区| 交100部在线观看| 精品无人区乱码1区2区3区在线| 精品国产乱码一区二区| 91网站视频在线观看| 免费在线激情视频| 欧美伦理在线视频| 91精品久久久久久久久久另类| 女女色综合影院| 日韩亚洲欧美综合| 久久精品这里有| 91亚洲精品久久久蜜桃网站| 97av视频在线观看| 成人久久久久| 亚洲一区二区三区香蕉| 青春草免费在线视频| 亚洲精品成人久久| 国产乱码77777777| 亚洲欧洲美洲综合色网| 精品人妻二区中文字幕| 国产亚洲在线观看| 日本一区二区三区精品视频| 欧美视频精品| 欧美日本精品在线| 色视频在线看| 欧美日韩精品免费| 免费日韩在线视频| 久久精品一区二区三区不卡| 日本激情综合网| 欧美日韩1080p| 牛人盗摄一区二区三区视频| 日韩毛片一区| 欧美激情一区二区久久久| 亚洲欧美色视频| 欧美色中文字幕| 久久久久久天堂| 国产亚洲精品资源在线26u| 欧美成年人视频在线观看| 激情欧美一区| 亚洲精品国产精品国自产| 2023国产精华国产精品| 国产精品aaa| 欧美性受ⅹ╳╳╳黑人a性爽| 精品视频www| 国产精品一二三四五区| 色综合久久久久久久久| 国产精品三区在线观看| 久久只精品国产| 永久免费黄色片| 久久免费国产| 大西瓜av在线| 99国产精品免费视频观看| 久久99国产精品| 精品入口麻豆88视频| 日本精品性网站在线观看| 二区三区在线观看| 伊人激情综合网| 日韩中文字幕免费在线观看| 欧美日韩一区二区三区四区 | 韩国福利在线| 亚洲精品在线网站| 99这里有精品视频| 欧美午夜理伦三级在线观看| 中日韩精品视频在线观看| 亚洲另类在线制服丝袜| 欧美人与性囗牲恔配| 99热在这里有精品免费| 免费啪视频在线观看| 国内精品免费**视频| 亚洲色图38p| 亚洲一区日韩在线| 无码熟妇人妻av在线电影| 99国产精品一区二区| 日韩欧美一区二区在线观看 | 精品综合在线| 成人午夜网址| dy888夜精品国产专区| av日韩久久| 国产在线观看精品| 久久久久黄色| 国产精品中文在线| 亚洲国产尤物| 国产精品91视频| 欧美无毛视频| 日本国产精品视频| 性国裸体高清亚洲| 欧美孕妇性xx| 日韩电影免费观| 青青草原成人在线视频| 天堂网在线最新版www中文网| 国内外成人免费激情在线视频 | 香蕉视频一区| 久99久视频| 亚州av一区| 蜜桃导航-精品导航| 伊人久久大香线蕉| 日韩精品欧美专区| 成人中文视频| 中文网丁香综合网| 欧美国产激情| 日韩网站在线免费观看| 一本色道久久综合亚洲精品不卡| 日韩精品 欧美| 亚洲欧美视频| 五月婷婷狠狠操| 久久精品国产999大香线蕉| 超碰成人在线播放| 国产经典欧美精品| 四虎精品一区二区| 久久综合精品国产一区二区三区| 一级片手机在线观看| 欧美激情在线看| 午夜三级在线观看| 亚洲综合视频网| 成人免费a视频| 欧美色图第一页| 国产深喉视频一区二区| 亚洲第一精品夜夜躁人人爽| 日本私人网站在线观看| 在线视频日韩精品| 综合图区亚洲| 日本久久久久久| 国产a亚洲精品| 成人网中文字幕| 久久99精品国产自在现线| 日本一区视频在线观看免费| 999国产精品视频| 97超碰国产精品| 久久久久久久高潮| 中文字幕第三区| 99麻豆久久久国产精品免费| 九九九视频在线观看| 亚洲蜜臀av乱码久久精品| 国产视频91在线| 欧美二区在线观看| 日韩专区第一页| 中文字幕亚洲综合久久筱田步美| 影音先锋中文在线视频| 日本高清视频一区| 亚洲成人影音| 日韩片电影在线免费观看| 欧美日韩岛国| 啊啊啊国产视频| 成人国产电影网| 青青青视频在线播放| 亚欧色一区w666天堂| 亚洲一级视频在线观看| 亚洲精品不卡在线| 4438x成人网全国最大| 欧洲精品在线视频| 亚洲精品一区国产| 亚洲欧美日韩精品久久久 | 青青草综合视频| 老牛国产精品一区的观看方式| 少妇愉情理伦片bd| 中文字幕第一区二区| 毛片视频网站在线观看| 日韩你懂的电影在线观看| 爱爱爱免费视频在线观看| 亚洲3p在线观看| 日韩精品中文字幕吗一区二区| 日本精品一区二区| 最新亚洲视频| 日本成人在线免费观看| 国产精品欧美久久久久无广告| 久久久久久久久久影院| 日韩精品一区二区三区在线| 午夜老司机在线观看| 人人爽久久涩噜噜噜网站| 成人中文字幕视频| 大胆欧美熟妇xx| 极品少妇一区二区| 成人18视频免费69| 欧美视频在线播放| 嫩草在线播放| 欧美一级电影免费在线观看| 亚洲网一区二区三区| 一本二本三本亚洲码 | 亚洲一区二区三区三州| 综合电影一区二区三区| 亚洲无码精品国产| 中文字幕精品网| jvid一区二区三区| 日韩一区免费观看| 视频一区在线视频| 性猛交ⅹxxx富婆video| 91福利精品视频| 久蕉在线视频| 国产精品高潮粉嫩av| 成人一区不卡| 三级av免费观看| 亚洲欧洲日产国码二区| 国产精品自产拍| 欧美成人午夜激情在线| 蜜桃在线一区| 久久综合亚洲精品| 成人性生交大片免费看视频在线| 久久亚洲AV无码| 日韩国产一区三区| 成人软件在线观看| 亚洲丰满在线| 久久爱另类一区二区小说| 99自拍视频在线| 91精品国产品国语在线不卡| 国产超级va在线视频| 99re在线视频观看| 日韩视频一区| 青青草福利视频| 欧美日韩极品在线观看一区| 国产原创在线观看| 国产伦精品一区二区三区照片91| 91久久黄色| 欧洲美一区二区三区亚洲 | 精品国产av 无码一区二区三区| 久久艳片www.17c.com| av日韩精品| 不卡影院一区二区| 最新日韩av在线| 蜜桃av噜噜一区二区三区麻豆| 性欧美xxxx视频在线观看| 久久91成人| www.色.com| 午夜电影久久久| av资源网站在线观看| 亚洲自拍另类欧美丝袜| 日韩视频免费| 特黄一区二区三区| 亚洲国产高清高潮精品美女| 国产一区一一区高清不卡| 400部精品国偷自产在线观看| 丁香婷婷综合激情五月色| 亚洲精品成人在线视频| 久久五月情影视| 妖精一区二区三区精品视频| 老司机久久精品| 精品国产电影一区| 免费av网站在线观看|