首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Clojure连接到MySQL数据库?

如何从Clojure连接到MySQL数据库?
EN

Stack Overflow用户
提问于 2009-03-05 08:07:00
回答 4查看 17.2K关注 0票数 30

假设:您的机器上已经运行了Clojure和MySQL。

你怎么让他们开口说话?

EN

回答 4

Stack Overflow用户

发布于 2009-03-05 08:07:39

假设:您的机器上已经运行了Clojure和MySQL。

  1. 签出和构建clojure-contrib

git clone git://github.com/richhickey/clojure-contrib.git cd clojure-contrib build

将生成的clojure-contrib.jar放在CLASSPATH.

  • Download MySQL Connector/J上,并将mysql-connector-java-5.1.7-bin.jar放在MySQL Connector/J

您可能需要使用以下参数运行JVM:

-Djdbc.drivers=com.mysql.jdbc.Driver

  • Determine MySQL数据库的连接URL

例如,如果您在MAMP下运行MySQL,那么在JDBC中使用的URL将如下所示:

conn = DriverManager.getConnection ("jdbc:mysql://localhost:8889/db_name?user=root&password=root")

分为以下几个部分: url

代码语言:javascript
复制
- protocol: `jdbc:`
- subprotocol: `mysql`
- db-host: `localhost`
- db-port: `8889`
- username 
- password

  1. 制作这个clojure脚本,修改数据库连接参数以匹配您的URL,另存为test.clj,编译并运行。

代码语言:javascript
复制
    (use 'clojure.contrib.sql)               ;;' satisfy prettify

      (let [db-host "localhost"
            db-port 8889
            db-name "db_name"]
        (def db {:classname "com.mysql.jdbc.Driver"
               :subprotocol "mysql"
               :subname (str "//" db-host ":" db-port "/" db-name)
               :user "root"
               :password "root"})
        (with-connection db
          (with-query-results rs ["select * from languages"]
            (dorun (map #(println (:language :iso_code %)) rs)))))

            ; rs will be a sequence of maps,
            ; one for each record in the result set.

注:此代码改编自Mark Volkmann为access a Postgres database from Clojure编写的类似代码

票数 29
EN

Stack Overflow用户

发布于 2012-04-19 04:19:17

这是一个对lein友好的答案,有很多来自this blog by Nurullah Akkaya的指导

  1. 将依赖项添加到project.clj

(defproject clojql "1.0.0-SNAPSHOT“: description”FIXME: write description“:依赖[org.clojure/clojure "1.2.1”;对于连接器org.clojure/java.jdbc "0.0.6“;;jdbc mysql/mysql- clojure.contrib.sql -java "5.1.6"]) ;;mysql driver

  • 从命令行运行lein deps获取映射中的连接信息:

user=> (use 'clojure.contrib.sql) nil user=> (def db {:classname "com.mysql.jdbc.Driver“:subprotocol "mysql”:subname "//localhost:3306/nmr“:user”clojure.contrib.sql“})

  • 使用with-connectionwith-query-results(& others)

查询(带有连接的数据库(带有查询结果的rs "select * from sometable")) 667

步骤3和4可以来自repl (使用__lein repl启动它),也可以在正常的源代码中执行

票数 15
EN

Stack Overflow用户

发布于 2016-02-10 21:55:17

截至2016年:

使用Leiningen在project.clj中添加依赖项:

代码语言:javascript
复制
:dependencies [[org.clojure/clojure "1.8.0"]
               [org.clojure/java.jdbc "0.4.2"]
               [mysql/mysql-connector-java "5.1.38"]]

需要在命名空间定义中使用数据库连接器:

代码语言:javascript
复制
(ns name.space
  (:require [clojure.java.jdbc :as j]))

定义数据库连接:

代码语言:javascript
复制
(def db-map {:subprotocol "mysql"
             :subname "//localhost:3306/SCHEME"
             :user "DB_USER"
             :password "DB_USER_PASS"})

查询数据库:

代码语言:javascript
复制
(j/query db-map ["SELECT * FROM table"])

http://clojure-doc.org/articles/ecosystem/java_jdbc/using_sql.html上找到更多示例

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/613929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档