使用Corona SDK模拟器向sqllite数据库插入数据。

我可以使用 Corona SDK 模拟器查询 SQLlite 数据库中的数据,但无法插入或删除数据。我正在运行最新的 Corona SDK 公共版本。这是代码,编译没有问题,但是插入命令根本不起作用。这是 main.lua 的代码:

local sqlite3 = require "sqlite3"

local function setUpDatabase(dbName)

local path = system.pathForFile( dbName, system.DocumentsDirectory )
local file = io.open( path, "r" )

if ( file == nil ) then
    -- copy the database file if doesn't exist
    local pathSource     = system.pathForFile( dbName, system.ResourceDirectory )
    local fileSource     = io.open( pathSource, "r" )
    local contentsSource = fileSource:read( "*a" )

    local pathDest = system.pathForFile( dbName, system.DocumentsDirectory )
    local fileDest = io.open( pathDest, "w" )
    fileDest:write( contentsSource )

    io.close( fileSource )
    io.close( fileDest )
end

local gameDB = system.pathForFile(dbName, system.DocumentsDirectory)
local dbNew = sqlite3.open( gameDB )

return dbNew

end

function loadData()
    local sql = "select * from projects"
    local projects = {}

    for a in db:nrows(sql) do
        projects[#projects+1] =
        {
        id = a.id,
        name = a.name,
        category = a.category,
        rating = a.rating
        }
    end

    return projects
end

function insertData(n, c, r)
    local sql = "insert into projects (name, category, rating) values ('" .. n .. "', '" .. c .. "', " .. r .. ")"
   db:exec(sql)
end

function deleteData(id)
    local sql = "delete from projects where id = " .. tostring(id)
    db:exec(sql)
end

function updateData(id, col, v)
    local sql = "update projects set " .. col .. " = '" .. v .. "' where id = " .. tostring(id)
    db:exec(sql)
end

db = setUpDatabase("mydatabase.sqlite")
insertData("Horse Crazy", "Game", 2)

deleteData(3)
--updateData(4, "name", "Ralph")
--updateData(4, "category", "Dog")
--updateData(4, "rating", 4)

local data = loadData()

for x = 1, #data do
    print (data[x].id, data[x].name, data[x].category, data[x].rating)
end
点赞
用户88888888
用户88888888

刚刚发现,遇到同样的问题有一段时间了。 你必须替换这一行

local sql = [[delete from projects WHERE ID = ']]..id..[[';]]
db:exec(sql)

确保id是一个数字,否则只需在第一行前添加以下内容即可将其变为一个数字:

id=id*1
2014-12-10 18:39:33
用户88888888
用户88888888

原文:

The reason is system.DocumentsDirectory files in your simulator are read, but this files are not included in your device system.DocumentsDirectory. You have to create this file again when the app is running on your device.

翻译:

原因是您模拟器中的 system.DocumentsDirectory 文件可以被读取,但是这些文件并没有包含在您的设备 system.DocumentsDirectory 中。因此在您的设备上运行该应用程序时,您必须重新创建此文件。

2015-01-21 20:15:09