Чтобы использовать функциональные возможности базы данных, сначала загрузите файлы jdbc по следующему адресу: https://codeload.github.com/clojure/java.jdbc/zip/master.
Вы найдете zip-файл с драйверами, необходимыми для Clojure, чтобы иметь возможность подключаться к базам данных. После распаковки zip-файла обязательно добавьте разархивированное местоположение в путь к классам.
Основным файлом для подключения к базе данных является файл с именем jdbc.clj в папке clojure / java.
Коннектор clojure jdbc поддерживает широкий спектр баз данных, некоторые из которых перечислены ниже.
- H2Database
- оракул
- Microsoft SQL Server
- MySQL
- PostgreSQL
В нашем примере мы будем использовать MySQL DB в качестве примера.
Следующие операции возможны в Clojure в отношении баз данных.
Подключение к базе данных
Перед подключением к базе данных MySQL убедитесь в следующем:
-
Вы создали базу данных TESTDB.
-
Вы создали таблицу EMPLOYEE в TESTDB.
-
В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.
-
Идентификатор пользователя «testuser» и пароль «test123» установлены для доступа к TESTDB.
-
Убедитесь, что вы загрузили «файл jar mysql» и добавили этот файл в ваш путь к классам.
-
Вы прошли учебник по MySQL, чтобы понять основы MySQL .
Вы создали базу данных TESTDB.
Вы создали таблицу EMPLOYEE в TESTDB.
В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.
Идентификатор пользователя «testuser» и пароль «test123» установлены для доступа к TESTDB.
Убедитесь, что вы загрузили «файл jar mysql» и добавили этот файл в ваш путь к классам.
Вы прошли учебник по MySQL, чтобы понять основы MySQL .
Синтаксис
Ниже приведен синтаксис для создания соединения в Clojure.
(def connection_name { :subprotocol “protocol_name” :subname “Location of mysql DB” :user “username” :password “password” })
Параметры — «имя_соединения» — это имя, которое будет присвоено соединению. ‘subprotocol’ — это протокол, который будет использоваться для соединения. По умолчанию мы будем использовать протокол mysql. ‘subname’ — это URL для подключения к базе данных mysql вместе с именем базы данных. ‘user’ — это имя пользователя, используемое для подключения к базе данных. «пароль» — это пароль, который будет использоваться для подключения к базе данных.
Возвращаемое значение — это предоставит строку подключения, которая может быть использована в последующих операциях mysql.
В следующем примере показано, как подключиться к таблицам в информационной схеме и извлечь все данные из таблицы.
пример
(ns test.core (:require [clojure.java.jdbc :as sql])) (defn -main [] (def mysql-db { :subprotocol "mysql" :subname "//127.0.0.1:3306/information_schema" :user "root" :password "shakinstev"}) (println (sql/query mysql-db ["select table_name from tables"] :row-fn :table_name)))
Запрос данных
Запрос данных в любой базе данных означает получение некоторой полезной информации из базы данных. Как только соединение с базой данных установлено, вы готовы сделать запрос в эту базу данных. Ниже приводится синтаксис, с помощью которого можно запрашивать данные с помощью Clojure.
Синтаксис
clojure.java.jdbc/query dbconn ["query"] :row-fn :sequence
Параметры — ‘dbconn’ — это имя соединения, используемого для подключения к базе данных. ‘query’ — это строка запроса, используемая для извлечения данных из базы данных. ‘: sequence’ — это по умолчанию все строки данных, извлеченные из базы данных, и возвращается как последовательность. Затем можно выполнить необходимые операции над последовательностью, чтобы увидеть, какие данные были выбраны.
Возвращаемое значение — это вернет последовательность, в которой будут строки данных из операции запроса.
В следующем примере показано, как подключиться к таблице сотрудников и извлечь столбец first_name строк в таблице.
пример
(ns test.core (:require [clojure.java.jdbc :as sql])) (defn -main [] (def mysql-db { :subprotocol "mysql" :subname "//127.0.0.1:3306/testdb" :user "root" :password "shakinstev"}) (println (sql/query mysql-db ["select first_name from employee"] :row-fn :first_name)))
Из приведенного выше кода мы можем видеть, что
-
Запрос «select first_name from employee» передается в виде строки запроса.
-
: First_name — это последовательность, которая возвращается в результате операции выборки.
Запрос «select first_name from employee» передается в виде строки запроса.
: First_name — это последовательность, которая возвращается в результате операции выборки.
Если мы предположим, что в нашей базе данных есть только одна строка, в которой содержится значение first_name, заданное Джоном, то результатом будет вышеприведенная программа.
(John)
Вставка данных
Это необходимо, когда вы хотите создать свои записи в таблице базы данных. Ниже приводится синтаксис, с помощью которого данные могут быть вставлены с использованием Clojure. Это делается с помощью «вставить!» функция.
Синтаксис
clojure.java.jdbc/insert! :table_name {:column_namen columnvalue}
Параметры — ‘: table_name’ — это имя таблицы, в которую необходимо произвести вставку. «{: column_namen columnvalue}» — это карта всех имен и значений столбцов, которые необходимо добавить в виде строки в таблице.
Возвращаемое значение — это вернет ноль, если вставка сделана успешно.
В следующем примере показано, как вставить запись в таблицу employee в базе данных testdb.
пример
(ns test.core (:require [clojure.java.jdbc :as sql])) (defn -main [] (def mysql-db { :subprotocol "mysql" :subname "//127.0.0.1:3306/testdb" :user "root" :password "shakinstev"}) (sql/insert! mysql-db :employee {:first_name "John" :last_name "Mark" :sex "M" :age 30 :income 30}))
Если вы теперь проверите свою базу данных MySQL и таблицу employee, вы увидите, что приведенная выше строка будет успешно вставлена в таблицу.
Удаление данных
Строки могут быть удалены из таблицы с помощью «Удалить!» функция. Ниже приводится синтаксис того, как эта операция может быть выполнена.
Синтаксис
clojure.java.jdbc/delete! :table_name [condition]
Параметры — ‘: table_name’ — это имя таблицы, в которую необходимо произвести вставку. «условие» — это условие, используемое для определения, какую строку необходимо удалить из таблицы.
Возвращаемое значение — это вернет количество удаленных строк.
В следующем примере показано, как удалить запись из таблицы employee в базе данных testdb. В примере удаляется строка из таблицы на основе условия, что возраст равен 30.
пример
(ns test.core (:require [clojure.java.jdbc :as sql])) (defn -main [] (def mysql-db { :subprotocol "mysql" :subname "//127.0.0.1:3306/testdb" :user "root" :password "shakinstev"}) (println (sql/delete! mysql-db :employee ["age = ? " 30])))
Если у вас была запись, в которой строка с возрастом равным 30, эта строка будет удалена.
Обновление данных
Строки могут быть обновлены из таблицы с помощью «обновления!» функция. Ниже приводится синтаксис того, как эта операция может быть выполнена.
Синтаксис
clojure.java.jdbc/update! :table_name {setcondition} [condition]
Параметры — ‘: table_name’ — это имя таблицы, в которую необходимо произвести вставку. ‘setcondition’ — это столбец, который необходимо обновить, как указано в терминах карты. «условие» — это условие, которое используется для определения, какую строку необходимо удалить из таблицы.
Возвращаемое значение — это вернет количество обновленных строк.
В следующем примере показано, как удалить запись из таблицы employee в базе данных testdb. В примере обновляется строка из таблицы на основе условия, что возраст равен 30, и обновляется значение дохода до 40.
(ns test.core (:require [clojure.java.jdbc :as sql])) (defn -main [] (def mysql-db { :subprotocol "mysql" :subname "//127.0.0.1:3306/testdb" :user "root" :password "shakinstev"}) (println (sql/update! mysql-db :employee {:income 40} ["age = ? " 30])))
Если у вас есть запись, в которой строка с возрастом, равным значению 30, будет обновлена, в ней значение дохода будет равно 40.
операции
Транзакции — это механизмы, обеспечивающие согласованность данных. Транзакции имеют следующие четыре свойства —
-
Атомарность — либо транзакция завершена, либо ничего не происходит вообще.
-
Согласованность — транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.
-
Изоляция — промежуточные результаты транзакции не видны за пределами текущей транзакции.
-
Долговечность — после совершения транзакции последствия сохраняются даже после сбоя системы.
Атомарность — либо транзакция завершена, либо ничего не происходит вообще.
Согласованность — транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.
Изоляция — промежуточные результаты транзакции не видны за пределами текущей транзакции.
Долговечность — после совершения транзакции последствия сохраняются даже после сбоя системы.
пример
В следующем примере показано, как реализовать транзакции в Clojure. Любые операции, которые необходимо выполнить в транзакции, должны быть встроены в предложение with-dbtransaction .