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對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM