免安装Oracle连接数据库(odbc驱动)

前言:

最近使用 R 开发数据分析系统,需要连接Oracle数据库获取数据,但是又不想为了拿几个数据而装一个Oracle,所以就想直接找个Oracle的odbc驱动,免去安装Oracle客户端的麻烦。以下对安装过程作个记录,希望对大家有所帮助。


正文:

下载:

首先,我们需要下载两个驱动:
instantclient-odbc-win32-11.2.0.1.0instantclient-basiclite-win32-11.2.0.1.0
地址:http://www.oracle.com/technetwork/cn/topics/winsoft-095945-zhs.html

因为下载Oracle的产品一般都需要先注册,所以我直接放网盘上了,如果嫌注册麻烦的朋友可以从这里下载:odbc驱动,提取密码:j9yr
(如果百度云盘失效的话还有微盘:odbc驱动,提取密码:P0GG)


安装:

步骤一:解压

先把 basiclite 解压出来,得到一个 instantclient_11_2 文件夹。然后把 odbc 里面的文件解压到 instantclient_11_2 目录下(别搞错了顺序!)。如下图:
这里写图片描述


步骤二:

把Oracle数据库所在的上的NETWORK文件夹拷贝到刚才解压出来的 instantclient_11_2 目录下。(其实也可以从任何一台装有Oracle的电脑上拿)

我隔壁的电脑装有Oracle,它的NETWORK文件夹在 G:\app\John\product\11.2.0\dbhome_1
这里写图片描述


步骤三:

修改 NETWORK\ADMIN\tnsnames.ora 文件:在文档末尾加上下面几行代码

ORCL81 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 100.100.100.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

注:把100.100.100.100改成你要连接数据库的所在 IP,另外 ORCL81 和 orcl 可以改一下。特别注意别漏了括号或者多了空格什么的,这段代码要求很严格,很可能因为多了一个空格而连接不成功。这段代码在 tnsnames.ora 一般也有,可以直接复制粘贴,然后修改一下 IP 。


步骤四:

添加环境变量TNS_ADMIN,路径指向 ADMIN 目录。如下图:
这里写图片描述


步骤五:

运行 instantclient_11_2 目录下的 odbc_install.exe ,将会出现一个 DOS 窗口一闪而过。。


步骤六:

大功告成,去配置数据源吧!

打开ODBC数据源管理器 -> 系统DNS -> 添加,弹出“创建新数据源”窗口,选择 Oracle in instantclient_11_2 开始新建数据源!
这里写图片描述


转载请注明出处,谢谢!(原文链接:http://blog.csdn.net/bone_ace/article/details/47628725

双数据源(通常是指数据库连接池)下的连表分页操作,在Java中常常使用JDBC或者一些ORM框架如MyBatis来处理。这里我将以MyBatis为例给出一个简化的示例: 首先,你需要配置两个数据源(DataSource),假设一个是主库,另一个是从库。然后在Mapper接口里定义你的查询方法: ```java public interface DualDataSourceMapper { @Select("SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id") List<YourResultClass> getDualDataSourceData(int pageNum, int pageSize); } ``` 这里的`YourResultClass`是你需要从结果集中构建的对象。 在Service层,你可以通过事务管理来处理两个数据源的读取,并实现分页逻辑: ```java @Service public class DualDataSourceService { private final DualDataSourceMapper mainMapper; private final DualDataSourceMapper slaveMapper; public DualDataSourceService(DualDataSourceMapper mainMapper, DualDataSourceMapper slaveMapper) { this.mainMapper = mainMapper; this.slaveMapper = slaveMapper; } @Transactional public PageResult<YourResultClass> dualDataSourcePagination(int pageNum, int pageSize) { // 获取主库数据 List<YourResultClass> mainList = mainMapper.getData(pageNum, pageSize); // 获取从库数据并合并到主库数据 int totalFromSlave = slaveMapper.getTotal(); // 假设slaveMapper有获取总记录数的方法 int slaveStartIndex = (pageNum - 1) * pageSize; List<YourResultClass> slaveList = slaveMapper.getData(slaveStartIndex, Math.min(pageSize, totalFromSlave)); // 进行数据处理和合并 for (YourResultClass slave : slaveList) { boolean foundInMain = false; for (YourResultClass main : mainList) { if (main.getId().equals(slave.getId())) { // 假设主从表关联字段为id main.setSlaveInfo(slave.getSlaveInfo()); // 设置从库信息 foundInMain = true; break; } } if (!foundInMain) { mainList.add(slave); // 如果从库数据未找到对应主库,直接添加 } } // 返回PageResult return new PageResult<>(mainList, totalFromSlave); } } ``` 请注意,这只是一个基本示例,实际项目中可能需要考虑更复杂的事务管理和异常处理。同时,具体的代码可能会因为你的数据模型、数据库结构以及使用的框架有所不同。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值