集算器訪問數(shù)據(jù)庫的配置
集算器支持包括數(shù)據(jù)庫在內(nèi)的多種異構(gòu)數(shù)據(jù)源。這里,我們通過例子來看一下集算器訪問數(shù)據(jù)庫的方法。
集算器可以連接數(shù)據(jù)庫的jdbc驅(qū)動,也可以通過jdbc-odbc橋連接數(shù)據(jù)庫。由于版權(quán)的原因,使用集算器的程序員需要自行準(zhǔn)備數(shù)據(jù)庫的jdbc或者odbc驅(qū)動。Jdbc驅(qū)動jar包準(zhǔn)備好之后,需要放入集算器IDE安裝目錄的/common/jdbc中,例如:C:\Program Files (x86)\MicroInsight\common\jdbc目錄中。
集算器集成開發(fā)環(huán)境的ODBC配置界面如下:
集算器的集成開發(fā)環(huán)境提供了多種數(shù)據(jù)庫的jdbc配置提示,包括:SQLserver、Oracle、DB2、Sybase、Access、mysql、hsql、teradata、postgres等。如果需要連接的數(shù)據(jù)庫不在這個范圍內(nèi),可以使用other類型來添加。配置界面如下:
驅(qū)動jar包放好,配置完成之后,在IDE中就可以很方便的連接數(shù)據(jù)庫,取出表中的數(shù)據(jù):
上圖中A1單元格連接上了一個名為demo的hsql數(shù)據(jù)庫,A2單元使用sql語句查詢了employee表,作為集算器的序表存入了A2單元格這個變量中,arg1是外部傳入的參數(shù)。A3單元格關(guān)閉了數(shù)據(jù)庫連接,A4單元格對外返回查詢結(jié)果。集算器的集成開發(fā)環(huán)境右下角紅框中可以顯示demo數(shù)據(jù)庫的表名、字段名,可以方便程序員書寫sql語句。
和集算器提供的其他函數(shù)一樣,query函數(shù)包含選項(xiàng)和參數(shù)。如果寫成query@1(“select * from employee”),@1是表示使用了1選項(xiàng),查看函數(shù)說明可知,是僅僅返回sql語句取出的第一條記錄。而括號中是參數(shù),上圖的括號中是一條sql語句的字符串,沒有其他參數(shù),也就是說其他所有的參數(shù)都使用了默認(rèn)值。
上圖中的集算器網(wǎng)格程序可以集成到Java應(yīng)用中,作為集算器jdbc驅(qū)動被Java程序調(diào)用,具體方法是:
1、 準(zhǔn)備dfx文件。
將集算器程序保存成test.dfx。
2、 部署集算器jar包。
將調(diào)用集算器程序所必須的jar包放入Java應(yīng)用的classpath中。如果是web應(yīng)用,可以放在WEB-INF/lib目錄下。這些jar包都位于集算器IDE的安裝目錄\esProc\lib下,包括:
dm.jar 集算器計算引擎及JDBC驅(qū)動包
poi-3.7-20101029.jar 處理對Excel文件的讀寫
log4j_128.jar 處理日志
icu4j_3_4_5.jar 處理國際化
dom4j-1.6.1.jar 解析配置文件
3、 部署數(shù)據(jù)庫驅(qū)動jar包。
將集算器連接數(shù)據(jù)庫所需要的數(shù)據(jù)庫jdbc驅(qū)動包也放入Java應(yīng)用的classpath中。例如:demo數(shù)據(jù)庫的hsql.jar。
4、 配置dfxConfig.xml、config.xml文件。
config.xml文件中包含了集算器的基本配置信息,如注冊碼、尋址路徑、主目錄、數(shù)據(jù)源配置等,可以在集算器安裝目錄的esProc\config路徑下找到,其中存儲的信息與集算器的選項(xiàng)頁面中設(shè)定相同。dfxConfig.xml可以在安裝目錄esProc\classes中找到。這里介紹集算器連接數(shù)據(jù)庫的部分配置,其他配置參見集算器教程。
1)配置數(shù)據(jù)源的方式之一:直接配置數(shù)據(jù)庫數(shù)據(jù)源連接參數(shù)。
config.xml文件:
<DBList> <!-- 數(shù)據(jù)源名稱,必須與dfx文件中的數(shù)據(jù)源名稱一致 --> <DBname="demo"> <propertyname="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo"/> <propertyname="driver" value="org.hsqldb.jdbcDriver"/> <propertyname="type" value="HSQL"/> <propertyname="user" value="sa"/> <propertyname="password" value=""/> <propertyname="batchSize" value="1000"/> <!-- 是否自動連接。如果設(shè)定為true,則可以直接使用db.query()函數(shù)來訪問數(shù)據(jù)庫;如果為false,則不會自動連接,使用前必須用connect(db)語句連接。 --> <propertyname="autoConnect" value="true"/> <property name="useSchema"value="false"/> <propertyname="addTilde" value="false"/> </DB> </DBList> |
2)配置數(shù)據(jù)源的方式之二:在Java應(yīng)用中配置連接池和jndi,在dfxConfig.xml文件中指定jndi名稱。
dfxConfig.xml文件:
<jndi-ds-configs> <!-- jndi前綴 --> <jndi-prefix>java:comp/env</jndi-prefix> <!-- 數(shù)據(jù)源名稱,必須與dfx文件中的數(shù)據(jù)源名稱一致 --> <jndi-ds-config> <name>demo</name> <dbType>HSQL</dbType> <dbCharset>ISO-8859-1</dbCharset> <clientCharset>ISO-8859-1</clientCharset> <needTranContent>false</needTranContent> <needTranSentence>false</needTranSentence> <!-- 是否自動連接。如果設(shè)定為true,則可以直接使用db.query()函數(shù)來訪問數(shù)據(jù)庫;如果為false,則不會自動連接,使用前必須用connect(db)語句連接。 --> <autoConnect>true</autoConnect> </jndi-ds-config> </jndi-ds-configs> |
需要說明的是:
配置文件的名稱必須為config.xml和dfxConfig.xml,不能改變。
在配置數(shù)據(jù)庫連接信息時,要注意不能循環(huán)調(diào)用,不能將集算器JDBC本身作為數(shù)據(jù)源在配置中使用。
如果兩種方式都配置了同名的數(shù)據(jù)源,就以config.xml中的為準(zhǔn)。
5、 部署dfxConfig.xml、config.xml和test.dfx文件。
將dfxConfig.xml、config.xml放入Java應(yīng)用的類路徑下(classpath),也可以直接打包到dm.jar中。
將test.dfx文件放到Java應(yīng)用的類路徑下,也可以放到dfxConfig.xml文件的<paths/>節(jié)點(diǎn)指定的絕對路徑中。
6、 在java程序中調(diào)用test.dfx。
如果集算器 JDBC的連接串中使用了...?config=...;即用該.xml文件中的配置,忽略config.xml中的定義;連接串中無config參數(shù)時則用默認(rèn)配置。
例如:con=DriverManager.getConnection("jdbc:esproc:local://?config=myconfig.xml");則使用myconfig.xml中的定義。
樣例代碼如下:
public voidtestDataServer(){ Connection con = null; com.esproc.jdbc.InternalCStatementst; com.esproc.jdbc.InternalCStatement st2; try{ //建立連接 Class.forName("com.esproc.jdbc.InternalDriver"); con=DriverManager.getConnection("jdbc:esproc:local://"); //調(diào)用存儲過程,其中test是dfx的文件名 st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("calltest(?)"); //設(shè)置參數(shù) st.setObject(1,"3"); //下面的語句和上面的調(diào)用方法效果相同 st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("calltest(3)"); //執(zhí)行存儲過程 st.execute(); //獲取結(jié)果集 ResultSet set =st.getResultSet(); } catch(Exception e){ System.out.println(e); } finally{ //關(guān)閉連接 if(con!=null) { try { con.close(); } catch(Exception e){ System.out.println(e); } } } } |
posted on 2014-09-26 11:33 順其自然EVO 閱讀(263) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄