Clojure 学习入门(7)- 连接mysql
首先,配置你的MySQL数据库,创建数据库、表、数据。
其次,在和MySQL的操作中,我们需要两个库,一个是clojure.contrib,另外一个是mysql-connector-Java-xxx.jar。为了管理和配置这两个库,我们需要配置一下project.clj文件,在depedencies中加上两条:org.clojure/clojure-contrib “1.2.0” 和 mysql/mysql-connector-java “5.1.6”。这样运行 lein deps,就会自动下载并且安装到Leiningen dependencies lib目录下。
接着,在需要使用sql库的地方要导入这些库
在ns宏中加载如下内容:(:use [clojure.contrib.sql :as sql :only ()]),这样在本文件中就可以直接使用sql作为前缀。需要主意的是,虽然我们并没有直接使用到mysql-connector-java,但是如果在lib目录下没有该文件,就会报错没有mysql的driver。
配置上两条之后,就可以进行sql连接了。
首先要定义一个database specification,这是一个map,几个必须配置的key包括了:classname, subprotocol, subname, user, password。
(
def
db {:classname
"com.mysql.jdbc.Driver"
:subprotocol
"mysql"
:subname
"//127.0.0.1:3306/test"
:user
"root"
:password
"pass"
})
|
这个db-spec在后面几乎所有的sql操作都是需要的。
接下来我们主要描述几个常用API的格式,具体的内容可以参考手册。
1,新建表
sql/create-table :table-name [:key :type “”] [:key :type “”])
(defn create
-
users []
(sql
/
create
-
table
:user
[:
id
:integer
"PRIMARY KEY"
"AUTO_INCREMENT"
]
[:fname
"varchar(25)"
]))
|
2, 插入数据
两个api,一个是insert-rows,一个是insert-values。insert-rows需要形成一个完整的行数据插入到表中,insert-values可以按照key来插入值。
(defn insert
-
user [fname]
(sql
/
insert
-
values :users [:fname] [fname]))
|
使用insert-values可以利用primary-key的auto_increment的属性
(defn insert
-
rows
[]
(sql
/
insert
-
rows :user [
1
"Tim"
] [
2
"Tom"
]))
|
3,丢弃表
(defn drop
-
user
[]
(
try
(sql
/
drop
-
table :fruit)
(catch Exception _)))
|
4, with-query-results 选择查询的数据
with-query-results 类似于 let 语句,会将查询结果绑定到rs上,rs是一个map构成的sequence。
(sql
/
with
-
query
-
results rs [
"select * from user"
]
(dorun (
map
#(println %) rs)))
|
5, 更新表
update-values 用来更新表的内容,使用该函数需要指定查询条件,如下图所示
(defn update
-
user [
id
attribute
-
map
]
(sql
/
update
-
values :user [
"id=?"
id
] attribute
-
map
))
|
6, 删除行
(sql
/
delete
-
rows :user [
"id=?"
id
])
|
7,SQL准备
clojure支持由用户输入构造sql语句,利用的是sql prepared语句,略
8. 示例
创建表 fruit,并插入两条记录,然后条件查询和全部查询
1) 在project.clj 中,添加sql依赖:
2) mysql.cli 代码
运行结果:
24
{:name Apple, :appearance rosy, :cost 24, :grade 1.2}
{:name Orange, :appearance round, :cost 49, :grade nil}
nil
创建的数据库表内容:
注:所有的sql操作都需要在with-connection宏下包裹着
参考推荐:
相关文章
- MySQL完成事务: COMMIT 语句实现(mysql提交事务命令)
- 一步步学习使用易语言写MySQL语句(易语言写mysql)
- 测试MySQL数据库连接:一步一步前进(测试mysql数据库连接)
- PDO连接MySQL:快速实现数据访问(pdo连接mysql)
- MySQL连接串编程:用C快速实现(mysql连接串c)
- 精通MySQL二级考试:一路向前!(mysql二级考试)
- MySQL连接速度慢:调优指南(mysql连接速度慢)
- MySQL表连接中索引的优化(mysql表连接索引)
- 连接WDCP简易上手:远程MySQL连接指南(wdcp远程mysql)
- 【安卓系统如何访问MySQL数据库】(安卓读取mysql数据库)
- MySQL ODBC连接:教你一步步搭建简单的连接!(mysql odbc连接)
- MySQL 高效插入百万条数据(mysql插入百万数据)
- MySQL查看表结构:一步到位(mysql查看创建表)
- MySQL 事务: 开启新的一页(mysql事务开启)
- 学习MySQL如何在数据库中修改信息(mysql中修改信息)
- MySQL中使用SSH的安全连接方式(mysql中ssh)
- MySQL数据取取慢C程序的一种体会(c mysql 取数据慢)
- CE5直接连接MySQL,极大简化操作流程(ce5直接连mysql)
- 怎样在cmd中连接MySQL数据库(cmd里怎么进mysql)
- Clion使用MySQL连接数据库的常用方法(clion连接mysql)
- MySQL全文索引查询,快速精准搜索数据库(mysql中全文索引查询)
- MySQL三表联接高效查询数据的方法(mysql 三张表连接)
- 深入浅出如何用C语言连接MySQL数据库(mysql_,c语言)
- 使用yum轻松下载MySQL数据库安装包(mysql yum下载)
- MySQL不允许屏蔽数据库操作中的常见错误(mysql 不允许)