我可以使用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
答案 0 :(得分:0)
在一段时间遇到同样的问题之后才弄明白。 你必须替换这一行
local sql = [[delete from projects WHERE ID = ']]..id..[[';]]
db:exec(sql)
确保id是一个数字,否则只需通过在第一行之前添加它来使其成为数字:
id=id*1
答案 1 :(得分:0)
原因是您的模拟器中的system.DocumentsDirectory文件已被读取,但此文件未包含在您的设备系统中.DocumentsDirectory。当您的设备上运行该应用时,您必须再次创建此文件。