报错处理
报错一
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libeay32 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:871)
at java.lang.System.loadLibrary(System.java:1122)
at com.dameng.JNIUtil.loadLibrary(JNIUtil.java:200)
at com.dameng.JNIUtil.loadSSLLibrary(JNIUtil.java:182)
at com.dameng.impExp.ImpExpDLL.
at com.owndm.function.Dexpimp.main(Dexpimp.java:33)
复制
解决:
缺少所需的lib文件。在 JNIUtil 类中,已经定义了根据系统变量自动获取当前环境变量路径并扫描下面的dll/.so文件。所以,当前报错原因为 DM 库未添加到windows环境变量中。在系统变量path中添加 D:\dmdbms\bin 并重启 IDEA 生效。
可以使用下面代码查看当前环境变量
System.out.println(System.getProperty("java.library.path"));
System.out.println(System.getProperty("dm.library.path"));
复制
实现代码
导入导出级别由expMode/impMode指定:
• 1 tables
• 2 schemas
• 3 full
表级导出
public static void dexpTables(){
String userid = "SYSDBA/SYSDBA@192.168.0.111:5238";
String schemas = "SYSDBA";
String tableName = "t1";
String expFilePath = "D:\dmdbms\jexp_SYSDBA_t1.dmp";
String logFilePath = "D:\dmdbms\jexp_SYSDBA_t1.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_exp_dm(1,var1,var2,var3,var4,var5);
}
复制
导出文件信息:
PS D:\dmdbms\bin> .\dimp.exe userid=SYSDBA/SYSDBA show=y file=D:\dmdbms\jexp_SYSDBA_t1.dmp
dimp V8
--------------------------------导出文件列表信息--------------------------------共包含1个文件,文件如下:
D:\dmdbms\jexp_SYSDBA_t1.dmp
-------------------------------------------------------------------------------- 导出文件为 TABLES 模式导出,共包含 1 个表:
模式SYSDBA 含有 1 个表,分别为:
t1
复制
表级导入
/**
@Description 表级导入
@author zhao
@Param []
@return void
@date 2022-6-29 18:05
*/public static void dimpTables(){
String userid = "SYSDBA/SYSDBA@192.168.0.111:5238";
String schemas = "SYSDBA";
String tableName = "t1";
String expFilePath = "D:\dmdbms\jexp_SYSDBA_t1.dmp";
String logFilePath = "D:\dmdbms\jimp_SYSDBA_t1.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_imp_dm(1,var1,var2,var3,var4,var5);
}
复制
模式级导出
/**
@Description 模式级导出
@author zhao
@Param []
@return void
@date 2022-6-29 18:19
*/public static void dexpSchemas(){
String userid = "SYSDBA/SYSDBA@LOCALHOST:5238";
String schemas = "JXP";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_schemas_jxp.dmp";
String logFilePath = "D:\dmdbms\jexp_schemas_jxp.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_exp_dm(2,var1,var2,var3,var4,var5);
}
复制
导出文件信息
PS D:\dmdbms\bin> .\dimp.exe userid=SYSDBA/SYSDBA show=y file=D:\dmdbms\jexp_schemas_jxp.dmp
dimp V8
--------------------------------导出文件列表信息--------------------------------共包含1个文件,文件如下:
D:\dmdbms\jexp_schemas_jxp.dmp
-------------------------------------------------------------------------------- 导出文件为 SCHEMAS 方式导出,共包含以 下 1 个模式
模式JXP 含有 2 个表,分别为:
objects policies
复制
模式导入
/**
@Description 模式导入
@author zhao
@Param []
@return void
@date 2022-6-29 18:22
*/public static void dimpSchemas(){
String userid = "SYSDBA/SYSDBA@LOCALHOST:5238";
String schemas = "JXP";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_schemas_jxp.dmp";
String logFilePath = "D:\dmdbms\jimp_schemas_jxp.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_imp_dm(2,var1,var2,var3,var4,var5);
}
复制
全库导出
/**
@Description 库级导出
@author zhao
@Param []
@return void
@date 2022-6-29 18:33
*/public static void dexpFull(){
String userid = "SYSDBA/SYSDBA@LOCALHOST:5238";
String schemas = "";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_full.dmp";
String logFilePath = "D:\dmdbms\jexp_full.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_exp_dm(3,var1,var2,var3,var4,var5);
}
复制
导出文件信息
PS D:\dmdbms\bin> .\dimp.exe userid=SYSDBA/SYSDBA show=y file=D:\dmdbms\jexp_full.dmp
dimp V8
--------------------------------导出文件列表信息--------------------------------共包含1个文件,文件如下:
D:\dmdbms\jexp_full.dmp
-------------------------------------------------------------------------------- 导出文件为 FULL 方式导出,共包含以下 4 个模式
模式JXP 含有 2 个表,分别为:
objects policies
模式TEST 含有 3 个表,分别为:
t1 objects policies
模式TEST_1 含有 0 个表,分别为:
模式SYSDBA 含有 4 个表,分别为:
LOG_COMMIT t2 test t1
复制
全库导入
/**
@Description 库级导入
@author zhao
@Param []
@return void
@date 2022-6-29 18:33
*/public static void dimpFull(){
String userid = "SYSDBA/SYSDBA@192.168.0.112:5240";
String schemas = "";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_full.dmp";
String logFilePath = "D:\dmdbms\jimp_full11.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_imp_dm(3,var1,var2,var3,var4,var5);
}
复制
附件
附件一
导入导出完整测试类
package com.owndm.function;
import com.dameng.JNIUtil;
import com.dameng.impExp.ImpExpDLL;
import static jdk.nashorn.internal.objects.Global.print;
import static sun.misc.Version.println;
/**
@ClassName Dexpimp
@description: 达梦数据库中使用JAVA方式实现导入导出$
@author: zhao
@create: 2022-06-29 10:21
@Version 1.0
**/public class Dexpimp {
public static void main(String[] args) {
// System.out.println(System.getProperty("os.name"));
// System.out.println(System.getProperty("java.library.path"));
// System.out.println(System.getProperty("dm.library.path"));
dimpFull();
}
/**
@Description 表级导出
@author zhao
@Param []
@return void
@date 2022-6-29 17:26
*/ public static void dexpTables(){
String userid = "SYSDBA/SYSDBA@192.168.0.111:5238";
String schemas = "SYSDBA";
String tableName = "t1";
String expFilePath = "D:\dmdbms\jexp_SYSDBA_t1.dmp";
String logFilePath = "D:\dmdbms\jexp_SYSDBA_t1.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_exp_dm(1,var1,var2,var3,var4,var5);
}
/**
@Description 表级导入
@author zhao
@Param []
@return void
@date 2022-6-29 18:05
*/ public static void dimpTables(){
String userid = "SYSDBA/SYSDBA@192.168.0.111:5238";
String schemas = "SYSDBA";
String tableName = "t1";
String expFilePath = "D:\dmdbms\jexp_SYSDBA_t1.dmp";
String logFilePath = "D:\dmdbms\jimp_SYSDBA_t1.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_imp_dm(1,var1,var2,var3,var4,var5);
}
/**
@Description 模式级导出
@author zhao
@Param []
@return void
@date 2022-6-29 18:19
*/ public static void dexpSchemas(){
String userid = "SYSDBA/SYSDBA@LOCALHOST:5238";
String schemas = "JXP";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_schemas_jxp.dmp";
String logFilePath = "D:\dmdbms\jexp_schemas_jxp.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_exp_dm(2,var1,var2,var3,var4,var5);
}
/**
@Description 模式导入
@author zhao
@Param []
@return void
@date 2022-6-29 18:22
*/ public static void dimpSchemas(){
String userid = "SYSDBA/SYSDBA@LOCALHOST:5238";
String schemas = "JXP";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_schemas_jxp.dmp";
String logFilePath = "D:\dmdbms\jimp_schemas_jxp.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_imp_dm(2,var1,var2,var3,var4,var5);
}
/**
@Description 库级导出
@author zhao
@Param []
@return void
@date 2022-6-29 18:33
*/ public static void dexpFull(){
String userid = "SYSDBA/SYSDBA@LOCALHOST:5238";
String schemas = "";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_full.dmp";
String logFilePath = "D:\dmdbms\jexp_full.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_exp_dm(3,var1,var2,var3,var4,var5);
}
/**
@Description 库级导入
@author zhao
@Param []
@return void
@date 2022-6-29 18:33
*/ public static void dimpFull(){
String userid = "SYSDBA/SYSDBA@192.168.0.112:5240";
String schemas = "";
String tableName = "";
String expFilePath = "D:\dmdbms\jexp_full.dmp";
String logFilePath = "D:\dmdbms\jimp_full11.log";
byte[] var1 = userid.getBytes();
byte[] var2 = schemas.getBytes();
byte[] var3 = tableName.getBytes();
byte[] var4 = expFilePath.getBytes();
byte[] var5 = logFilePath.getBytes();
ImpExpDLL.dll_imp_dm(3,var1,var2,var3,var4,var5);
}
}
复制
附件二
ImpExpDLL 类
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.dameng.impExp;
import com.dameng.JNIUtil;
public class ImpExpDLL {
static {
JNIUtil.loadSSLLibrary();
JNIUtil.loadLibrary(JNIUtil.isWindows() ? "zlib" : "z");
JNIUtil.loadDmLibrarys("dmdpi");
JNIUtil.loadDmLibrarys("disql_dll");
JNIUtil.loadDmLibrarys(JNIUtil.isWindows() ? "dmfldr_dll" : "dmfldr");
JNIUtil.loadDmLibrarys("dmp_dll");
JNIUtil.loadDmLibrarys("dmp_disql_dll_java");
}
public ImpExpDLL() {
}
public static native int dll_exp_dm(int var0, byte[] var1, byte[] var2, byte[] var3, byte[] var4, byte[] var5);
public static native int dll_imp_dm(int var0, byte[] var1, byte[] var2, byte[] var3, byte[] var4, byte[] var5, byte[] var6);
public static int dll_imp_dm(int impMode, byte[] userid, byte[] schemaName, byte[] tableName, byte[] impFilePath, byte[] logFilePath) {
return dll_imp_dm(impMode, userid, schemaName, tableName, impFilePath, logFilePath, (byte[])null);
}
public static native int dll_exec_sql_file(byte[] var0, byte[] var1, byte[] var2);
}
复制
附件三
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.dameng;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class JNIUtil {
private static final Map<String, String> LOAD_LIB_MAP = new HashMap();
public static final String DM_LIBRARY_PATH = "dm.library.path";
public static final String JNI_AUDIT_DLL = "AuditDll";
public static final String JNI_CONNECT_DLL = "ConnectDLL";
public static final String JNI_DRMAN_DLL = "DrmanDLL";
public static final String JNI_CRYPT_DLL = "CryptDll";
public static final String JNI_DWMON_DLL = "DwMonDLL";
public static final String JNI_LICREAD_DLL = "LicReadDll";
public static final String JNI_PARA_DLL = "ParaDLL";
public static final String JNI_CSSM_DLL = "CssMonDLL";
public static final String JNI_ASM_DLL = "DmASMDLL";
public static final String JNI_INSTANCE_DLL = "Instance";
public static final String JNI_IMPEXP_DLL = "ImpExpDLL";
public static final String JNI_LOGMNR_DLL = "LogmnrDll";
public static final int OS_UNKNOW = -1;
public static final int OS_WINDOWS = 1;
public static final int OS_LINUX = 2;
public static final int OS_SOLARIS = 3;
public static final int OS_AIX = 4;
public static final int OS_HP_UX = 5;
public static final int OS_FREE_BSD = 6;
public static final int OS_MAC = 7;
public static final int CURRENT_OS = getOS();
public static final String EMPTY = "";
public JNIUtil() {
}
public static int getOS() {
String osname = getOSName();
if (osname.startsWith("Win")) {
return 1;
} else if (osname.startsWith("Linux")) {
return 2;
} else if (osname.startsWith("AIX")) {
return 4;
} else if (!osname.startsWith("Solaris") && !osname.startsWith("Sun")) {
if (osname.startsWith("HP-UX")) {
return 5;
} else if (osname.startsWith("FreeBSD")) {
return 6;
} else {
return osname.startsWith("Mac OS") ? 7 : -1;
}
} else {
return 3;
}
}
public static String getOSName(int osType) {
String value = "";
switch (osType) {
case 1:
value = "Windows";
break; case 2:
value = "Linux";
break; case 3:
value = "Solaris|Sun";
break; case 4:
value = "AIX";
break; case 5:
value = "HP-UX";
}
return value;
}
public static boolean isWindows() {
return getOS() == 1;
}
public static String getOSName() {
return System.getProperty("os.name");
}
public static String trimToEmpty(String str) {
return str == null ? "" : str.trim();
}
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
public static boolean isNotEmpty(String str) {
return str != null && str.length() > 0;
}
public static void loadSSLLibrary() {
List<String> sslLibNameList = new ArrayList();
if (getOS() == 1) {
sslLibNameList.add("libeay32");
sslLibNameList.add("ssleay32");
} else {
sslLibNameList.add("crypto");
sslLibNameList.add("ssl");
}
for(int i = 0; i < sslLibNameList.size(); ++i) {
loadLibrary((String)sslLibNameList.get(i));
}
}
public static void loadLibrary(String libname) {
if (!LOAD_LIB_MAP.containsKey(libname)) {
String libraryPath = trimToEmpty(System.getProperty("dm.library.path"));
if (isEmpty(libraryPath)) {
System.loadLibrary(libname);
LOAD_LIB_MAP.put(libname, libname);
} else {
File libFle = new File(libraryPath, isWindows() ? libname + ".dll" : "lib" + libname + ".so");
System.load(libFle.getPath());
LOAD_LIB_MAP.put(libname, libFle.getPath());
}
}
}
public static void loadDmLibrarys(String libname) {
loadDmLibrarys(libname, (String[])null);
}
public static void loadDmLibrarys(String libname, String[] excludeLibNames) {
String libraryPath = trimToEmpty(System.getProperty("dm.library.path"));
if (isEmpty(libraryPath)) {
libraryPath = trimToEmpty(System.getProperty("java.library.path"));
if (isEmpty(libraryPath)) {
loadLibrary(libname);
return; }
}
File rootDirFile = new File(libraryPath);
if (!rootDirFile.exists()) {
loadLibrary(libname);
} else {
List<String> libNameList = new ArrayList();
File[] var8;
int var7 = (var8 = rootDirFile.listFiles()).length;
for(int var6 = 0; var6 < var7; ++var6) {
File tmpFile = var8[var6];
String fileName = tmpFile.getName();
if (isWindows()) {
if (fileName.startsWith("d") && fileName.endsWith(".dll")) {
libNameList.add(fileName.substring(0, fileName.length() - 4));
}
} else if (fileName.startsWith("libd") && fileName.endsWith(".so")) {
libNameList.add(fileName.substring(3, fileName.length() - 3));
}
}
if (libNameList.size() == 0) {
loadLibrary(libname);
} else {
List<String> libNameList = sortLibNameList(libNameList);
if (excludeLibNames != null) {
for(int i = 0; i < excludeLibNames.length; ++i) {
libNameList.remove(excludeLibNames[i]);
}
}
while(true) {
boolean finish = false;
List<String> loadedLibNameList = new ArrayList();
Iterator var17 = libNameList.iterator();
while(var17.hasNext()) {
String tmpLibName = (String)var17.next();
try {
loadLibrary(tmpLibName);
if (tmpLibName.equals(libname)) {
finish = true;
break; }
loadedLibNameList.add(tmpLibName);
} catch (Throwable var10) {
}
}
if (finish) {
break;
}
try {
loadLibrary(libname);
break; } catch (Throwable var11) {
if (loadedLibNameList.size() == 0) {
throw var11;
}
libNameList.removeAll(loadedLibNameList);
}
}
}
}
}
public static List<String> sortLibNameList(List<String> libNameList) {
List<String> newList = new ArrayList();
List<String> tmpList = getLibNamesForFix(isWindows());
Iterator var4 = tmpList.iterator();
while(var4.hasNext()) {
String tmpStr = (String)var4.next();
boolean flag = libNameList.remove(tmpStr);
if (flag && !newList.contains(tmpStr)) {
newList.add(tmpStr);
}
}
for(int i = 0; i < libNameList.size(); ++i) {
if (!newList.contains(libNameList.get(i))) {
newList.add((String)libNameList.get(i));
}
}
removeDuplicateData(newList);
newList.removeAll(getLibNamesForNotLoad(isWindows()));
return newList;
}
public static List<String> getLibNamesForFix(boolean isWin) {
List<String> list = new ArrayList();
list.add("dmcvt");
list.add("dmmc");
list.add("dmutl");
list.add("dmelog");
list.add("dmmsg");
list.add("dmos");
list.add("dmreadline");
list.add("dmvtdsk");
list.add("dmcpr");
list.add("dmde");
list.add("dmmem");
list.add("dmsbtree");
list.add("dmasmparse");
list.add("dmcalc");
list.add("dmclientlex");
list.add("dmdcr");
list.add("dmmsg_parse");
list.add("dmnlssort");
list.add("dmstrt");
list.add("dmwseg");
list.add("dmcyt");
list.add("dmmout");
list.add("dmsbt");
list.add("dmshm");
list.add(isWin ? "dmshpldr_dll" : "dmshpldr");
list.add("dmcomm");
list.add("dmcrypt");
list.add("dmcfg");
list.add("dmcssmon");
list.add("dmdta");
list.add("dmfldr_comm");
list.add("dmjson");
list.add("dmlic");
list.add("dmregex");
list.add("dmsys");
list.add("dmtimer");
list.add("dmuthr");
list.add("dmxmal");
list.add(isWin ? "dcp_dll" : "dmdcp");
list.add("dmbcast");
list.add("dmdfs");
list.add("dmdpi");
list.add("dmfil");
list.add("dmmal");
list.add("dmraft");
list.add("dmrarch");
list.add("dmrlog");
list.add("dwmon");
list.add("dmasm");
list.add("dmasmapi");
list.add("dmdci");
list.add(isWin ? "dmdcs_dll" : "dmdcs");
list.add("dmdpc");
list.add(isWin ? "dmimon_dll" : "dmimon");
list.add("dmimon_dll_java");
list.add("dmknl");
list.add("dmlnk");
list.add("dmnci");
list.add("dmstg");
list.add("dwatcher");
list.add("dmasvr");
list.add("dmbtr");
list.add("dmdfi");
list.add("dmnsort");
list.add("dmpara");
list.add("dmblb");
list.add("dmckpt");
list.add(isWin ? "dmcss_dll" : "dmcss");
list.add("dmdct");
list.add("dmllog");
list.add("dmpif");
list.add(isWin ? "dmrtr" : "dmrtree");
list.add("dmscp");
list.add("dmtbl");
list.add("dmtrv");
list.add("dmhfs");
list.add("dmredo");
list.add("dmrps");
list.add("dmrs");
list.add("dmtrx");
list.add("dmcti");
list.add(isWin ? "dmdbg_dll" : "dmdbg");
list.add(isWin ? "dmdrs_dll" : "dmdrs");
list.add("dmlogmnr");
list.add("dmsess");
list.add("dmxa");
list.add("dmaud");
list.add("dmbcast2");
list.add("dmbifun");
list.add(isWin ? "dmdras_dll" : "dmdras");
list.add("dmrac");
list.add("dmbrtsk");
list.add(isWin ? "dmdss_dll" : "dmdss");
list.add("dmapx");
list.add("dmbak2");
list.add("dmopt");
list.add("dmrep");
list.add("dmtrc");
list.add("dmapsvc");
list.add("dmjob");
list.add("dmjschdl");
list.add("dmexe");
list.add(isWin ? "dmrman_dll" : "dmrman");
list.add("dmbldr");
return list;
}
public static List<String> getLibNamesForNotLoad(boolean isWin) {
List<String> list = new ArrayList();
list.add("svc_ctl_dll");
list.add("dmdpi");
list.add("dmsvr");
list.add(isWin ? "dmamon_dll" : "dmamon");
list.add("dmlogmnr_client");
list.add("dmp_disql_dll_java");
list.add(isWin ? "dmcpt_dll" : "dmcpt");
list.add("disql_dll");
list.add(isWin ? "dmfldr_dll" : "dmfldr");
list.add("dmfldr_dll_java");
list.add(isWin ? "dmjmon_dll" : "dmjmon");
list.add("dmoci");
list.add("dmoo4o");
list.add("dmoopi");
list.add("dmp_dll");
list.add("dmxai");
list.add("dodbc");
list.add("doledb");
list.add("dmocci");
return list;
}
private static void removeDuplicateData(List<String> libNameList) {
List<String> tmpList = new ArrayList();
for(int i = 0; i < libNameList.size(); ++i) {
if (!tmpList.contains(libNameList.get(i))) {
tmpList.add((String)libNameList.get(i));
}
}
libNameList.clear();
libNameList.addAll(tmpList);
}
public static void main(String[] args) {
}
}
文章
阅读量
获赞