我是靠谱客的博主 虚心大雁,最近开发中收集的这篇文章主要介绍兼容国产数据库达梦和操作系统鲲鹏泰山操作系统总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      曾几何时,接到公司命令,要求负责的产品兼容国产数据库和操作系统,估计是中美贸易战波及的,吭吭唧唧做完了,做个总结吧,通过这个项目,感觉国产数据库和操作系统也不差,虽然底层是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 

最后

以上就是虚心大雁为你收集整理的兼容国产数据库达梦和操作系统鲲鹏泰山操作系统总结的全部内容,希望文章能够帮你解决兼容国产数据库达梦和操作系统鲲鹏泰山操作系统总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部