java中jdbc,mybatis连接mysql数据库调用oracle存储过程

项目场景:

因为数据库的原因所以一些操作需要在oracle进行,然后进行数据同步的时候需要用到调用存储过程


问题描述

本来是想在mysql与oracle之间建立dblink的这样就省下大部分操作只需要改一下表字段就行,可惜不知道什么原因,dblink没有链接成功,所以只能在后端程序里连接oracle数据库调用存储过程了,在此期间遇到了很多坑所以在这记录下来

在后端调用的时候出现的问题有:1.Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错

2.Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错

3.pom文件报错

4.mvn不是外部指令

主要是这几个


原因分析:

我先说下遇到问题:至于dblink连接我就不说了,这是路径想了解的可以看一下

oracle通过dblink连接mysql配置详解(全Windows下)_袁清波i的博客-优快云博客

报错就是自己的pom文件的错误例如我自己的:这个报错的话原因是oracle的odbc可能么有安装

第二个报错是连接到存储过程了但是你传的参数跟你oracle接的参数对不上导致的,还有可能是因为oracle数据库内存储过程定义的不对,他里面有一个packages里面和package bodlies这两个文件内的存储过程定义的字段类型及个数也许不对


 

解决方案:

首先是连接不到oracle数据库的问题,这个需要进行安装这个可以在oracle官网下载,查找跟自己odbc版本一致的安装到你的oracle中jdbc里面的lib目录里然后cmd输入命令:mvn install:install-file -Dfile=/D:/maven/repository/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -DgeneratePom=true
这个时候可能会报mvn不是外部或内部命令的错误导致的,你需要在自己电脑上配置环境变量

这两步可以参照这两个连接

https://blog.youkuaiyun.com/qq_41076531/article/details/115868029

https://blog.youkuaiyun.com/weixin_45767596/article/details/122091544?spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16-122091544-blog-77503266.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16-122091544-blog-77503266.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=17解决Maven:Cannot resolve com.oracle.ojdbc:ojdbc6:11.2.0.1.0报红找不到问题,解决方案亲测有效详细图文教程问题描述解决方法问题描述有小伙伴遇见这样的问题遇到这种情况,是因为oracle的ojdbc.jar是收费的,所以maven的中央仓库中没有这个资源,只能通过配置本地库才能加载到项目中去。解决方法第一步:如果本地安装有oracle,通过以下路径可以找到ojdbc6.jar包如果没有,通过https://pan.baidu.com/s/1oshttps://blog.youkuaiyun.com/weixin_45767596/article/details/122091544?spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16-122091544-blog-77503266.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16-122091544-blog-77503266.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=17基本上可以解决mysql连接不到oracle数据库的问题了也就是第一个第三个报错和第四个报错

第二个报错的解决办法没有什么捷径,就是核对前后端的字段数量及类型

下面是我调用存储过程的方法:

后端:

控制层

 业务层:

这里的代码是将传过来的数据获取到,然后连接自己配置文件内的oracle数据库,然后获取数据库的存储过程设置传参的个数,紧接着调用方法,进行set数据

public Object CallEMRPro2(List<HashMap> hz_cx, String hospitalNo, HashMap<String, Object> map, String operateinfo, int operateflag) throws ClassNotFoundException, IOException {
		Class.forName("oracle.jdbc.OracleDriver");
		 try {
			 Properties properties = new Properties();
			 ResourceBundle properties1 = ResourceBundle.getBundle("conf.jdbc");
		   var url= properties1.getString("url");
		   var username= properties1.getString("username");
		   var password= properties1.getString(".password");
			Connection conn = DriverManager.getConnection(url,username,password);
			java.sql.CallableStatement callableStatement =  conn.prepareCall("{CALL lwemr.pkg_emr_patient.EMR(?,?,?,?,?)}");	
			callableStatement.setObject(1, hz_cx.get(0).get("PATIENT_ID"));
	        callableStatement.setObject(2, hz_cx.get(0).get("VISIT_ID"));
	        callableStatement.setObject(3, hospitalNo);
	        callableStatement.setObject(4, operateinfo);
	        callableStatement.setObject(5, operateflag);
	        callableStatement.execute();
	        callableStatement.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return operateflag;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值