oracle数据库中clo作用,Clojure访问Oracle数据库

分类: Java

2015-07-08 15:21:29

参考文章:

本文介绍Clojure如何使用JDBC访问Oracle数据库,我们会学习clojure.java.jdbc中的一些基本函数。

一、环境

OS: Oracle Linux Server release 6.6

Java:java version "1.7.0_79"

Lein:Leiningen 2.5.1 on Java 1.7.0_79 OpenJDK 64-Bit Server VM

Clojure:1.6.0

IDE:intellij IDEA 14.1.4

依赖软件:clojure.java.jdbc – 通用jdbc驱动:最新版本:0.3.7

数据库连接池

一般情况下首选c3p0、dbcp,久经考验,比较成熟稳定。

dbcp: [clojure.jdbc/clojure.jdbc-dbcp"0.3.2"]

官网:百度:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

c3p0与dbcp区别:

c3p0有自动回收空闲连接功能;dbcp没有自动回收空闲连接的功能;

c3p0提供最大空闲时间;dbcp提供最大连接数。

c3p0当超过最大空闲连接时间时,当前连接就会被断掉;dbcp当超过最大连接数时,所有连接都会被断开

com.jolbox.bonecp — 官网:BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。

oracle jdbc驱动:ojdbc7.jar,也可从下面url下载,我保存到 $HOME/repo 目录下除了oracle官网驱动外,也可以安装:[org.clojars.zentrope/ojdbc "11.2.0.3.0"]

二、创建一个project

$ lein new app jdbc-test; cd jdbc-test;lein pom

三、安装Oracle 驱动

参考文章:

第一种方法:安装官网驱动

插件,有两种安装方式,我采用的第二种方式

作为全局插件安装,vi ~/.lein/profiles.clj(windows 下编辑 %USERPROFILE%\.lein\profiles.clj)

{:user {:plugins [[lein-localrepo "0.5.3"]]}}

作为project插件安装,vi jdbc-test/project.clj:

:plugins [[lein-localrepo "0.5.3"]]

运行 lein deps

添加本地 repo ,执行

$ cd jdbc-test;

$ lein localrepo install $HOME/repo/ojdbc7-12.1.0.2.jar oracle.jdbc/oracledriver "12.1.0.2"

以下指令可以查看localrepo

$ lein localrepo list # lists all artifacts, all versions

$ lein localrepo list -s # lists all artifacts with description

$ lein localrepo list -f # lists all artifacts and filenames

$ lein localrepo list -d # lists all artifacts with detail

安装 ojdbc7驱动,

$ vi jdbc-test/project.clj,添加 [oracle.jdbc/oracledriver "12.1.0.2"]

$ lein deps

第二种方法:安装[org.clojars.zentrope/ojdbc "11.2.0.3.0"]

这种方式最简便,直接从clojars仓库就可以安装(本质上还是官网的驱动)

$ vi project.clj,添加依赖:[org.clojars.zentrope/ojdbc "11.2.0.3.0"]

$ lein deps

四、安装其他依赖软件:

修改 project.clj,添加依赖

$ vi project.clj

:dependencies [[org.clojure/clojure "1.6.0"]] 修改为

:dependencies [[org.clojure/clojure "1.6.0"]

[org.clojure/java.jdbc "0.3.7"]

;[com.mchange/c3p0 "0.9.5.1"]

[clojure.jdbc/clojure.jdbc-c3p0 "0.3.2"]

[oracle.jdbc/oracledriver "12.1.0.2"]

;[org.clojars.zentrope/ojdbc "11.2.0.3.0"]

[com.jolbox/bonecp "0.8.0.RELEASE"]]

$ lein deps

lein deps 会到如下网站进行搜素

手工可搜素如下网站

最终,软件会安装在如下目录

$HOME/.m2/repository/org/clojure/java.jdbc/0.3.7

$HOME/.m2/repository/clojure/jdbc/clojure.jdbc-c3p0/0.3.2/

$ lein classpath|tr ':' '\n' #查看下依赖路径

五、连接数据库

$ cd jdbc-test;vi src/jdbc_test/core.clj

(require'[clojure.java.jdbc :asjdbc])

(defdb {:classname"oracle.jdbc.OracleDriver" :subprotocol"oracle"

:subname"thin:@127.0.0.1:1521:SID"

:user"user"

:password"password"})

(println (jdbc/querydb ["select sysdate from dual"]))

$ lein run

六、复用数据库连接

参考文章:

我们不希望每次进行数据库操作都创建一个新的连接,因此需要对连接进行复用,有如下两种方案:使用 with-db-connection进行分组操作,这是一个宏,大致用法如下:

(nsdbexample

(:require[clojure.java.jdbc :asjdbc]))

(defdb-spec ...) (with-db-connection[db-con db-spec]

(let[;; fetch some rows using this connection

rows (jdbc/querydb-con ["SELECT * FROM table WHERE id = ?" 42])]

;; insert a copy of the first row using the same connection

(jdbc/insert!db-con :table(dissoc(firstrows) :id))))数据库连接池:使用C3P0或BoneCP等,见下一节

七、使用DBCP连接池

[clojure.jdbc/clojure.jdbc-dbcp "0.3.2"]

$ vi jdbc-test/core.clj

(require'[clojure.java.jdbc :asjdbc])

(require'[jdbc.pool.dbcp :aspool])

(defdb {:classname"oracle.jdbc.OracleDriver" :subprotocol"oracle"

:subname"thin:@127.0.0.1:1521:SID"

:user"user"

:password"password"})

(defdbspec (pool/make-datasource-specdb))

(println (jdbc/querydbspec ["select sysdate from dual"]))

八、使用C3P0连接池

参考:

需要软件

$ vi project.clj,添加依赖:

[clojure.jdbc/clojure.jdbc-c3p0 "0.3.2"]

[com.revelytix.logbacks/slf4j-log4j12 "1.0.0"]

第一种方式:

$ vi jdbc-test/core.clj

(require'[clojure.java.jdbc :asjdbc])

(require'[jdbc.pool.c3p0 :aspool])

(defdb {:classname"oracle.jdbc.OracleDriver" :subprotocol"oracle"

:subname"thin:@127.0.0.1:1521:SID"

:user"user"

:password"password"})

(defdbspec (pool/make-datasource-specdb))

(println (jdbc/querydbspec ["select sysdate from dual"]))

第二种方式:

$ vi jdbc-test/core.clj

(nsexample

(:useclojure.java.jdbc)

(:importjavax.sql.DataSource

com.mchange.v2.c3p0.DataSources))

(defdb {:datasource(DataSources/pooledDataSource(DataSources/unpooledDataSource"jdbc:oracle:thin:USER/PASS@HOST_IP:PORT:SCHEMA"))})

(println (jdbc/querydb ["select sysdate from dual"]))

九、使用BoneCP连接池

略...

十、常用jdbc操作

使用:(require'[honeysql.core :assql] '[honeysql.helpers :refer:all])

参考资料:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值