Chinaunix首页 | 论坛 | 博客
  • 博客访问: 396532
  • 博文数量: 69
  • 博客积分: 1984
  • 博客等级: 上尉
  • 技术积分: 953
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-28 00:43
个人简介

学无所长,一事无成

文章分类

全部博文(69)

文章存档

2015年(19)

2014年(14)

2013年(9)

2012年(17)

2010年(10)

我的朋友

分类: Java

2015-07-08 15:21:29

参考文章:

逆旅过客:http://blog.chinaunix.net/uid/298861.html

 

本文介绍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

依赖软件:

官网:

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

c3p0与dbcp区别:

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

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

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

 

 

style="font-family:文泉驿等宽微米黑">

安装此驱动需要lein-localrepo 插件:  

二、创建一个project

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

 

三、安装Oracle 驱动

参考文章:  

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

 

  1. 首先安装lein-localrepo 插件,有两种安装方式,我采用的第二种方式

     

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

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

     

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

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

    运行 lein deps

     

  2. 添加本地 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

 

  1. 安装 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 会到如下网站进行搜素

style="color:#252525; font-family:文泉驿等宽微米黑">

style="color:#252525; font-family:文泉驿等宽微米黑">

 

手工可搜素如下网站

style="font-family:文泉驿等宽微米黑">

style="font-family:文泉驿等宽微米黑">

 

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

$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 :as jdbc])

(def db {:classname "
oracle.jdbc.OracleDriver"
:subprotocol "oracle"
:subname "thin:@127.0.0.1:1521:SID"
:user "user"
:password "password"})

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

 

$ lein run

 

六、复用数据库连接

参考文章:  

我们不希望每次进行数据库操作都创建一个新的连接,因此需要对连接进行复用,有如下两种方案:

(ns dbexample
(:require [clojure.java.jdbc :as jdbc]))

(def db-spec ...)
(with-db-connection [db-con db-spec]
(let [;; fetch some rows using this connection
rows (jdbc/query db-con ["SELECT * FROM table WHERE id = ?" 42])]
;; insert a copy of the first row using the same connection
(jdbc/insert! db-con :table (dissoc (first rows) :id))))

  1.  

七、使用DBCP连接池

参考:$ vi project.clj,添加依赖:

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

 

$ vi jdbc-test/core.clj

(require '[clojure.java.jdbc :as jdbc])
(require '[jdbc.pool.dbcp :as pool])

 

(def db {:classname   "oracle.jdbc.OracleDriver"  
:subprotocol "oracle"
:subname "thin:@127.0.0.1:1521:SID"
:user "user"
:password "password"})

(def dbspec (pool/make-datasource-spec db))

 

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

 

 

八、使用C3P0连接池

参考:  

需要软件

C3P0: SLF4J: style="color:#252525; font-family:文泉驿等宽微米黑">,version:1.7.12,用于日志记录,我们使用clojars.org网站提供的封装

 

$ 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 :as jdbc])
(require '[jdbc.pool.c3p0 :as pool])

 

(def db {:classname   "oracle.jdbc.OracleDriver"  
:subprotocol "oracle"
:subname "thin:@127.0.0.1:1521:SID"
:user "user"
:password "password"})

(def dbspec (pool/make-datasource-spec db))

 

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

第二种方式:

$ vi jdbc-test/core.clj

(ns example
(:use clojure.java.jdbc)
(:import javax.sql.DataSource
com.mchange.v2.c3p0.DataSources))

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

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

 

 

九、使用BoneCP连接池

略...

十、常用jdbc操作

java.jdbc API Reference

  • create-table-ddl

    drop-table-ddl

    do-command

    execute!

  • 十一、HoneySQL

    官网:安装:[honeysql "0.6.1"]

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

     

    参考资料:

    Leiningen教程中文版 %E4%B8%AD%E6%96%87%E7%89%88

     

    阅读(2547) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~