日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

调用DM FLDR JNI导出数据库文件

發(fā)布時(shí)間:2024/4/19 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 调用DM FLDR JNI导出数据库文件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有任何問(wèn)題請(qǐng)到技術(shù)社區(qū)反饋。

24小時(shí)免費(fèi)服務(wù)熱線(xiàn):400 991 6599

達(dá)夢(mèng)技術(shù)社區(qū):https://eco.dameng.com

1. 介紹

java通過(guò) jni 接口調(diào)用dmfldr快速裝載接口導(dǎo)數(shù)據(jù)。

開(kāi)發(fā)環(huán)境:CentOS7+DM8(Linux)

2. 準(zhǔn)備工作

2.1 java項(xiàng)目引入jar

引入jar com.dameng.floader.jar、 DmJdbcDriver18.jar

我采用的方法是將jar包放到lib目錄下.pom文件配置引入路徑

<dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver18</artifactId><version>18</version><scope>system</scope><systemPath>${project.basedir}/lib/DmJdbcDriver18.jar</systemPath></dependency><dependency><groupId>com.dm</groupId><artifactId>Floader</artifactId><version>1.0</version><scope>system</scope><systemPath>${project.basedir}/lib/com.dameng.floader.jar</systemPath></dependency>

2.2 java項(xiàng)目中引入dll

程序在編譯的過(guò)程中需要調(diào)用DM的一些lib動(dòng)態(tài)鏈接庫(kù)文件(運(yùn)行java項(xiàng)目時(shí)需要這些dll)

我采用的方式是在啟動(dòng)類(lèi)的VM options參數(shù) 配置DLL的路徑

DM調(diào)用的dll在達(dá)夢(mèng)安裝目錄的三個(gè)目錄里面都需要引入

// 我的dm安裝目錄是 D:\damba\dm8 ,需要自行修改稱(chēng)自己的目錄 -Djava.library.path=D:\damba\dm8\drivers;D:\damba\dm8\drivers\logmnr;D:\damba\dm8\bin -Dfile.encoding=UTF-8

2.3 創(chuàng)建表

-- 創(chuàng)建表 CREATE TABLE "SYSDBA"."TEST" ( "C1" INT, "C2" INT, "C3" DATE) STORAGE(ON "MAIN", CLUSTERBTR) ; -- 插入數(shù)據(jù) INSERT INTO test VALUES(1, 1 , '2021-09-15'); INSERT INTO test VALUES(2, 2 , '2021-09-16'); INSERT INTO test VALUES(3, 3 , '2021-09-17'); INSERT INTO test VALUES(4, null , '2021-09-18');

3. 代碼實(shí)戰(zhàn)

3.1 導(dǎo)出所有數(shù)據(jù)

需求:導(dǎo)出表的所有數(shù)據(jù)

3.1.1 linux

  • 新建 import_start.ctl 文件(新建目錄: /dm8/ctl/insert_test)
LOAD DATA INFILE '/dm8/ctl/insert_test/test.txt' INTO TABLE test FIELDS '|'
  • 在dm8的安裝目錄bin目錄下運(yùn)行dmfldr腳本
./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_test/import_start.ctl\' mode=\'out\'
  • 執(zhí)行成功后會(huì)生成test.txt文件

3.1.2 java

package com.dm.demo.jni; import com.dameng.floader.Instance; import com.dameng.floader.Properties;import java.io.UnsupportedEncodingException;/*** @author xgt(小光頭)* @version 1.0* @date 2021-9-18 11:02*/ public class Import_start {public static void main(String[] args){//System.out.println(System.getProperty("java.library.path"));Instance instance = new Instance();try{//初始化if (instance.allocInstance()){instance.setAttribute(Properties.FLDR_ATTR_SERVER, "192.168.60.137");instance.setAttribute(Properties.FLDR_ATTR_PORT, "5236");instance.setAttribute(Properties.FLDR_ATTR_UID, "SYSDBA");instance.setAttribute(Properties.FLDR_ATTR_PWD, "SYSDBA");instance.initializeInstance(null, null, null, "\"SYSDBA\".\"TEST\"");String attribute = instance.getAttribute(Properties.FLDR_ATTR_DATA_CHAR_SET);String ctl = "OPTIONS\r\n" +"(\r\n" +"mode='out'\r\n" +")\r\n" +"Load\r\n" +"infile 'e:\\fldr_out.txt'\r\n" +"Append\r\n" +"into table \"SYSDBA\".\"TEST\"\r\n" +"FIELDS '|'";//導(dǎo)出的ctrl內(nèi)容instance.setControl(ctl);}else {try {byte[] bytes = instance.getErrorMsg().getBytes("utf-8");System.out.println(new String(bytes, "utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}catch (Exception e){System.out.println(e);}finally{//釋放instance.unitialize();instance.free();}} }

3.2 導(dǎo)出指定列的數(shù)據(jù)

需求:導(dǎo)出表的某一些指定列并將顯示

3.2.1 linux

  • 新建 import_targe_data.ctl 文件(新建目錄: /dm8/ctl/insert_test)
OPTIONS ( SQL ='select C1 from SYSDBA.TEST' ) LOAD DATA INFILE '/dm8/ctl/insert_test/test.txt' INTO TABLE test FIELDS '|' ( C1 TERMINATED BY ' ' )
  • 在dm8的安裝目錄bin目錄下運(yùn)行dmfldr腳本
./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_test/import_targe_data.ctl\' mode=\'out\'

3.2.2 java

package com.dm.demo.jni; import com.dameng.floader.Instance; import com.dameng.floader.Properties;import java.io.UnsupportedEncodingException;/*** @author 高垣* @version 1.0* @date 2021-9-18 11:02*/ public class Import_targe_data {public static void main(String[] args){//System.out.println(System.getProperty("java.library.path"));Instance instance = new Instance();try{//初始化if (instance.allocInstance()){instance.setAttribute(Properties.FLDR_ATTR_SERVER, "192.168.60.137");instance.setAttribute(Properties.FLDR_ATTR_PORT, "5236");instance.setAttribute(Properties.FLDR_ATTR_UID, "SYSDBA");instance.setAttribute(Properties.FLDR_ATTR_PWD, "SYSDBA");instance.initializeInstance(null, null, null, "\"SYSDBA\".\"TEST\"");String attribute = instance.getAttribute(Properties.FLDR_ATTR_DATA_CHAR_SET);String ctl = "OPTIONS\r\n" +"(\r\n" +"mode='out'\r\n" +"SQL='select C1 from SYSDBA.TEST'\r\n" +")\r\n" +"Load\r\n" +"infile 'e:\\fldr_out.txt'\r\n" +"Append\r\n" +"into table \"SYSDBA\".\"TEST\"\r\n" +"FIELDS '|'\n" +" (\n" +" C1 TERMINATED BY ' '\n" +" )";//導(dǎo)出的ctrl內(nèi)容instance.setControl(ctl);}else {try {byte[] bytes = instance.getErrorMsg().getBytes("utf-8");System.out.println(new String(bytes, "utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}catch (Exception e){System.out.println(e);}finally{//釋放instance.unitialize();instance.free();}} }

3.3 導(dǎo)出指定列并修改NULL值

需求:導(dǎo)出指定表的列并將顯示NULL的字段修改為其他值

溫馨提示:因?yàn)樵贑TL文件中編寫(xiě)語(yǔ)句,存在雙引號(hào)沖突的問(wèn)題,使用函數(shù)時(shí)采用雙單引號(hào)形式

3.3.1 linux

  • 新建 import_targe_func_data.ctl 文件(新建目錄: /dm8/ctl/insert_test)
OPTIONS ( SQL ='select c1,IFNULL(c2,''1'') c2 from test' ) LOAD DATA INFILE '/dm8/ctl/insert_test/test.txt' INTO TABLE test FIELDS '|' ( C1 TERMINATED BY ' ', C2 TERMINATED BY ' ' )
  • 在dm8的安裝目錄bin目錄下運(yùn)行dmfldr腳本
./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_test/import_targe_func_data.ctl\' mode=\'out\' ./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_func/test1/test.ctl\' mode=\'out\' select C1,replace(V1,chr(47),''\'') V1 from test1'

3.3.2 java

package com.dm.demo.jni; import com.dameng.floader.Instance; import com.dameng.floader.Properties;import java.io.UnsupportedEncodingException;/*** @author 高垣* @version 1.0* @date 2021-9-18 11:02*/ public class TestFloderImport2 {public static void main(String[] args){Instance instance = new Instance();try{//初始化if (instance.allocInstance()){instance.setAttribute(Properties.FLDR_ATTR_SERVER, "192.168.60.137");instance.setAttribute(Properties.FLDR_ATTR_PORT, "5236");instance.setAttribute(Properties.FLDR_ATTR_UID, "SYSDBA");instance.setAttribute(Properties.FLDR_ATTR_PWD, "SYSDBA");instance.initializeInstance(null, null, null, "\"SYSDBA\".\"TEST\"");String attribute = instance.getAttribute(Properties.FLDR_ATTR_DATA_CHAR_SET);String ctl = "OPTIONS\r\n" +"(\r\n" +"mode='out'\r\n" +"SQL='select c1,IFNULL(c2,''1'') c2 from SYSDBA.TEST'\r\n" +")\r\n" +"Load\r\n" +"infile 'e:\\fldr_out.txt'\r\n" +"Append\r\n" +"into table \"SYSDBA\".\"TEST\"\r\n" +"FIELDS '|'\n" +" (\n" +" C1 TERMINATED BY ' ',\n" +" C2 TERMINATED BY ' '\n" +" )";//導(dǎo)出的ctrl內(nèi)容instance.setControl(ctl);}else {try {byte[] bytes = instance.getErrorMsg().getBytes("utf-8");System.out.println(new String(bytes, "utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}catch (Exception e){System.out.println(e);}finally{//釋放instance.unitialize();instance.free();}} }

===================================

下面的測(cè)試是另外一張表測(cè)試附表結(jié)構(gòu)

CREATE TABLE "SYSDBA"."TEST1" ( "C1" INT, "V1" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;insert into "SYSDBA"."TEST1"("C1", "V1") VALUES(1, '11/a'); insert into "SYSDBA"."TEST1"("C1", "V1") VALUES(2, '22/2/2'); insert into "SYSDBA"."TEST1"("C1", "V1") VALUES(3, '33/3//');

3.4 導(dǎo)出數(shù)據(jù)并使用嵌套函數(shù)

OPTIONS ( SQL ='select C1,replace(V1,chr(47),''\'') V1 from test1' ) LOAD DATA INFILE '/dm8/ctl/insert_func/test1/test.txt' INTO TABLE test1 FIELDS '|' ( C1 TERMINATED BY ' ', V1 TERMINATED BY ' ' ) [dmdba@localhost bin]$ ./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_func/test1/test1.ctl\' mode=\'out\'

3.5 導(dǎo)出數(shù)據(jù)并函數(shù)嵌套使用char函數(shù)

OPTIONS ( SQL ='select C1,replace(replace(V1,chr(47),chr(41)),chr(41),chr(39)) V1 from test1' ) LOAD DATA INFILE '/dm8/ctl/insert_func/test1/test.txt' INTO TABLE test1 FIELDS '|' ( C1 TERMINATED BY ' ', V1 TERMINATED BY ' ' ) [dmdba@localhost bin]$ ./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_func/test1/test2.ctl\' mode=\'out\'

3.6 導(dǎo)出數(shù)據(jù)并函數(shù)嵌套+拼接

OPTIONS ( SQL ='select C1,replace(replace(V1,chr(47),chr(41)),chr(41),chr(39)|| chr(42)) V1 from test1' ) LOAD DATA INFILE '/dm8/ctl/insert_func/test1/test.txt' INTO TABLE test1 FIELDS '|' ( C1 TERMINATED BY ' ', V1 TERMINATED BY ' ' ) [dmdba@localhost bin]$ ./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_func/test1/test3.ctl\' mode=\'out\'

3.7 導(dǎo)出數(shù)據(jù)并函數(shù)嵌套+替換+拼接

OPTIONS ( SQL ='select C1,replace(replace(V1,''/'',chr(41)),chr(41),chr(39)|| chr(42)) V1 from test1' ) LOAD DATA INFILE '/dm8/ctl/insert_func/test1/test.txt' INTO TABLE test1 FIELDS '|' ( C1 TERMINATED BY ' ', V1 TERMINATED BY ' ' ) [dmdba@localhost bin]$ ./dmfldr userid=SYSDBA/SYSDBA@192.168.60.137:5236 control=\'/dm8/ctl/insert_func/test1/test4.ctl\' mode=\'out\'

4. 常見(jiàn)問(wèn)題

4.1 指定的列與服務(wù)器列不一致


編寫(xiě)的ctl文件中 SQL屬性的語(yǔ)句執(zhí)行后的值與FIELDS屬性配置的值不一樣導(dǎo)致,修改一下就好

4.2 java.lang.UnsatisfiedLinkError

報(bào)錯(cuò):Exception in thread “main” java.lang.UnsatisfiedLinkError: no dmutl in java.library.path

意思是說(shuō):運(yùn)行項(xiàng)目需要去java.library.path中加載dmutldll然后沒(méi)找到。我的解決方案是在啟動(dòng)類(lèi)上配置參數(shù)去配置這個(gè)DLL所在的文件路徑

我采用的方式是在啟動(dòng)類(lèi)的VM options參數(shù) 配置DLL的路徑

DM調(diào)用的dll在達(dá)夢(mèng)安裝目錄的三個(gè)目錄里面都需要引入

// 我的dm安裝目錄是 D:\damba\dm8 ,需要自行修改稱(chēng)自己的目錄 -Djava.library.path=D:\damba\dm8\drivers;D:\damba\dm8\drivers\logmnr;D:\damba\dm8\bin -Dfile.encoding=UTF-8

4.3 項(xiàng)目的資料

鏈接:https://pan.baidu.com/s/1Gtsbsq_EM25pzWYuBWpVzg 提取碼:4hrp

總結(jié)

以上是生活随笔為你收集整理的调用DM FLDR JNI导出数据库文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。