Guys,
Really sorry, I didn’t see this topic!!!
I have a file called settings.lua where I have all my globals and some functions to get/set them and load/save from database:
module(..., package.seeall)
---------------------------------------------------------
-- DATABASE
---------------------------------------------------------
require "sqlite3"
--
local dbPath = system.pathForFile("settings.db", system.DocumentsDirectory)
local db = sqlite3.open( dbPath )
--
db:exec [[CREATE TABLE IF NOT EXISTS tb\_settings (
name VARCHAR(50) PRIMARY KEY,
type VARCHAR(1),
value\_string TEXT,
value\_number NUMBER);]]
--
local function onSystemEvent( event )
if( event.type == "applicationExit" ) then
db:close()
end
end
---------------------------------------------------------
-- VARIABLES
---------------------------------------------------------
local tabVars = {}
--
tabVars["gameTime"] = 300
---------------------------------------------------------
-- FUNCTIONS
---------------------------------------------------------
-- GET
function settings:getVar ( pVarName )
return tabVars[pVarName]
end
-- SET
function settings:setVar ( pVarName, pVarValue )
tabVars[pVarName] = pVarValue
end
-- LOAD
function settings:loadVar( pVarName )
for row in db:nrows("SELECT \* FROM tb\_settings WHERE name = '" .. string.upper(pVarName) .. "'") do
if row.type == "N" then
return tonumber(row.value\_number)
else
return tostring(row.value\_string)
end
end
return nil
end
-- SAVE
function settings:saveVar( pVarName, pVarValue )
--
if type(pVarValue) == "nil" then
pVarValue = tabVars[pVarName]
else
settings:setVar ( pVarName, pVarValue )
end
--
local vVarType
--
if type(pVarValue) == "number" then
vVarType = 'N'
elseif type(pVarValue) == "string" then
vVarType = 'C'
else
return true
end
--
for row in db:nrows("SELECT count(\*) as cont FROM tb\_settings WHERE name = '" .. string.upper(pVarName) .. "'") do
--
if row.cont \> 0 then
if vVarType == "N" then
db:exec ("UPDATE tb\_settings SET type = 'N', value\_number = " .. pVarValue .. " WHERE name = '" .. string.upper(pVarName) .. "';")
else
db:exec ("UPDATE tb\_settings SET type = 'C', value\_string = '" .. pVarValue .. " WHERE name = '" .. string.upper(pVarName) .. "';")
end
else
if vVarType == "N" then
db:exec ("INSERT INTO tb\_settings ( name, type, value\_number) VALUES ('" .. pVarName .. "','N'," .. string.upper(pVarName) .. ");")
else
db:exec ("INSERT INTO tb\_settings ( name, type, value\_string) VALUES ('" .. pVarName .. "','C','" .. string.upper(pVarName) .. "');")
end
end
end
end
To use it is simple:
settings:setVar("gameTime",500)
local gameTime = settings:getVar("gameTime")
--
settings:saveVar("gameTime",1000)
gameTime = settings:loadVar("gameTime")
- get/set functions works only at runtime
- save/load functions stores the variables at the SQLite database [import]uid: 8556 topic_id: 2664 reply_id: 18675[/import]