Common Lisp 操作Mysql
博客专区 > 烟波 的博客 > 博客详情
Common Lisp 操作Mysql
烟波 发表于5年前
Common Lisp 操作Mysql
  • 发表于 5年前
  • 阅读 1213
  • 收藏 6
  • 点赞 1
  • 评论 9

标题:腾讯云 新注册用户域名抢购1元起>>>   

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数据库建立自己的应用程序了!

标签: Common Lisp CFFI cl-mysql
共有 人打赏支持
粉丝 21
博文 28
码字总数 165362
评论 (9)
liefeng
为什么不直接用lisp而要使用方言呢?
烟波

引用来自“liefeng”的评论

为什么不直接用lisp而要使用方言呢?
此问题从何而出?
兰穆达
你这不是直接用CFFI
烟波

引用来自“BlinkD”的评论

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

引用来自“BlinkD”的评论

你这不是直接用CFFI

引用来自“烟波”的评论

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

引用来自“BlinkD”的评论

你这不是直接用CFFI

引用来自“烟波”的评论

初学者,望赐教,

引用来自“BlinkD”的评论

看标题我以为你做了CFFI到mysql的绑定,文章内容确是使用cl-mysql库。我也是个Common LISP小白,求互粉,已加QQ。
还没到那个水平
xiao刀
博主 , 我也试过cl-mysql了 但是 select的时候 没数据还好 有数据就会返回 Exception_Access_Violation 访问冲突的错误
烟波

引用来自“xiao刀”的评论

博主 , 我也试过cl-mysql了 但是 select的时候 没数据还好 有数据就会返回 Exception_Access_Violation 访问冲突的错误
我又在windows和ubuntu下测试,没出现这个问题哦。 能不能再具体一点,这个错误貌似和mysql或者操作系统有关系,比如用其它语言调用一下看看状况是不是相同?
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的概念,感觉会好用点吧
×
烟波
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: