文档章节

Common Lisp 操作Mysql

烟波
 烟波
发布于 2013/05/14 13:23
字数 418
阅读 1228
收藏 6
点赞 1
评论 9

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
博文 29
码字总数 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

Common Lisp 和 Scheme 的函数命名空间不同

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

沙枣 ⋅ 2013/08/18 ⋅ 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

Clasp 0.4 发布,Common Lisp 的实现

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

oschina ⋅ 2015/11/22 ⋅ 5

GCL笔记01-LISP基础知识

LISP两大方言系:Common Lisp以及Scheme Lisp(以下简称cl与scheme),之所以说是方言系,是因为LISP语言具有很高的灵活性,语法很容易转化成另一种形态,每一个语法系都有众多的版本实现。 ...

兰穆达 ⋅ 2012/05/23 ⋅ 2

Common Lisp 和 Cocoa 结合起来编写 APP 的例子--代码中设置加载路径

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

FreeBlues ⋅ 2013/06/06 ⋅ 2

公用外部函数接口——CFFI

译自:http://common-lisp.net/project/cffi/ CFFI是Common Foreign Function Interface的简称。 简介 CFFI,即公用外部函数接口,号称是Common Lisp的一个轻便的外部函数接口。CFFI库由一个...

烟波 ⋅ 2013/05/07 ⋅ 1

11大类编程语言功能比较表(信息图)

导读:有程序员的地方就会有因为对编程语言的探讨而引发的战争(例如Linux之父Linus Torvalds炮轰C++ 一无是处,认为C++既无助于简化,以实际用于进行原型化或者简单的GUI编程,又不是像C那样...

sevens2008 ⋅ 2012/01/31 ⋅ 12

如何查看 Common Lisp 的标准函数(这么叫不太准确,规范的名称似乎是操作符 Symb...

如何查看 Common Lisp 的标准函数(这么叫不太准确,规范的名称似乎是操作符 Symbol ) 对于初学者来说,学习使用 Lisp 有一点很不习惯的地方就是不知道怎么查帮助,比如想了解下 Lisp 有哪些...

FreeBlues ⋅ 2013/01/26 ⋅ 0

Common Lisp学习资源整理

Lisp Hackers: Interviews with 100x More Productive Programmers Posted on June 26th, 2013 Lisp Hackers: Interviews with 100x More Productive Programmers, by Vsevolod Dyomkin, is ......

戎码半生 ⋅ 2017/01/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 18分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 28分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 46分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 54分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部