Giả sử: bạn đã có cả Clojure và MySQL đang chạy trên máy của bạn.
Bạn làm cho họ nói chuyện như thế nào?Làm cách nào để kết nối với cơ sở dữ liệu MySQL từ Clojure?
Trả lời
Giả sử: bạn đã có cả Clojure và MySQL đang chạy trên máy của mình.
kiểm tra và xây dựng clojure-contrib:
git clone git://github.com/richhickey/clojure-contrib.git cd clojure-contrib build
Đặt kết quả clojure-contrib.jar trên bạn CLASSPATH.
Tải MySQL Connector/J và đặt mysql-connector-java-5.1.7-bin.jar trên CLASSPATH của bạn
Bạn có thể phải chạy JVM của bạn với những lập luận này:
-Djdbc.drivers=com.mysql.jdbc.Driver
Xác định URL kết nối của cơ sở dữ liệu MySQL của bạn
Ví dụ, nếu bạn đang chạy MySQL dưới MAMP thì URL mà bạn sẽ sử dụng trong JDBC sẽ giống như thế:
conn = DriverManager.getConnection ("jdbc:mysql://localhost:8889/db_name?user=root&password=root")
Url được chia nhỏ thành các thành phần:
- giao thức:
jdbc:
- subprotocol:
mysql
- db-host:
localhost
- db cổng:
8889
- tên
- mật khẩu
- giao thức:
Hãy kịch bản clojure này, sửa đổi các thông số kết nối cơ sở dữ liệu để phù hợp với URL của bạn, save as test.clj, biên dịch và chạy.
(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.
NB Mã này đã được chuyển thể từ mã tương tự được viết bởi Mark Volkmann để access a Postgres database from Clojure
Đây là một câu trả lời Lein thân thiện, với sự hướng dẫn nhiều từ this blog by Nurullah Akkaya:
add phụ thuộc vào số
project.clj
:
của bạn(defproject clojql "1.0.0-SNAPSHOT" :description "FIXME: write description" :dependencies [[org.clojure/clojure "1.2.1"] [org.clojure/clojure-contrib "1.2.0"] ;; for clojure.contrib.sql [org.clojure/java.jdbc "0.0.6"] ;; jdbc [mysql/mysql-connector-java "5.1.6"]]) ;; mysql driver
chạy
lein deps
từ dòng lệnh để lấy phụ thuộcxác định thông tin kết nối của bạn trong một bản đồ:
user=> (use 'clojure.contrib.sql) nil user=> (def db {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/nmr" :user "root"})
sử dụng
with-connection
vàwith-query-results
macro (& others):user=> (with-connection db (with-query-results rs ["select * from sometable"] (count rs))) 667
bước 3 & 4 có thể là từ repl (lein repl
để bắt đầu nó) hoặc bên trong mã nguồn bình thường
Cảm ơn! Bằng cách này, phiên bản "ổn định" mới nhất vào thời điểm này là 1.4.0 cho clojure, 0.2.3 cho java.jdbc và 5.1.22 cho mysql-connector-java. clojure-contrib không còn cần thiết nữa và clojure.contrib.sql bây giờ là một phần của java.jdbc. Xem https://github.com/clojure/java.jdbc để biết ví dụ. – raylu
Nếu bạn muốn có một số đường cú pháp, bạn có thể thử Korma.
(use 'korma.db)
(defdb db (postgres {:db "mydb"
:user "user"
:password "dbpass"}))
(use 'korma.core)
(defentity users)
(select users)
;; executes: SELECT * FROM users
(select users
(where (or (= :usersname "chris")
(= :email "[email protected]"))))
;; executes: SELECT * FROM users WHERE (users.usersname = 'chris' OR users.email = '[email protected]')
Đó thực sự không phải là mysql. – Ven
@Ven, Mặc dù 'defdb' trong đoạn mã trên thực sự trỏ tới Postgres, tài liệu này bao gồm MySql giữa các cơ sở dữ liệu khác. Xem tại đây: http://sqlkorma.com/docs#db Có thể đoạn mã có thể được cập nhật để có mối tương quan tốt hơn với câu hỏi. –
Tính đến 2016:
sử dụng Leiningen, thêm phụ thuộc bên project.clj:
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/java.jdbc "0.4.2"]
[mysql/mysql-connector-java "5.1.38"]]
yêu cầu kết nối cơ sở dữ liệu bên trong định nghĩa namespace:
(ns name.space
(:require [clojure.java.jdbc :as j]))
xác định kết nối cơ sở dữ liệu:
(def db-map {:subprotocol "mysql"
:subname "//localhost:3306/SCHEME"
:user "DB_USER"
:password "DB_USER_PASS"})
truy vấn cơ sở dữ liệu:
(j/query db-map ["SELECT * FROM table"])
tìm thêm ví dụ ở http://clojure-doc.org/articles/ecosystem/java_jdbc/using_sql.html
- 1. cách kết nối F # với cơ sở dữ liệu MySQL?
- 2. Kết nối với cơ sở dữ liệu MySQL với RMySQL
- 3. Kết nối cơ sở dữ liệu Postgres từ MySQL Workbench
- 4. Làm thế nào để kết nối android với máy chủ cơ sở dữ liệu MySql?
- 5. Làm thế nào để kết nối cơ sở dữ liệu mysql với Dart?
- 6. Ưu tiên kết nối cơ sở dữ liệu PHP/MySQL?
- 7. jetty mysql kết nối cơ sở dữ liệu pooling
- 8. Cách lấy chuỗi kết nối từ cơ sở dữ liệu
- 9. Làm thế nào để kết nối Django với một cơ sở dữ liệu mysql qua kết nối ssl?
- 10. Cách ưa thích để kết nối với cơ sở dữ liệu postgresql từ PHP là gì?
- 11. CakePHP Cách thay đổi kết nối cơ sở dữ liệu
- 12. Làm cách nào để kết nối với cơ sở dữ liệu trong IronWorker bằng ActiveRecord?
- 13. từ xa kết nối với một cơ sở dữ liệu MySQL
- 14. Làm cách nào để kết nối CakePHP với cơ sở dữ liệu SQLite?
- 15. Kết nối với cơ sở dữ liệu oracle với C++
- 16. Làm thế nào để kết nối với nhiều cơ sở dữ liệu trong Hibernate
- 17. Làm cách nào để xóa cơ sở dữ liệu MySQL?
- 18. Làm cách nào để kết nối an toàn ứng dụng Backbone.js với cơ sở dữ liệu?
- 19. Làm cách nào để chuyển dữ liệu giữa 2 cơ sở dữ liệu MySQL?
- 20. Làm cách nào để kết nối với nhiều cơ sở dữ liệu bằng JPA?
- 21. Làm cách nào để kết nối với cơ sở dữ liệu SQLite bằng PHP?
- 22. Làm cách nào để kết nối với tệp cơ sở dữ liệu MDF?
- 23. Làm cách nào để kết nối với cơ sở dữ liệu hiện có trong ASP.NET MVC?
- 24. Kết nối với hai cơ sở dữ liệu
- 25. Điều kiện kết nối với cơ sở dữ liệu
- 26. kết nối có một cơ sở dữ liệu từ xa
- 27. Cách kết nối ứng dụng Android với cơ sở dữ liệu MySQL?
- 28. Kết nối tổng hợp với cơ sở dữ liệu Access
- 29. Cơ sở dữ liệu và kết nối
- 30. Cách sao chép bảng từ một cơ sở dữ liệu mysql sang cơ sở dữ liệu mysql khác
Các bình luận (;;' bỏ qua) trên dòng đầu tiên không phải là một phần bắt buộc của mã nguồn - nó đã được thêm vào trước phục vụ màu cú pháp của nguồn Clojure. – devstopfix
Bước 1 bây giờ là: git clone git: //github.com/richhickey/clojure-contrib.git –
Lưu ý rằng có thể bạn sẽ không thể kết nối trực tiếp với máy chủ từ xa, vì vậy bạn nên chuyển sang cổng chuyển tiếp một số cổng cục bộ ngẫu nhiên tới máy chủ bằng một cái gì đó như 'ssh -L 1234: localhost: 3306 user @ remoteserver'. Ngoài ra, hãy kiểm tra GNU Screen để làm cho nó dễ dàng hơn để đối phó với nhiều thiết bị đầu cuối. – konr