曾几何时,接到公司命令,要求负责的产品兼容国产数据库和操作系统,估计是中美贸易战波及的,吭吭唧唧做完了,做个总结吧,通过这个项目,感觉国产数据库和操作系统也不差,虽然底层是oracle和linux,但是至少做到了无缝兼容,估计也是一种技术策略,既做到了国产化,也大大降低了使用者的学习成本,大规模推广做了基础。另外感觉达梦的数据库迁移工具用起来挺爽,可视化傻瓜式做的比较好,就是系统稳定性和性能还需要提高,社区和网上资料太少,需要加强。言归正传,讲讲碰到的几个坑及解决方法吧。
一、达梦数据库
达梦数据库底层是oracle数据库,如果本身已经是oracle数据库的话,语法基本相同,只是程序需要改造点,需要引入达梦jdbc驱动,如果使用SYSDBA的话,程序模型层需要加模式名。如下改造:
1.先在代码src目录下新建一个lib目录,将DmDialect-for-hibernate5.0.jar,DmJdbcDriver18.jar拷入该目录
2.应用项目中pom.xml中增加上面的两个依赖包
|
3.配置文件配置数据库链接
|
4.如果用户使用SYSDBA,模型层需要加模式名

5.调用存储过程,封装了个通用方法
/**
* DM数据库 调用存储过程公共方法
*
* @param param 调用存储过程的参数
* @param procedureName 对应数据库的存储过程名
* @param dataSource auth,cdr的连接
* @return
*/
public static List getDmOutReturnList(Map<String, String> param, String procedureName, DataSource dataSource) {
ResultSet rs = null;
List list = new ArrayList();
//拼接入参
String sqlStr = getSqlStr(param, procedureName);
try {
//创建数据库连接
Connection conn = dataSource.getConnection();
//创建连接状态
Statement state = conn.createStatement();
//执行sql
CallableStatement cstmt = conn.prepareCall(sqlStr);
for (Map.Entry<String, String> entry : param.entrySet()) {
cstmt.setString(entry.getKey(), entry.getValue());
}
cstmt.registerOutParameter(param.size() + 1, OracleTypes.CURSOR);
cstmt.execute();
rs = (ResultSet) cstmt.getObject(param.size() + 1);
list = convertList(rs);
//关闭ResultSet
rs.close();
//关闭连接状态
state.close();
//释放(归还)连接
conn.close();
return list;
} catch (Exception e) {
LOGGER.error("调用存储过程报错:{}", procedureName, e);
}
return list;
}
/**
* ResultSet 转 List
*
* @param rs ResultSet
* @return List
*/
private static List convertList(ResultSet rs) {
List list = new ArrayList();
try {
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
Map rowData = new HashMap();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
return list;
} catch (Exception e) {
LOGGER.error("转换出错:{}", e.getMessage());
}
return list;
}
/**
* 拼接入参
*
* @param param 存储入参
* @param procedureName 存储名
* @return sql
*/
private static String getSqlStr(Map<String, String> param, String procedureName) {
List list = new ArrayList();
for (int i = 0; i < param.size() + 1; i++) {
list.add("?");
}
return "call " + procedureName + "(" + StringUtils.join(list.toArray(), ",") + ")";
} |
二、使用操作系统
本次是平生第一次使用linux操作系统,在同事的帮助下入了门,然后一顿百度,也基本能完成一般的项目部署工作,收获挺多,也对Linux起了兴趣,年底赚钱了准备买个电脑,明年的学习计划就有Linux了,毕竟往后玩大数据,这是必备技能。关于国产操作系统这次工作也没过多说的,待会直接贴网址。就一个坑,部署上去的jar包配置文件放到项目外会出现失效问题,后来把它放到里面了就好了。


参考资料:达梦:
https://blog.csdn.net/wllpeter/article/details/79486426
https://blog.csdn.net/jay_1989/article/details/51075200
linux:
https://www.cnblogs.com/wanwen/p/7495578.html
https://www.runoob.com/linux/linux-comm-chmod.html
https://blog.csdn.net/bingxuesiyang/article/details/88417465
最后
以上就是虚心大雁最近收集整理的关于兼容国产数据库达梦和操作系统鲲鹏泰山操作系统总结的全部内容,更多相关兼容国产数据库达梦和操作系统鲲鹏泰山操作系统总结内容请搜索靠谱客的其他文章。
发表评论 取消回复