zoukankan      html  css  js  c++  java
  • lua简单操作sqlite3

    luasql模块支持sqlite3,可以完成最基本的数据库功能,不过官方文档上写得不是很详细。扫了下源代码,外加实验了下,得出了点经验。

    环境

    Windows XP,LuaForWindows

    代码

    require"luasql.sqlite3"
    
    function enumSimpleTable(t)
    
             print"-------------------"
    
             fork,v in pairs(t) do
    
                       print(k, " = ", v)
    
             end
    
             print"-------------------\n"
    
    end
    
    function rows(cur)
    
             returnfunction(cur)
    
                       localt = {}
    
                       if(nil~= cur:fetch(t, 'a')) then return t
    
                       elsereturn nil end
    
             end,cur
    
    end
    
    env = assert(luasql.sqlite3())
    
    db =assert(env:connect("test.db"))
    
     
    db:setautocommit(false)
    
    res = assert(db:execute [[CREATE TABLEpeople(name text, sex text)]])
    
    res = assert(db:execute [[INSERT INTOpeople VALUES('程序猿','男')]])
    
    res = assert(db:execute [[INSERT INTOpeople VALUES('程序猿老婆', '女')]])
    
    assert(db:commit())
    
     
    
    res = assert(db:execute [[SELECT * FROMpeople]])
    
    colnames = res:getcolnames()
    
    coltypes = res:getcoltypes()
    
    enumSimpleTable(colnames)
    
    enumSimpleTable(coltypes)
    
    for r in rows(res) do
        enumSimpleTable(r)
    end
    
    res:close()
    
    db:close()
    
    env:close()

    结论

    environment对象(数据库驱动)

    构造

        env = luasql.sqlite3()

    成员

        close()

            关闭环境。请先关闭所有connection对象。

    connection对象(数据库连接)

    构造

        con = env:connect(sqlite3_database_file_path)

    • env:环境
    • sqlite3_database_file_path:数据库路径字符串
    • con:数据库连接对象

    成员

        res = execute(sql_statement)

            执行sql语句

    • sql_statement:要执行的sql语句,一般用[[sql]]的字符串形式,因为sql语句中常含有引号等特殊字符
    • res:
      • 对于不返回记录集的sql语句(如CREATE,DELETE),res是一个数字,表示操作影响了多少记录。
      • 对于返回记录集的sql语句(如SELECT),res是一个cursor对象(记录集)

        setautocommit(bAuto)

    • bAuto
      • 设置为true时,rollback当前事务,并忽略错误
      • 设置为false时,开始一个新的事务

        commit()

            提交事务

        rollback()

            回滚事务

        close()

            关闭数据库连接,请先关闭所有的cursor对象

        rowed = getlastautoid()

            获取最近一次自动生成的sqlite的rowid字段值(对应sqlite3_last_insert_rowid())

    cursor对象

    构造

        con:execute(select_sql_statement)

    成员

        colnametable = getcolnames()

            以table形式返回记录集中每一列的列名

        coltypetable = getcoltypes()

            以table形式返回记录集中每一列的类型

        res = fetch([table[,modestring]])

            获取下一个记录集

    • table:如果指定了table,则会将数据复制到table中
    • modestring:可取值”n”或”a”,默认为”n”,
      • “n”:table中的key是数字
      • “a”:table中的key是字符串(列名)
    • res:如果未指定table,则返回记录,如果指定了table,则返回修改后的table;如果没有下一记录了,则返回nil

        close()

            关闭cursor对象
  • 相关阅读:
    Centos7安装vsftpd
    Centos7安装FTP突然无法登录
    关于limit_req和limit_conn的区别
    linux nginx大量TIME_WAIT的解决办法--转
    discuz过滤词语无效
    XMReport相关视频资料
    XMReport富文本编辑器上线啦!!! 小小莫_6ada
    mysql/mybatis insertBatch插入速度太慢了
    TCP学习笔记
    Apache Derby ij下面连接Embedded数据库
  • 原文地址:https://www.cnblogs.com/windtail/p/2623191.html
Copyright © 2011-2022 走看看