Database Communication
This page provides real-world examples of how to use the shared SQLite database from Lua using the Database module
/// tip The database connection only needs to be initialized once, stays open for the entire runtime and is reused across queries for optimal performance ///
Open Database Connection
-- Provide a single file name searched/created for/in the saved directory
Database.Initialize("MyServerDB.sqlite")
-- OR
-- Provide a full path to your desired location
Database.Initialize("D:/UnrealServers/MyServerDB.sqlite")
Create a Database Table
local ok = Database.Execute([[
CREATE TABLE IF NOT EXISTS Players (
ID TEXT PRIMARY KEY,
Name TEXT NOT NULL,
Cash INTEGER DEFAULT 0,
CreatedAt INTEGER NOT NULL
)
]])
if not ok then
error("Failed to create Players table")
end
Insert/Update/Delete Data
-- INSERT
local ok = Database.Execute("INSERT INTO Players (ID, Name, Cash, CreatedAt) VALUES (?, ?, ?, ?)",
{ "player_123", "Joshua", 500, tostring(os.time()) }
)
if not ok then
print("Failed to insert player.")
end
-- UPDATE
local ok = Database.Execute("UPDATE Players SET Cash = ? WHERE ID = ?", { 750, "player_123" })
if not ok then
print("Failed to update player cash.")
end
-- DELETE
local ok = Database.Execute("DELETE FROM Players WHERE ID = ?", { "player_123" })
if not ok then
print("Failed to delete player.")
end
Fetching Data
local rows = Database.Select("SELECT Name, Cash FROM Players WHERE ID = ?",{ "player_123" })
if #rows > 0 then
local player = rows[1]
print("Player:", player.Name, "Cash:", player.Cash)
else
print("Player not found.")
end
local rows = Database.Select("SELECT Name, Cash FROM Players ORDER BY Cash DESC LIMIT 5")
for i, player in ipairs(rows) do
print(i .. ".", player.Name, "-", player.Cash)
end
Asynchronous Execution
Database.ExecuteAsync("INSERT INTO Players (ID, Name, Cash, CreatedAt) VALUES (?, ?, ?, ?)",
{ "player_async", "AsyncJoe", 300, os.time() },
function(success)
if not success then
print("Failed to insert async player")
end
end
)
Database.SelectAsync("SELECT Name, Cash FROM Players ORDER BY Cash DESC LIMIT 5", {},
function(rows)
for i, player in ipairs(rows) do
print(i .. ".", player.Name, "-", player.Cash)
end
end
)
Database Closure
Database.Close()