文档章节

Common Lisp 操作Mysql

烟波
 烟波
发布于 2013/05/14 13:23
字数 418
阅读 1265
收藏 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
博文 31
码字总数 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
1K
5
Common Lisp 和 Cocoa 结合起来编写 APP 的例子--代码中设置加载路径

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

FreeBlues
2013/06/06
0
2

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
50分钟前
1
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
53分钟前
1
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
1
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
1
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部