Учебники

Clojure – Базы данных

Чтобы использовать функциональные возможности базы данных, сначала загрузите файлы 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 .