Lua - SQLite3没有在其数据库中插入行

时间:2013-04-09 00:03:57

标签: database sqlite calendar lua corona

我正在尝试为Android手机构建费用应用,我需要一种方法来显示费用。该计划(我目前的步骤)是允许用户查看他们的费用。我想要显示一个类似日历的屏幕,如果一天至少有一笔费用,那么为按钮使用不同的颜色。

我的问题是在sqlite3表中插入信息。这是我的代码:

require "sqlite3"

--create path
local path = system.pathForFile("expenses.sqlite", system.DocumentsDirectory )
file = io.open( path, "r" )
if( file == nil )then           
    -- Doesn't Already Exist, So Copy it In From Resource Directory                          
    pathSource = system.pathForFile( "expenses.sqlite", system.ResourceDirectory )  
    fileSource = io.open( pathSource, "r" ) 
    contentsSource = fileSource:read( "*a" )                                  
    --Write Destination File in Documents Directory                                  
    pathDest = system.pathForFile( "expenses.sqlite", system.DocumentsDirectory )                 
    fileDest = io.open( pathDest, "w" )                 
    fileDest:write( contentsSource )                 
     -- Done                      
    io.close( fileSource )        
    io.close( fileDest )         
end
db = sqlite3.open( path )

--setup the table if it doesn't exist
local tableSetup = [[CREATE TABLE IF NOT EXISTS expenses (id INTEGER PRIMARY KEY, amount, description, year, month, day);]]
db:exec(tableSetup)
local tableFill = [[INSERT INTO expenses VALUES (NULL,']] .. 15 .. [[',']] .. "Groceries" .. [[',']] .. 2013 .. [[',']] .. 4 .. [[',']] .. 8 ..[[');]]
db:exec(tableFill)

for row in db:nrows("SELECT * FROM expenses") do
        print("hi")
        if row.year == dateTable[i].year and row.month == dateTable[i].month and row.day == dateTable[i].day then
            flag = dateTabel[i].day
        end
end

我到处看看我是否使用了错误的sqlite3命令错误,因为我对它不是很熟悉,但我尝试了所有我发现的东西并没有用。 print("hi")  line没有执行,因此告诉我表中没有行。

另外,如果我说db:nrows("SELECT year, month, day FROM expenses"),sqlite3会给我一个错误,说明没有年级列。我的总体猜测是我没有正确地将信息插入表中,但我已经尝试了我能想到的一切。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我发现当前版本的sqlite3和我在计算机上的版本存在问题。无论如何,我改变了几行,它完美无缺。我更改了select语句和for循环。

        --sqlite statement
        local check = "SELECT DISTINCT year, month, day FROM expenses WHERE year = '"..dateTable[i].year.."' AND month = '"..dateTable[i].month.."' AND day = '"..dateTable[i].day.."'"

        --check if there is at least one expense for a given day
        --if there isn't one, the for loop won't execute
        for row in db:nrows(check) do
            flag = row.day
        end

然后,如果日期数等于标志变量,我会继续创建一个颜色不同的按钮。

这都在另一个for循环中,它创建了每个dateTable[i]