Clojure在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
[更多]
显示目录

数据库



数据库

为了使用数据库的功能,请确保首先从以下网址下载JDBC文件 - https://codeload.github.com/clojure/java.jdbc/zip/master

您会发现一个zip文件,它有必要的驱动程序,Clojure有能力连接到数据库。提取zip文件后,请确保将解压缩的位置添加到类路径中。

数据库连接的主文件位于clojure / java中的称为jdbc.clj的文件。

clojure jdbc连接器支持多种的数据库,其中一些如下。

  • H2数据库
  • 甲骨文

  • Microsoft SQL服务器

  • 的MySQL
  • PostgreSQL的

在我们的示例中,我们将使用MySQL DB作为示例。

在Clojure中有关数据库的以下操作是可能的。

数据库连接

在连接到MySQL数据库之前,请确保以下内容

  • 您已创建数据库TESTDB。
  • 您在TESTDB中创造了一个表EMPLOYEE。
  • 此表格包含FIRST_NAME,LAST_NAME,AGE,SEX和INCOME串。
  • 用户ID“ testuser”和密码“ test123”设置为访问TESTDB。
  • 确保已下载“ mysql jar文件”,将该文件添加到类路径。
  • 你已经通过MySQL教程来了解MySQL基础。

语法

以下是在Clojure中创建连接的语法。

(def connection_name {
   :subprotocol “protocol_name”
   :subname “Location of mysql DB”
   :user “username” :password “password” })

参数 -'connection_name'是要给连接的名称。'subprotocol'是用于连接的协议。默认情况下我们将使用mysql协议。'subname'是连接到mysql数据库的URL以及数据库名称。'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'是用于连接到数据库的连接的名称。 '查询'是用于从数据库提取数据的查询字符串。 ':序列'默认情况下从数据库获取的所有数据行,并作为序列返回。然后可以对序列执行必要的操作,以查看已提取了某种数据。

返回值 -这将返回一个序列,并具有来自查询操作的数据行。

以下示例显示如何连接到employee表并获取表中行的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)))

从上面的代码,我们可以看到,

  • 查询“从员工中选择名字”作为查询字符串传递。

  • first_name是作为提取操作结果返回的序列。

如果我们假设在我们的数据库中只有一行包含first_name变量John,则以下将是上述程序的输出。

(John)

插入数据

是是使用Clojure可以插入数据的语法。这是通过使用'insert!'函数完成的。

语法

clojure.java.jdbc/insert!
   :table_name {:column_namen columnvalue}

参数 - ':表名'是需要插入的表的名称'{:column_namen columnvalue}'是所有列名称和值的映射,需要在表中作为一行添加。

返回值 -如果插入成功,这将返回nil。

以下示例显示如何将记录插入到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表,您将看到上面的行将成功插入表中。

删除数据

可以使用'delete!'函数从表中删除行。 以下是如何执行此操作的语法。

语法

clojure.java.jdbc/delete!
   :table_name [condition]

参数 -':table_name'是需要插入的表的名称。 'condition'是用于确定需要从表中删除哪一行的条件。

返回值 -这将返回删除的行数。

以下示例显示如何从testdb数据库中的employee表中删除记录。 示例根据年龄等于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的行,则该行将被删除。

更新数据

可以使用'update!'函数从表中更新行。 以下是如何执行此操作的语法。

语法

clojure.java.jdbc/update!
   :table_name
{setcondition}
[condition]

参数 - ':table_name'是需要插入的表的名称。 'setcondition'是需要根据映射提到的更新的列。 'condition'是用于确定需要从表中删除哪一行的条件。

返回值 -这将返回更新的行数。

以下示例显示如何从testdb数据库中的employee表中删除记录。 该示例根据年龄等于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'子句中。

(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/with-db-transaction [t-con mysql-db]
      (sql/update! t-con
         :employee
         {:income 40}
         ["age = ? " 30])))

由JSRUN为你提供的Clojure在线运行、在线编译工具
        JSRUN提供的Clojure在线运行,Clojure 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入: