Lua 操作数据库

2019-05-05 00:00|来源: 网路

Lua 数据库访问

本文主要为大家介绍 Lua 数据库的操作库:LuaSQL。他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。

本文为大家介绍MySQL的数据库连接。

LuaSQL 可以使用 LuaRocks 来安装可以根据需要安装你需要的数据库驱动。

LuaRocks 安装方法:

$ 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
$ lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require "socket"

Window 下安装 LuaRocks:https://github.com/keplerproject/luarocks/wiki/Installation-instructions-for-Windows

安装不同数据库驱动:

luarocks install luasql-sqlite3
luarocks install luasql-postgres
luarocks install luasql-mysql
luarocks install luasql-sqlite
luarocks install luasql-odbc

你也可以使用源码安装方式,Lua Github 源码地址:https://github.com/keplerproject/luasql

Lua 连接MySql 数据库:

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 %s\n", row.id, row.name)

    print(var)

    file:write(var)

    row = cur:fetch(row,"a")
end


file:close()  --关闭文件对象
conn:close()  --关闭数据库连接
env:close()   --关闭数据库环境

相关问答

更多
  • JAVA操作数据库[2022-06-24]

    java连数据库 说一下用的多的 jdbc吧 首先注册jdbc和相关数据库的驱动比如oracle数据库 Class.forName("oracle.jdbc.OracleDiver"); 创建连接 对应数据库的url url = "jbbc:oracle;thin:@localhot:1521:ora9i" ora9i是数据库的sid Connection conn = DriverManger.getConnection(url,username,pwd); 然后创建发射源 也就是通过发射源 向数据库传递 ...
  • 1、Servlet和JSP简介: Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP,Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序,而JSP(Java Server Page)则是一个页面, 由JSP容器负责执行. 2、Servlet和JSP的区别: Servlet以Java程序为主, 输出HTML代码时需要使用out.println函数,也就是说Java中内嵌HTML; 而JSP则以HTML页面为主,需要写 ...
  • 我需要一些用lua编写的开源图形库。 这样的事情不仅不存在,实际上也不可能写一个。 Lua运行时不提供对在Lua中实际显示图形所需的低级平台特定细节的访问。 您可以在Lua中编写图形例程,但它永远无法绘制到实际屏幕。 它可以绘制到文件或那种性质的东西。 但不是屏幕。 这意味着您将不得不使用某种非Lua库来至少显示图像。 但是,你也找不到其中之一,因为没有人愿意在Lua本身编写一个图形库。 没有意义; 它会非常慢。 将Cairo或OpenGL或其他一些本机代码库绑定到Lua会容易得多。 您可以获得与原生Lua ...
  • 你不能把表转换为lua中的数字。 你想要的是获取表格中的元素数量。 您可以使用最后一个元素点#来完成此操作。 此外,我强烈建议将您的Lua脚本与其余代码分开,这样更干净。 您的Lua脚本应如下所示: local first_key = redis.call('get',KEYS[1]) local second_key = redis.call('get',KEYS[2]) return #first_key * #second_key 编辑:误解了这个问题。 OP正确地指出他正在尝试将两个数字存储为字符 ...
  • Lua 5.3将 lua_pop 定义为 #define lua_pop(L,n) lua_settop(L, -(n)-1) 和lua_settop可以在这里看到; 它将用nil填充堆栈槽,因此值可以是gc'd。 所以它是带有arg 1的O(1)。 您可以读取O(1)中的每个值,并且N值的弹出值是O(N)。 所以,你的两种方法应该大致相同。 Re:读取O(1)中的值,函数index2addr将堆栈偏移量转换为地址。 Lua 5.3 defines lua_pop as #defin ...
  • 正如我对原始问题的评论中所提到的,我在我的C ++应用程序中包含了lua.hpp。 当Lua被编译为C库以来,这很有效,因为lua.hpp undos name mangling: lua.hpp: extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } 正如@EtanReisner所指出的,当使用Lua作为C ++库时,我不需要撤消名称修改。 所以解决方案是简单地包含实际的Lua头,而不是lua.hpp // U ...
  • LuaGRAPH库是一个绑定到GraphViz的Lua,可能适合您的需要。 特征 使用Lua语法元素(表,函数)定义图形 布局和渲染图 子图,节点和边的迭代器 设置并获取图形,节点和边的所有graphviz属性 为任何图形对象设置并获取用户定义的属性(甚至方法) The LuaGRAPH library is a Lua binding to GraphViz that might suit your needs. Features Define graphs using Lua syntax elemen ...
  • 它以不同的方式获取不同的数据:代码更改对象内部的数据。 struct Object { int val; }; void more_stuff(Object *the_data) { //the_data->val has 5 in it now. } void do_stuff(Object *the_data) { int old_val = the_data->val; the_data->val = 5; more_stuff(the_data); the_data->v ...
  • 在Lua 5.2中,标准luaopen_*函数不设置相应的全局变量。 为什么不复制和调整linit.c的代码或只调用luaL_openlibs ? 否则,做他们做的事情:为每个luaopen_*函数调用luaL_requiref 。 见http://www.lua.org/source/5.2/linit.c.html#luaL_openlibs 。 In Lua 5.2 the standard luaopen_* functions do not set the corresponding global ...
  • 通常可以使用SWIG快速(几乎)完全包装复杂的库API。 在这种情况下使用SWIG的一个优点是可以轻松构建基于SWIG的包装器,这些包装器可以使用包括Lua,Perl,Python,Ruby和Java等18种主要语言的库。 如果Lua是您首选(也可能是唯一)的关注点,那么我建议学习使用luaL_register()作为策略的核心来在C中构建Lua模块。以这种方式构建模块的一个优点是您可以保留所有您的函数在单个名称空间中没有任何开销。 您将需要创建一个与Lua C函数调用约定匹配的包装函数(就像您使用lua_ ...