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

首頁 > 學院 > 開發設計 > 正文

集算器用作Java計算類庫的應用結構

2019-11-14 14:55:57
字體:
來源:轉載
供稿:網友

集算器封裝了豐富的結構化文件計算函數,可讀入格式復雜的文本,進行結構化文件計算,實現大文件游標計算,簡化多線程并行計算。java應用程序可以將集算器腳本文件當做數據庫存儲過程執行,傳入參數并用JDBC獲得返回結果。

集算器與Java應用程序的集成結構如下:

下面舉例說明Java集成集算器的一般方法。

文件sOrder.txt是tab分隔的文本文件,存儲著一批訂單信息。要求用JAVA對該文件進行條件查詢,返回指定時間段內的訂單。

sOrder.txt部分數據如下:

步驟一:在集算器IDE中完成算法

A1:讀入文件。默認分隔符是tab,@t表示將第一行讀為列頭。

A2:執行條件查詢。startDate和endDate是來自JAVA的參數,比如2010-01-01至2010-12-31。

步驟二:在集算器IDE中查看計算結果

點擊A2可驗證計算結果:

步驟三:在JAVA中集成集算器腳本
JAVA主程序可以JDBC的方式調用集算器腳本,代碼如下:

       Class.forName(“com.esPRoc.jdbc.InternalDriver”);

       con= DriverManager.getConnection(“jdbc:esproc:local://”);

       //調用集算器腳本(類似存儲過程),其中orderQuery是dfx的文件名

       st =(com. esproc.jdbc.InternalCStatement)con.prepareCall(“call orderQuery (?,?)”);

       st.setObject(1,”2010-01-01″);

       st.setObject(2,”2010-12-31″);

       //執行腳本

       st.execute();

       //獲取結果集

       ResultSet rs = st.getResultSet();

       ……

集算器默認返回最后一個單元格,也可用return語句返回指定單元格。返回值是符合JDBC標準的ResultSet對象,調用集算器腳本和訪問數據庫的方法完全一樣,熟悉JDBC的程序員可以很快掌握。

上面的例子說明了JAVA集成集算器的一般方法,下面說明幾種特殊情況。

簡單腳本無文件

集算器腳本比較簡單時,可以將腳本直接寫在JAVA中,而不必專門存儲一個腳本文件。比如前面的例子可以寫作:

       st = (com. esproc.jdbc.InternalCStatement)con.createStatement();

       ResultSet rs1 = st.executeQuery(“=file(/”D://sOrder.txt/”).import@t()/n” + “=A1.select(OrderDate>=date(/”2010-01-01/”) && OrderDate<=date(/”2010-12-31/”))”);

可以看到,行和行之間只需用回車“/n“來分隔(列之間用/t分隔)。

也可以使用prepareStatement對象執行腳本,以便進行參數類型強制轉換。prepareStatement里的參數占位符在SQL中是問號,但問號是集算器的保留符號,因此要用”arg1,arg2,arg3”的形式依次占位,代碼如下:

       st= (com. esproc.jdbc.InternalCStatement)con.prepareStatement(“=file(/”D://sOrder.txt/”).import@t()/n” + “=A1.select(OrderDate>=arg1 && OrderDate<=arg2)”);

       java.util.Date  dateBegin  =  new SimpleDateFormat(“yyyy-MM-dd”).parse(“2010-01-01″);    

       java.sql.Date  sqlDateBegin  =  new java.sql.Date(dateBegin.getTime());

       java.util.Date  dateEnd  =  new SimpleDateFormat(“yyyy-MM-dd”).parse(“2010-12-31″);    

       java.sql.Date  sqlDateEnd  =  new java.sql.Date(dateEnd  .getTime());

       st.setDate(1, sqlDateBegin); 

       st.setDate(2, sqlDateEnd ); 

ResultSet rs1 = st.executeQuery(); 

大返回值

有時候計算結果會超出內存,這時就要用集算器游標函數返回結果,相應的JAVA要使用JDBC流來訪問。比如:按時間段查詢大文件sOrderBig.txt,集算器代碼如下:

函數cursor以游標方式打開大文件,函數select的查詢結果也是游標。

JAVA集成集算器的代碼如下:

       st =(com. esproc.jdbc.InternalCStatement)con.prepareCall(“call orderBigQuery (?,?)”);

       st.setObject(1,”2010-01-01″);

       st.setObject(2,”2010-12-31″);

       st.setFetchSize(1000);//設置每批次讀取的記錄數。

       st.execute();

       ResultSet rs = st.getResultSet();

       while (rs.next()) {

       ……

       }

涉及數據庫
如果計算時涉及數據庫,可在集算器中完成計算,并用集算器JDBC統一返回,而不必在JAVA中單獨集成數據庫。比如下面的代碼可將數據庫表emp對齊到sOrder.txt中。

關于在集算器中訪問數據庫請參考集算器輔助SQL編寫的應用結構,JAVA集成集算器請參考集算器集成應用之被JAVA調用

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武冈市| 且末县| 任丘市| 永兴县| 正安县| 华安县| 苏尼特右旗| 凤山县| 梁河县| 靖宇县| 咸宁市| 桦甸市| 甘泉县| 伊金霍洛旗| 淮滨县| 霞浦县| 屏山县| 中卫市| 古田县| 邢台市| 枣阳市| 通城县| 莱西市| 灵宝市| 醴陵市| 辰溪县| 莒南县| 黄浦区| 朝阳市| 广水市| 宽城| 仲巴县| 临湘市| 墨玉县| 营口市| 连州市| 荔波县| 紫阳县| 平度市| 绥棱县| 英吉沙县|