Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。(以上摘抄自菜鸟教程)

鉴于Lua的诸多优势,我想在接下来的开发中应用Lua去完成一些需要脚本实现的工作。本文将记录我在Mac上搭建Lua的开发环境搭建以及实现对mysql的数据库访问。

1. Lua安装

源码编译安装

1
2
3
4
5
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make macosx test
make install

由于mac的当前系统版本下,连root用户都无法在/usr目录下创建写文件,故需要到lua的Makefile文件中将所有需要创建到/usr目录下的文件改到本用户目录下,Makefile的部分配置信息如下:

1
2
3
4
5
6
7
INSTALL_TOP= /usr/local
INSTALL_BIN= $(INSTALL_TOP)/bin
INSTALL_INC= $(INSTALL_TOP)/include
INSTALL_LIB= $(INSTALL_TOP)/lib
INSTALL_MAN= $(INSTALL_TOP)/man/man1
INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V
INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V

将INSTALL_TOP的值改为~/任意目录

homebrew安装

1
brew install lua

mac下用这种方式安装肯定是最简单的,只是版本可能会稍微落后些

接下来我们创建一个 HelloWorld.lua 文件,代码如下:

1
print("Hello World!")

执行以下命令:

1
lua HelloWorld.lua

输出结果为:

1
Hello World!

2. Lua连接mysql

Lua 数据库的操作库:LuaSQL。它是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。

1
2
3
4
5
6
wget http://luarocks.org/releases/luarocks-2.2.1.tar.gz
tar zxpf luarocks-2.2.1.tar.gz
cd luarocks-2.2.1
./configure; sudo make bootstrap
sudo luarocks install luasocket
luarocks install luasql-mysql

以上步骤中,sudo luarocks install luasql-mysql这一步在mac中会出错,报找不到mysql.h文件,如果是linux上可以用apt-get install lua-sql-mysql来安装,mac下,笔者经过研究采用的方式是先安装一个mysql数据库,然后去github上下载luasql的源码,解压后,进入目录编译安装。具体操作如下

1
sudo make mysql

将src目录下ls_mysql.c里的#include “mysql.h”改成如下路径:

1

随后将Makefile文件里的install:下的配置信息改成如下路径:

1
2
3
install:
mkdir -p /users/shizhouyong/program/luasql
cp src/*.so /users/shizhouyong/program/luasql

最后

1
make install

通过以上方式安装后笔者发现只能在/users/shizhouyong/program/luasql目录下执行
附上:luasql源码的github地址

3. Lua 连接MySql 数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
luasql = require "luasql.mysql"
env = luasql.mysql()
--连接数据库
conn = env:connect("数据库名","用户名","密码","IP地址",端口)
--设置数据库的编码格式
conn:execute"SET NAMES UTF8"
--执行数据库操作
cur = conn:execute("select * from role")
row = cur:fetch({},"a")
--文件对象的创建
file = io.open("role.txt","w+");
while row do
var = string.format("%d %sn", row.id, row.name)
print(var)
file:write(var)
row = cur:fetch(row,"a")
end
file:close() --关闭文件对象
conn:close() --关闭数据库连接
env:close() --关闭数据库环境

通过以上方式安装后,笔者发现只能在/users/shizhouyong/program目录下执行引入luasql.mysql包的lua脚本,否则会报找不到mysql.so,具体原因笔者会持续研究。