lua之mysql编程


原文链接: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)代表两个不同的对象;一个对象在不同的时候也可以有不同的值,但他始终是一个对象;与对象类似,表的生命周期与其由什么创建、在哪创建没有关系。对象有他们的成员函数,表也有:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值