达梦数据库连接
达梦数据库安装不做过多赘述,有需要的可自行去搜索达梦数据库安装教程。
目前使用的是DataGrip 工具连接的达梦数据库, DataGrip是一款数据库管理客户端工具,方便连接到数据库服务器,执行sql、创建表、创建索引以及导出数据等。 是 JetBrains 发布的多引擎数据库环境,支持 MySQL 和 PostgreSQL,Microsoft SQL Server 和 Oracle,Sybase,DB2,SQLite,还有 HyperSQL,Apache Derby 和 H2。
在安装好DataGrip工具之后进行达梦数库驱动程序添加
驱动程序文件的位置一般在你安装的达梦数据库/source/drivers/jdbc 中(如果直接连接的是服务器上的达梦数据库本地没有安装,则只需要下载驱动程序DmJdbcDriver18.jar 文件到本地选中即可),
选完驱动程序文件后,在类中可以选择 dm.jdbc.driver.DmDriver
url模版选择进行添加 :
jdbc:dm://{host}:{port} 或者 jdbc:dm://{host::localhost}?[:{port::5236}][/DMSERVER?schema={database}] 两个进行任选一个就行
做完以上操作之后就可以进行达梦数据库创建并使用了
创建达梦数据库
填写上主机名,端口号,用户名密码就可进行测试连接,连接通过则达梦数据库成功连接。
创建好数据库,新建好数据库表即可进行以下操作了。
MongoDB语句转换为达梦数据库可执行的sql语句
使用navicat工具对mongoDB数据库表格进行导出的时候
- 导出格式为js格式时,会导出MongoDB数据库中自带的_id和__v 字段 ,在解析的时候需要将这两个自带的字段进行去除(方法一)
- 导出格式为json格式时,可以进行选择需要导出哪些字段,顾可将自带的_id和__v 字段去掉,则可使用方法二进行语句转换。
- 然后执行程序将文件转换为达梦数据库可执行的sql 语句并输出文件。
主要思路为:
- 读取MongoDB数据库表文件
- 去除无用属性
- 拼接达梦数据库可执行语句
- 输出达梦数据库语句文件
以下代码为将MongoDB语句转换为达梦数据库插入语句的代码
方法一:
// 将导出的MongoDB.js 文档准换为.sql 文件
const fs = require("fs");
const path = require('path');
// 调用转换函数并指定 MongoDB 和 达梦数据库 脚本的路径
const mongodbScriptPath = '/file/BaseFile.js'; // 需要转换的MongoDB文件
const mysqlScriptPath = '/file/BaseFile_convert.sql'; // 转换过后的SQL文件
// 读取BaseFile.js文件内容
const mongoDbFilePath = path.resolve(__dirname, mongodbScriptPath);
const mongoDbContent = fs.readFileSync(mongoDbFilePath, 'utf8');
// 根据代码语法结构分割字符串
const parts = mongoDbContent.split('.insert(');
if (parts.length <= 1) {
console.log('未找到插入语句部分');
process.exit(1);
}
let sqlStatements = '';
// 处理每个插入语句
for (let i = 1; i < parts.length; i++) {
// 去掉无用的属性
var objStr = parts[i];
var newStr = objStr.slice(0, objStr.lastIndexOf('}') + 1);
console.log(newStr);
var insertStatementNew = newStr.replace(/ObjectId\("[a-fA-F0-9]+"\)/g, "''");
var insertStatement = insertStatementNew.replace(/NumberInt\("[a-fA-F0-9]+"\)/g, "''");
// 解析插入语句为对象数组
var data = Function(`return ${insertStatement}`)();
// 构建INSERT INTO语句
var count = 1;
var length = Object.keys(data).length;
var keys = "";
var values = "";
for(var key in data) {
count++;
if(key != "_id" && key != "__v" ){
if(count >= length){
keys += key;
values += "'" + data[key] + "'";
} else {
keys += key + ",";
values += "'" + data[key] + "',";
}
}
}
const tableName = 'message';
const baseName = 'KSMQ_TEST_WQ';
const insertSql = `INSERT INTO ${baseName}.${tableName} (${keys}) VALUES (${values});\n`;
sqlStatements += insertSql;
}
// 输出转换过后的MySQL语句文件
const outputFilePath = path.resolve(__dirname, mysqlScriptPath);
fs.writeFileSync(outputFilePath, sqlStatements, 'utf8');
console.log('注意:导出的MongoDB数据库文件格式必须为js文件才能进行转换成功');
方法二:转换JSON文件
// 将导出的MongoDB.json 文档准换为.sql 文件
const { json } = require("express");
const fs = require("fs");
const path = require('path');
// 调用转换函数并指定 MongoDB 和 转换过后的 脚本的路径
const mongodbScriptPath = '/file/BaseFile.json'; // 需要转换的MongoDB文件
const mysqlScriptPath = '/file/BaseFile_convert.js'; // 转换过后的sql文件
// 读取MongoDB.js文件内容
const mongoDbFilePath = path.resolve(__dirname, mongodbScriptPath);
const mongoDbContent = fs.readFileSync(mongoDbFilePath, 'utf8');
var mongoDbContentJson = JSON.parse(mongoDbContent);
var contentList = mongoDbContentJson.RECORDS;
// 根据代码语法结构分割字符串
if (contentList.length <= 1) {
console.log('未找到插入语句部分');
process.exit(1);
}
console.log("length-->" + contentList.length)
let sqlStatements = '';
// 处理每个插入语句
for (let i = 0; i < contentList.length; i++) {
// 去掉无用的属性
var insertStatement = contentList[i];
// 解析插入语句为对象数组
var data = Function(`return ${JSON.stringify(insertStatement)}`)();
// 构建INSERT INTO语句
var count = 0;
var length = Object.keys(data).length;
var keys = "";
var values = "";
for(var key in data) {
count++;
if(count >= length){
keys += key;
values += "'" + data[key] + "'";
} else {
keys += key + ",";
values += "'" + data[key] + "',";
}
}
const tableName = 'BaseFile';
const dataName = 'MAINDATA_TEST_WQ';
const insertSql = `INSERT INTO ${dataName}.${tableName} (${keys}) VALUES (${values});\n`;
sqlStatements += insertSql;
}
// 输出转换过后的MySQL语句文件
const outputFilePath = path.resolve(__dirname, mysqlScriptPath);
fs.writeFileSync(outputFilePath, sqlStatements, 'utf8');
console.log('注意:导出的MongoDB数据库文件格式必须为json文件才能进行转换成功');
注:如果在处理达梦数据库中字段名与关键字冲突的情况下,您可以考虑以下几种方法:
- 使用引号: 尝试使用双引号
" "
将字段名称括起来。有些数据库支持使用双引号来将字段名称视为普通标识符,而不是关键字。以上代码中未对该种情况进行处理
2. 修改字段名: 考虑将冲突的字段名称进行修改,以避免关键字冲突。
最后将生成的文件在达梦数据库中进行导入就可以了。
题外话: 如何将DataGrip汉化?
打开DataGrip,在设置中的插件选项中搜索Chinese,选中第一个进行安装,安装完成之后进行DataGrip重启就可以了