<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冷面閻羅

    低調做人&&高調做事
    隨筆 - 208, 文章 - 3, 評論 - 593, 引用 - 0
    數據加載中……

    多重子查詢提取每次子查詢的SQL語句

            之前用的oracle大型數據庫,寫的sql都是依據oracle的。移動端部分用的不能是oracle數據庫,只能采用小型數據庫,現場采用db2。
            db2大小只能論k為單位,很多基本的sql語法都不支持,尤其多重子查詢就不支持,做試驗報告的閥值就必須得用這個子查詢,沒有部分只好將多重子查詢提出sql,單獨執行。
            提取多重子查詢的方法倒是不復雜,就是對sql語句循環處理,判斷是否含有多個select關鍵字,如果有從字符串最后一個select處理,截取sql語句,執行,然后將查詢的結果替換原先的sql語句,直到循環判斷sql語句中只有一個select關鍵字。
             關鍵部分的代碼:
            int lastSelectNo = 0;
            
    int size = 0;
            
            
    if (sqlString.split("select").length - 1 > 0)
                size 
    = sqlString.split("select").length - 1;
            
    else if (sqlString.split("SELECT").length - 1 > 0)
                size 
    = sqlString.split("SELECT").length - 1;

            String[] sql 
    = new String[size];

            
    while (isHaveTwoSelect(sqlString))
            
    {
                lastSelectNo 
    = sqlString.lastIndexOf("select");
                
    if (lastSelectNo == 0)
                    lastSelectNo 
    = sqlString.lastIndexOf("SELECT");

                
    char beforeLast = sqlString.charAt(lastSelectNo - 1);
                
    if (beforeLast == '(')
                
    {
                    
    int k = 5;
                    String string 
    = sqlString.substring(lastSelectNo).substring(0, k);
                    
    while (!IsMatching(string))
                    
    {
                        k
    ++;
                        string 
    = sqlString.substring(lastSelectNo).substring(0, k);
                    }

                    sql[size 
    - 1= string.substring(0, k - 1);
                    sqlString 
    = replace(sqlString, sql[size - 1].toString(), "sql[" + (size - 1+ "]");
                    size
    --;
                }
    //if(befor            
            }

            sql[
    0= sqlString;

          問題是:對于select關鍵字的處理,目前只知道全是小寫select或是全是大寫SELECT,實際中select關鍵字這個不考慮大小寫限制,我這邊還尚未進行校驗,一是比較麻煩二是尚未發現好的方法,目前就是對select關鍵字依次判斷是否是s e l e c t幾個字符 ,不考慮大小寫。
         大家如果有好的處理select關鍵字方法,歡迎得道你的支持。

    posted on 2008-04-22 20:58 冷面閻羅 閱讀(2100) 評論(2)  編輯  收藏 所屬分類: java

    評論

    # re: 多重子查詢提取每次子查詢的SQL語句  回復  更多評論   

    上午又對核心算法優化一下,可以處理多個并列的SQL。具體算法如下:
    while (isHaveTwoSelect(sqlString)) 

    lastSelectNo 
    = sqlString.lastIndexOf("select"); 
    if (lastSelectNo == 0
    lastSelectNo 
    = sqlString.lastIndexOf("SELECT"); 

    int k = 5
    String string 
    = sqlString.substring(lastSelectNo).substring(0, k); 
    while (!IsMatching(string)) 

    k
    ++
    string 
    = sqlString.substring(lastSelectNo).substring(0, k); 
    }
     
    sql[size 
    - 1= string.substring(0, k - 1); 
    sqlString 
    = sqlString.substring(0, lastSelectNo) + "sql[" + (size - 1+ "]" + sqlString.substring(lastSelectNo + k - 1, sqlString.length()); 
    size
    --
    }
     
    sql[
    0= sqlString; 
    2008-04-23 12:40 | 冷面閻羅

    # re: 多重子查詢提取每次子查詢的SQL語句  回復  更多評論   

    盡量不要在循環里寫sql語句,很容易造成不良危險
    2008-04-25 14:44 | 懶人
    主站蜘蛛池模板: 免费毛片在线看不用播放器| 免费看国产精品3a黄的视频| 国产l精品国产亚洲区在线观看| 久久国产乱子伦免费精品| tom影院亚洲国产一区二区| 免费一级毛片免费播放| 丁香花在线视频观看免费| 亚洲午夜一区二区电影院| 亚洲精品岛国片在线观看| 99热免费在线观看| 在线观看亚洲电影| 久久久久久亚洲精品成人| 免费的一级片网站| 久操免费在线观看| 亚洲AV日韩AV永久无码色欲 | 中文字幕亚洲免费无线观看日本| 日韩激情无码免费毛片| 免费视频精品一区二区三区| 亚洲一区二区三区播放在线| 亚洲中文字幕无码日韩| 在线观看免费为成年视频| 日本卡1卡2卡三卡免费| 国产亚洲综合精品一区二区三区| 亚洲韩国在线一卡二卡| yy6080久久亚洲精品| 18禁网站免费无遮挡无码中文| 国产精品免费久久久久影院| 亚洲欧美日韩中文字幕一区二区三区 | 日韩人妻无码精品久久免费一| 美女一级毛片免费观看 | 中文字幕无线码免费人妻| jiz zz在亚洲| 亚洲美女自拍视频| 亚洲色爱图小说专区| heyzo亚洲精品日韩| 日韩视频免费在线| 丁香花免费完整高清观看| 日本免费一区二区三区四区五六区| 日韩在线一区二区三区免费视频| 亚洲欧美第一成人网站7777| 亚洲午夜国产精品|