原文链接:https://www.cnblogs.com/–xiaoyao–/p/6143365.html?utm_source=itdadao&utm_medium=referral
环境搭建
#mysql 安装
sudo apt-get install mysql-server mysql-client
# lua mysql 开发驱动安装
sudo apt-get install lua-sql-msyql-dev
使用案例
-- 打开相关对象
local mysqlDriver = require "luasql.mysql" -- 获取驱动对象driver
local env = mysqlDriver.mysql() -- 构建环境对象
local conn = env:connect("test", "root", "******") -- mysql 接连对象
-- 通过conn:execute执行sql语句,当执行非查询语句返回影响行和错误字符串, 当执行查询语句时返回光标对象和错误字符串
-- 执行非查询语句
local status, err = conn:execute([[insert into user values(NULL,"xuejian", "F")]])
-- 执行查询语句
local cursor, err = conn:execute([[select * from user]])
--获取下一行数据。
--[[如果fetch无参数调用,直接返回的数据表;如果是带table的参数,
则数据会先拷贝到table中,然后返回此table数据表,modestring有两种模式,
“n”返回结果中是数字索引,默认模式,“a”返回结果中是数字和字符的混杂模式。
n模式是select语句获取fields的index位置,a模式是这些field的名字
"重点强调一下, table参数一定是保存一下一row的数据,自身完成迭代"。
--]]
local row = cursor:fetch({}, 'a') -- 第一个参数放个表对象,用于获取值, 第二个参数表示存值方式 a -- 字典 n -- 数组
while row do
row = cursor:fetch(row, 'a') -- 当取完记录再取,cursor对象自动关闭并放回nil
end
-- 关闭相关对象
cursor:close()
conn:close()
env:close()
luasql = require "luasql.mysql"
--创建环境对象
env = luasql.mysql();
--连接数据库
--conn = env:connect("mydb","root","root","127.0.0.1",3306);
conn = env:connect("mydb","root","root");
print(env, conn);
--执行数据库操作
local status, err = conn:execute([[insert into table1(title, author, date) values("title1","author1", now())]]);
print(status,err);
--[[cursor object--]]
--A cursor object contains methods to retrieve data resulting
--from an executed statement
--cursor对象包含一些函数,这些函数可以获取执行sql语句得到的数据结果;
--cursor对象是执行conn:execute和conn:prepare返回值
local cursor, err = conn:execute([[select * from table1]]);
--文件对象的创建
file = io.open("data.txt","w+");
print("==============================================================");
local row = cursor:fetch({}, 'a');
while row do
var = string.format("%d %s %s %s\n", row.id, row.title, row.author, row.date);
print(var);
file:write(var);
row = cursor:fetch(row,"a");
end
file:close(); --关闭文件对象
cursor:close(); --关闭临时对象
conn:close(); --关闭数据库连接
env:close(); --关闭数据库环境
进入mysql,创建表
CREATE TABLE IF NOT EXISTS `table1`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(40) NOT NULL,
`date` DATETIME,
PRIMARY KEY ( `id` )
);
luasql官方教程
http://keplerproject.github.io/luasql/manual.html#mysql_extensions
Lua 文件 I/O
https://www.runoob.com/lua/lua-file-io.html
Lua I/O 库用于读取和处理文件。分为简单模式(和C一样)、完全模式。
简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。
完全模式(complete model) 使用外部的文件句柄来实现。它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法
简单模式在做一些简单的文件操作时较为合适。但是在进行一些高级的文件操作的时候,简单模式就显得力不从心。例如同时读取多个文件这样的操作,使用完全模式则较为合适。
打开文件操作语句如下:
file = io.open (filename [, mode])
mode 的值有:
简单模式
简单模式使用标准的 I/O 或使用一个当前输入文件和一个当前输出文件。
以下为 file.lua 文件代码,操作的文件为test.lua(如果没有你需要创建该文件),代码如下:
-- 以只读方式打开文件
file = io.open("test.lua", "r")
-- 设置默认输入文件为 test.lua
io.input(file)
-- 输出文件第一行
print(io.read())
-- 关闭打开的文件
io.close(file)
-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")
-- 设置默认输出文件为 test.lua
io.output(file)
-- 在文件最后一行添加 Lua 注释
io.write("-- test.lua 文件末尾注释")
-- 关闭打开的文件
io.close(file)
执行以上代码,你会发现,输出了 test.lua 文件的第一行信息,并在该文件最后一行添加了 lua 的注释。如我这边输出的是:
– test.lua 文件
在以上实例中我们使用了 io.“x” 方法,其中 io.read() 中我们没有带参数,参数可以是下表中的一个:
完全模式
通常我们需要在同一时间处理多个文件。我们需要使用 file:function_name 来代替 io.function_name 方法。以下实例演示了如何同时处理同一个文件:
-- 以只读方式打开文件
file = io.open("test.lua", "r")
-- 输出文件第一行
print(file:read())
-- 关闭打开的文件
file:close()
-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")
-- 在文件最后一行添加 Lua 注释
file:write("--test")
-- 关闭打开的文件
file:close()
执行以上代码,你会发现,输出了 test.lua 文件的第一行信息,并在该文件最后一行添加了 lua 的注释。如我这边输出的是:
– test.lua 文件
read 的参数与简单模式一致。
其他方法:
以下实例使用了 seek 方法,定位到文件倒数第 25 个位置并使用 read 方法的 *a 参数,即从当期位置(倒数第 25 个位置)读取整个文件。
实例
-- 以只读方式打开文件
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- 关闭打开的文件
file:close()
我这边输出的结果是:
st.lua 文件末尾–test
Lua 模块与包
https://www.runoob.com/lua/lua-modules-packages.html
Lua table(表)
https://www.runoob.com/lua/lua-tables.html
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。
Lua 面向对象
https://www.runoob.com/lua/lua-object-oriented.html
Lua 中面向对象
我们知道,对象由属性和方法组成。LUA中最基本的结构是table,所以需要用table来描述对象的属性。
lua 中的 function 可以用来表示方法。那么LUA中的类可以通过 table + function 模拟出来。
至于继承,可以通过 metetable 模拟出来(不推荐用,只模拟最基本的对象大部分实现够用了)。
Lua 中的表不仅在某种意义上是一种对象。像对象一样,表也有状态(成员变量);也有与对象的值独立的本性,特别是拥有两个不同值的对象(table)代表两个不同的对象;一个对象在不同的时候也可以有不同的值,但他始终是一个对象;与对象类似,表的生命周期与其由什么创建、在哪创建没有关系。对象有他们的成员函数,表也有: