国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

集算器協(xié)助java處理結(jié)構(gòu)化文本之對(duì)齊連接

2019-11-14 14:52:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  數(shù)據(jù)庫(kù)有關(guān)聯(lián)語(yǔ)句,可以方便地進(jìn)行對(duì)齊連接運(yùn)算,但有時(shí)數(shù)據(jù)是存儲(chǔ)在文本文件中的,用java直接計(jì)算需要寫大量循環(huán)語(yǔ)句才能實(shí)現(xiàn),代碼繁瑣且運(yùn)行低效。使用集算器來(lái)輔助Java編程,可以方便高效地解決此類問題。下面我們通過例子來(lái)看一下具體作法。

  文本文件emp.txt存儲(chǔ)著員工信息,EId等于1的員工不在該文件中。文本文件sOrder.txt存儲(chǔ)著訂單信息,其SellerId字段和emp中的EId字段相對(duì)應(yīng),SellerId等于2的訂單不在該表中。部分源數(shù)據(jù)如下:

  emp.txt

sOrder.txt

現(xiàn)在需要將emp的Name、Dept、Gender這三個(gè)字段對(duì)齊到sOrder中,計(jì)算結(jié)果輸出到新文件中。期望的計(jì)算結(jié)果如下:

集算器代碼:

A1格和A2格分別從文本文件中讀取數(shù)據(jù),并存入兩個(gè)變量emp和sOrder。這里使用了函數(shù)import,其默認(rèn)的列分割符是tab,函數(shù)選項(xiàng)@t表示將第一行讀為字段名。由于例子中只需要emp.txt中的部分字段,因此A1需要以字段名做參數(shù)。計(jì)算完成后,emp和sOrder的值如下圖:

A3:=join@1(sOrder:s,SellerId;emp:e,EId)。函數(shù)join執(zhí)行連接運(yùn)算,并將兩個(gè)表改名為s和e。其中函數(shù)選項(xiàng)@1表示左連接,即例子中的要求:將emp對(duì)齊到sOrder中。計(jì)算后結(jié)果如下:

點(diǎn)擊藍(lán)色鏈接可以看到具體的記錄,如下:

右連接只是交換對(duì)齊的位置,同樣可以用集算器來(lái)實(shí)現(xiàn)。比如將sOrder按照emp對(duì)齊,只需要在代碼中交換兩者的順序,即=join@1(emp:e,EId;sOrder:s,SellerId),計(jì)算結(jié)果如下:

全連接也很容易實(shí)現(xiàn),只需要使用函數(shù)選項(xiàng)@f,代碼是:join@f(sOrder:s,SellerId;emp:e,EId),計(jì)算結(jié)果如下:

連接運(yùn)算共有四種,除了上面提到的左連接、右連接、全連接,還有內(nèi)連接。函數(shù)join默認(rèn)執(zhí)行內(nèi)連接,代碼是=join(sOrder:s,SellerId;emp:e,EId),計(jì)算結(jié)果如下:

回到例子中,A4:=A3.new(s.OrderID, s.Client, s.SellerId, s.Amount, s.OrderDate, e.Name, e.Dept, e.Gender)。這句代碼從連接的表中取得需要的字段,組成新的結(jié)構(gòu)化二維表格,計(jì)算結(jié)果如下:

對(duì)齊的工作已經(jīng)完成,下面將數(shù)據(jù)輸出到新的文件,代碼為:=file(“E: //result.txt”).export@t(A4)。

函數(shù)export默認(rèn)使用tab作為列分割符,函數(shù)選項(xiàng)@t表示將字段名輸出在第一行。打開result.txt,可以看到內(nèi)容如下:

上述腳本已經(jīng)完成了所有的對(duì)其輸出工作,接下來(lái)只需在JAVA代碼中調(diào)用即可。

    //建立esPRoc jdbc連接
     Class.forName(“com.esproc.jdbc.InternalDriver”);
     con= DriverManager.getConnection(“jdbc:esproc:local://”);
     //調(diào)用esProc,其中test是腳本文件名
     st =(com.esproc.jdbc.InternalCStatement)con.prepareCall(“call test()”);
     //執(zhí)行esProc存儲(chǔ)過程
     st.execute();

只要執(zhí)行上述JAVA代碼,emp就會(huì)對(duì)齊到sOrder中,并將計(jì)算結(jié)果輸出到result.txt文件。

下面將例子稍作改動(dòng):按動(dòng)態(tài)的時(shí)間段查詢sOrder中的數(shù)據(jù),并執(zhí)行同樣的對(duì)齊操作,最后直接將結(jié)果返回JAVA。為了實(shí)現(xiàn)這個(gè)例子,集算器需要定義兩個(gè)參數(shù),分別是begin和end,代表起止時(shí)間。集算器代碼如下:

紅色部分為改動(dòng)的代碼。

  A2:通過函數(shù)select對(duì)sOrder進(jìn)一步過濾,過濾條件為JAVA傳來(lái)的起止時(shí)間,即@begin和@end。

  A5:將A4中的計(jì)算結(jié)果輸出到JDBC接口。

  JAVA代碼也需要進(jìn)行相應(yīng)的改動(dòng),以便傳入?yún)?shù),并獲取計(jì)算結(jié)果。代碼如下:

    Class.forName(“com.esproc.jdbc.InternalDriver”);
     con= DriverManager.getConnection(“jdbc:esproc:local://”);
     st =(com.esproc.jdbc.InternalCStatement)con.prepareCall(“call test(?,?)”);
    st.setObject(1,startTime);
     st.setObject(2,endTime);
    st.execute();
    ResultSet set = st.getResultSet();


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贵德县| 阿城市| 峨眉山市| 汝州市| 东丰县| 双牌县| 固安县| 吉首市| 确山县| 海城市| 北安市| 宝清县| 定兴县| 怀安县| 体育| 玛沁县| 安乡县| 长沙市| 龙口市| 玉门市| 隆回县| 阳曲县| 衡南县| 克拉玛依市| 浦北县| 澎湖县| 邹平县| 盐边县| 博乐市| 永春县| 海口市| 麻城市| 四会市| 高淳县| 锦州市| 兴海县| 汶上县| 来凤县| 万宁市| 察隅县| 江城|