Сохранение данных в SQL Lite (пример)
-
В этом примере CE собирает статистику подключенного процесса присваивая рейтинг. Чем чаще процесс открыт, тем выше его рейтинг.
c=createSQLite3Connection() c.DatabaseName = 'C:\\VPProjects.sqllite' c.Connected=true t=createSQLTransaction() t.SQLConnection=c t.Active=true tn=c.getTableNames() if #tn==0 then print("empty") c.ExecuteDirect([[ CREATE TABLE something ( 'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 'processname' char(256) NOT NULL, 'rating' INTEGER); ]]) tn=c.getTableNames() if #tn==0 then error('no table created') end end print("tables:") local hassomething=false local i for i=1,#tn do print(tn[i]) if tn[i]=='something' then hassomething=true end end if hassomething then pn=process if (pn==nil) or (p=='nil') then pn='no process' end --check if pn is in the table, if so, increment rating, else add it q=createSQLQuery() q.SQLConnection=c q.SQLTransaction=t q.SQL.Text=string.format([[ Select * from something where processname='%s' ]],pn) --not secure, I know, just an example q.Active=true if q.RecordCount>0 then print("In the list") fields=q.Fields print("fieldcount="..fields.Count) local id=q.FieldByName('id').asInteger print("id="..id) local rating=q.FieldByName('rating') print("rating="..rating.asInteger) q.Active=false q.StatementType='stUpdate' q.SQL.Text=string.format([[update something set rating=rating+1 where id=%d]], id) q.ExecSQL() else print("Not yet in the list") c.ExecuteDirect(string.format([[insert into something(processname,rating) values('%s',1)]],pn)) end q.Active=false q.StatementType='stSelect' q.SQL.Text=[[select * from something]] q.Active=true count=1 print(string.format("RecordCount=%d", q.RecordCount)) while not q.EOF do print("line "..count) local i for i=0, q.Fields.Count-1 do print(string.format(" %s = %s", q.Fields[i].FieldName, q.Fields[i].Value)) end q.next() count=count+1 end q.Active=false q.destroy() else error("something doesn't exist") end t.Commit() t.Active=false c.Connected=false t.destroy() c.destroy()
Для чего можно использовать базы данных?
- для хранения большого количества связанных данных. Например, это хранение данных анимаций и костей. Т.е. можем записывать анимации персонажей, присваивать имя анимации, идентификатор. Дублировать, менять на свои.
- Записывать и менять конфигруации песонажей
- Записывать позиции, углы камер или персонажей
- Делать карту с описаниями, какой npc, где расположен, какой инвентарть и т.п. и менять его
- Теоритически базу можно использовать удаленно на через сервер базы данных, а модфицированные клиенты могут синхронизироваться. Фактически из сингла можно сделать мультиплеер. Или же взять клиент игры и сделать в нем свою базу для игры в сингле (для себя к примеру)
А для чего еще можно использовать базу данных? Если кто знает или есть идеи, то можно вместе обсудить.