文档章节

Common Lisp 操作Mysql

烟波
 烟波
发布于 2013/05/14 13:23
字数 418
阅读 1247
收藏 6

Common Lisp 通过CFFI可以调用其它语言的接口,如此,Common Lisp可以快速开发各种应用程序,本文将讲述在ubuntu系统下的一个简单的Common Lisp与mysql交互的实例。

准备

  • 安装CFFI

sudo apt-get install cl-cffi
  • 安装CL-MYSQL

sudo apt-get install cl-sql-mysql
  • 安装MYSQL

sudo apt-get install mysql-server
  • 安装quicklisp

wget http://beta.quicklisp.org/quicklisp.lisp

开始

启动slime或sbcl(本例使用slime).

进入slime:

M+x slime

slime下加载quicklisp:


CL-USER> (load "quicklisp.lisp")  
CL-USER> (quicklisp-quickstart:install)
CL-USER> (ql:add-to-init-file)

加载cffi和cl-mysql:

CL-USER> (ql:quickload "cffi") 

CL-USER> (ql:quickload "cl-mysl")

定义试验用的mysql操作包:

(defpackage :com.casic.mysql-oper
  (:use :common-lisp :cl-mysql :cl-mysql-system))

#<PACKAGE "COM.CASIC.MYSQL-OPER">

(注:本实例涉及到的mysql操作分别包含于cl-mysql包和cl-mysql-system包内,为避免经常性地切换包,建立一包含以上两包的自定义包mysql-oper)。

切换到自定义包:

CL-USER> (in-package :com.casic.mysql-oper)

#<PACKAGE "COM.CASIC.MYSQL-OPER">

链接mysql数据库:

MYSQL-OPER> (connect :host "localhost" :user "root" :password "")

#<CONNECTION-POOL {BF51E81}>

进入现有数据库test:

MYSQL-OPER> (query "use test")

(((0) NIL))

创建新表person_info:

MYSQL-OPER> (query "create table person_info\(id int\)")

(((0) NIL))

插入数据:

MYSQL-OPER> (query "create table person-info\(id int\)")

(((1) NIL))
也可以处理multi-statements,多语句:
MYSQL-OPER> (query "insert into person_info values \(2\);insert into person_info 
               values \(3\);insert into person_info values \(4\)")

(((1) NIL) ((1) NIL) ((1) NIL))

查询数据:

MYSQL-OPER> (query "select * from person_info")

((((1) (2) (3) (4)) (("id" :LONG 32768))))
更新数据:
MYSQK-OPER> (query "update person_info set id=6 where id=4")

(((1) NIL))

MYSQL-OPER> (query "select * from person_info")

((((1) (2) (3) (5)) (("id" "LONG 32768))
删除数据:
MYSQL-OPER> (query "delete from person_info where id=5")

(((1) NIL))
MYSQL-OPER> (query "select * from person_info")

((((1) (2) (3)) (("id" :LONG 32768))

至此,Common Lisp通过cffi和cl-mysql操作mysql数据库的基本功能完成。您可以像使用php一样操作mysql数据库建立自己的应用程序了!

© 著作权归作者所有

共有 人打赏支持
烟波
粉丝 23
博文 30
码字总数 164649
作品 0
深圳
程序员
加载中

评论(9)

xiao刀
xiao刀

引用来自“xiao刀”的评论

博主 , 我也试过cl-mysql了 但是 select的时候 没数据还好 有数据就会返回 Exception_Access_Violation 访问冲突的错误

引用来自“烟波”的评论

我又在windows和ubuntu下测试,没出现这个问题哦。 能不能再具体一点,这个错误貌似和mysql或者操作系统有关系,比如用其它语言调用一下看看状况是不是相同?
之后我又测了下,select单列是没有问题的 (如“select id from user”),但是只要“select * from user ” 就会报上述错误 ,最后没办法试了下 cl-sql 的odbc模式 这个是没有问题的,而且cl-sql 有orm的概念,感觉会好用点吧
烟波
烟波

引用来自“xiao刀”的评论

博主 , 我也试过cl-mysql了 但是 select的时候 没数据还好 有数据就会返回 Exception_Access_Violation 访问冲突的错误
我又在windows和ubuntu下测试,没出现这个问题哦。 能不能再具体一点,这个错误貌似和mysql或者操作系统有关系,比如用其它语言调用一下看看状况是不是相同?
xiao刀
xiao刀
博主 , 我也试过cl-mysql了 但是 select的时候 没数据还好 有数据就会返回 Exception_Access_Violation 访问冲突的错误
烟波
烟波

引用来自“BlinkD”的评论

你这不是直接用CFFI

引用来自“烟波”的评论

初学者,望赐教,

引用来自“BlinkD”的评论

看标题我以为你做了CFFI到mysql的绑定,文章内容确是使用cl-mysql库。我也是个Common LISP小白,求互粉,已加QQ。
还没到那个水平
兰穆达
兰穆达

引用来自“BlinkD”的评论

你这不是直接用CFFI

引用来自“烟波”的评论

初学者,望赐教,
看标题我以为你做了CFFI到mysql的绑定,文章内容确是使用cl-mysql库。我也是个Common LISP小白,求互粉,已加QQ。
烟波
烟波

引用来自“BlinkD”的评论

你这不是直接用CFFI
初学者,望赐教,
兰穆达
兰穆达
你这不是直接用CFFI
烟波
烟波

引用来自“liefeng”的评论

为什么不直接用lisp而要使用方言呢?
此问题从何而出?
liefeng
liefeng
为什么不直接用lisp而要使用方言呢?
common lisp 利用cffi 操作mysql

利用clisp的管理工具 quicklisp 安装加载 cffi 和 cl-mysql (ql:quickload :cffi) (ql:quickload :cl-mysql) 连接 (connect :host"127.0.0.1":user"root":password"") (query"use test") 这样......

铅笔777
2013/11/16
0
0
Common Lisp 和 Scheme 的函数命名空间不同

最近在 <> 看到 Common Lisp 和 Scheme 的不同: 1. 在Common Lisp眼中,一个符号的symbol-value和symbol-function是不一样的,而Scheme 对两者不作区分。在Scheme里面,变量只有唯一对应的值...

沙枣
2013/08/18
1K
4
Common Lisp菜鸟指南(译)

Common Lisp菜鸟指南(译) 原文见:http://ghostopera.org/blog/2012/06/24/the-newbie-guide-to-common-lisp/ 译文自:http://reverland.org/Tech/2012/06/26/common-lisp/ 渣翻译,见谅。......

yyliu
2012/06/27
0
0
Clasp 0.4 发布,Common Lisp 的实现

Clasp 0.4 发布,此版本是重大版本,包括一个全新的编译器,比之前生成代码的速度快 200 倍,同时还有大量 bug 修复,更完整的 Common Lisp 实现和 C++ 互操作。 下载 Clasp 0.4 新特性: Cl...

oschina
2015/11/22
991
5
Common Lisp 和 Cocoa 结合起来编写 APP 的例子--代码中设置加载路径

Common Lisp 和 Cocoa 结合起来编写 APP 的例子--代码中设置加载路径 话说最近越来越觉得 Objective-C 的代码太繁琐了, 但是在 OSX 下写程序又离不开苹果的框架,于是就希望能把苹果 Cocoa 提...

FreeBlues
2013/06/06
0
2

没有更多内容

加载失败,请刷新页面

加载更多

计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
1
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
1
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
3
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
3
0
【Centos】在nginx服务器中配置php和mysql

接上一章《【Centos】利用Vultr服务器和namesilo布网》(https://my.oschina.net/u/3776619/blog/2051986),在Centos中配置好nginx,并在iptables中开启了80端口,和为了远程mysql操作方便开...

yongh701
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部