兼容国产数据库达梦和操作系统鲲鹏泰山操作系统总结

      曾几何时,接到公司命令,要求负责的产品兼容国产数据库和操作系统,估计是中美贸易战波及的,吭吭唧唧做完了,做个总结吧,通过这个项目,感觉国产数据库和操作系统也不差,虽然底层是oracle和linux,但是至少做到了无缝兼容,估计也是一种技术策略,既做到了国产化,也大大降低了使用者的学习成本,大规模推广做了基础。另外感觉达梦的数据库迁移工具用起来挺爽,可视化傻瓜式做的比较好,就是系统稳定性和性能还需要提高,社区和网上资料太少,需要加强。言归正传,讲讲碰到的几个坑及解决方法吧。

 一、达梦数据库

      达梦数据库底层是oracle数据库,如果本身已经是oracle数据库的话,语法基本相同,只是程序需要改造点,需要引入达梦jdbc驱动,如果使用SYSDBA的话,程序模型层需要加模式名。如下改造:

    1.先在代码src目录下新建一个lib目录,将DmDialect-for-hibernate5.0.jar,DmJdbcDriver18.jar拷入该目录

    2.应用项目中pom.xml中增加上面的两个依赖包

<dependency>
  <groupId>com.dm</groupId>
  <artifactId>DmJdbcDriver18</artifactId>
  <version>1.8</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/DmJdbcDriver18.jar</systemPath>
</dependency>
<dependency>
  <groupId>com.dm</groupId>
  <artifactId>DmDialect</artifactId>
  <version>5.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/DmDialect-for-hibernate5.0.jar</systemPath>
</dependency>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <skip>true</skip>
  </configuration>
</plugin>

    3.配置文件配置数据库链接

#DMJDBC 驱动类
spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
#DMURL 连接
spring.datasource.url=jdbc:dm://127.0.0.1:5236/AUTHUSER
#DM用户名
spring.datasource.username=SYSDBA
#DM用户口令
spring.datasource.password=SYSDBA

##DMHibernate方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DmDialect

    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 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值