[TUTORIAL] Banco de Dados || SQLite
3 participantes
Página 1 de 1
[TUTORIAL] Banco de Dados || SQLite
As vezes temos projetos que precisam guardar muitos valores, sejam de estatisticas ou mesmo configurações do software que voce está criando... Ai vem aquela dificuldade em ter que guardar tudo isto no PlayerPrefs.
Bem, o PlayerPrefs é uma boa opção para guardar poucos registros ( e ele nem é seguro, se voce n criptografar ou inventar seu proprio codigo de criptografia ele pode ser facilmente alterado pelo Regedit do Windows)...
Então como guardar estes dados de maneira mais organizada e ainda sim ser tão segura quanto PlayerPrefs??
Banco de Dados. Com um banco de dados podemos criar infinitas tabelas (voce ja vai saber o que é uma tabela) e infinitos registros. Podemos guardar logs, vida do player, fase atual, moedas que ele pegou e muitas outras coisas...
Vou explicar aqui como usar o SQLite. Uma versão de SQL em que o banco de dados fica em seu computador e não na rede como o MySQL. Portanto o usuario poderá usar seu banco de dados mesmo sem estar conectado a internet.
Bem para começar preciso te explicar como foi criado o SQL ...
Mas não vou.. haha vai lá no google preguiça...
Após você saber disso podemos começar.
Um banco de dados é um conjunto de tabelas, que são um conjunto de registros. Então : BancoDeDados[Tabelas][Registros].
Vamos começar preparando nosso ambiente.
Baixe:
64 bits : http://www.sqlite.org/2016/sqlite-dll-win64-x64-3120000.zip
32 bits: http://www.sqlite.org/2016/sqlite-dll-win32-x86-3120000.zip
No seu projeto do Unity crie uma pasta dentro da pasta Assets chamada Plugins. Coloque o conteudo do arquivo que você baixou.
Proximo passo baixe este programa http://sqlitebrowser.org/ e instale .
Agora dentro do SQLite Browser clique em Novo Banco de Dados, defina um nome e salve na pasta Assets.
Uma aba será aberta, apenas feche-a.
Clique em Executar SQL e cole este comando lá:
- Código:
CREATE TABLE `stats` (
`idpers` INTEGER UNIQUE,
`power` INTEGER,
`mana` INTEGER,
`life` INTEGER,
PRIMARY KEY(idpers)
);
e execute apertando F5. Irá aparecer lá em baixo no log "Query executed successfully" . Se apareceu deu tudo certo. O que fizemos? Criamos uma tabela chamada 'stats' com os campos 'idpers', 'power', 'mana' e 'life'. Ambos campos somente aceitarão numeros inteiros. Não aceitando letras. Definimos o campo 'idpers' como uma chave primária, dizendo que ele é o campo indice, com o qual iremos usar para pesquisas. Tambem dizemos que ele deve ser unico ! Ou seja não haverá 2 linhas com o mesmo valor no campo 'idpers'.
Bem, agora apague o comando e cole este novo:
- Código:
insert into stats values (1,5,100,100);
Se apareceu "Query executed successfully" é porque deu certo. O que fizemos agora? Agora inserimos uma linha dizendo que os valores são 1, 5,100 e 100. Ou seja, 1 do id, 5 de power, 100 de mana e 100 de vida. De acordo com a ordem sempre.
Se você clicar na aba Navegar Dados ja pode ver que estes registros estão lá.
Para verificar todos registros voce tambem pode executar este codigo :
- Código:
select * from stats
e seráo retornados todos registros da tabela 'stats'
os dois modos te deixarão visualizar todos registros da tabela.
Bem agora que ja temos tudo pronto e configurado podemos clicar em Write Changes ou CTRL + S para salvar.
Salvou? Então bora pro Unity.
Copie os arquivos System.Data.dll e Mono.Data.Sqlite.dll de **C:\Program Files (x86)\Unity \Editor\Data\Mono\lib\mono\2.0* e cole na pasta Assets/Plugins* do seu projeto. O caminho para achar estes arquivos pode mudar dependendo de onde voce instalou seu Unity.
Colou tudo certinho? Então ok.
Crie um C# script e cole isto:
- Código:
using UnityEngine;
using System.Collections;
using System;
using System.Data;
using Mono.Data.Sqlite;
public class ConnectDB : MonoBehaviour {
public string PatchToYourDB,TableName;
void Start () {
string conn= "URI=file:" + Application.dataPath + PatchToYourDB; // localização do seu .db é igual a pasta da aplicação + patch
IDbConnection dbconn; // declarando a conexao
dbconn = (IDbConnection) new SqliteConnection(conn); // setando ela como nova conexao com nosso .db
dbconn.Open(); //Abrindo conexão com seu banco de dados.
IDbCommand dbcmd = dbconn.CreateCommand(); // declarando o executador de comandos
string sqlQuery = "SELECT * from " + TableName; // criando uma query
dbcmd.CommandText = sqlQuery; // executando a query
IDataReader reader = dbcmd.ExecuteReader(); // lendo a query
while (reader.Read()) // o while é percorrido N vezes. Sendo N igual ao numero de linhas afetadas pela query
{
int id = reader.GetInt32(0); // linha atual. Campo [0]
int pow = reader.GetInt32(1); // linha atual. Campo [1]
int man = reader.GetInt32(2); // linha atual. Campo [2]
int lif = reader.GetInt32(3); // linha atual. Campo [3]
Debug.Log( "Id do Personagem: " + id + " | Power: " + pow + " | Mana: " + man + " | Vida: " + lif + "."); // escrevendo as estatisticas atuais. Elas mudam em cada loop
}
reader.Close(); // fechando e setando tudo como null. É NECESSARIO FECHAR TUDO. Setar como Null é boa pratica mas não é obrigatorio.
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbconn.Close();
dbconn = null;
}
}
Os resultados (quando se requisita, os valores serao retornados em um tipo de array de campos. o campo (0) é o idpers, o campo (1) é o power, campo (2) é o mana e o (3) é o life. Tudo irá depender do seu banco de dados. Então é importante entender esta parte.
Na aba inspector coloque o nome do seu banco de dados SeuBanco.db ou /PASTA/SeuBanco.db se ele estiver em uma pasta dentro da pasta Assets.
E em TableName coloque o nome da tabela. Por padrão coloque 'stats'. Ja que criamos a tabela com este nome.
Pronto rode seu jogo.
Resultado :
Veja como é simples de salvar estatisticas e qualquer outra coisa em um banco de dados e recuperar quando quiser.
RenanMSV- Instrutor
- PONTOS : 4483
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [TUTORIAL] Banco de Dados || SQLite
Aqui
também é possivel pegar o valor pelo seu nome de campo no banco de dados.
Assim:
- Código:
while (reader.Read()) // o while é percorrido N vezes. Sendo N igual ao numero de linhas afetadas pela query
{
int id = reader.GetInt32(0); // linha atual. Campo [0]
int pow = reader.GetInt32(1); // linha atual. Campo [1]
int man = reader.GetInt32(2); // linha atual. Campo [2]
int lif = reader.GetInt32(3); // linha atual. Campo [3]
Debug.Log( "Id do Personagem: " + id + " | Power: " + pow + " | Mana: " + man + " | Vida: " + lif + "."); // escrevendo as estatisticas atuais. Elas mudam em cada loop
}
também é possivel pegar o valor pelo seu nome de campo no banco de dados.
Assim:
- Código:
while (reader.Read()) // o while é percorrido N vezes. Sendo N igual ao numero de linhas afetadas pela query
{
int id = reader['idpers']; // linha atual. Campo [0]
int pow = reader['power']; // linha atual. Campo [1]
int man = reader['mana']; // linha atual. Campo [2]
int lif = reader['life']; // linha atual. Campo [3]
Debug.Log( "Id do Personagem: " + id + " | Power: " + pow + " | Mana: " + man + " | Vida: " + lif + "."); // escrevendo as estatisticas atuais. Elas mudam em cada loop
}
RenanMSV- Instrutor
- PONTOS : 4483
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [TUTORIAL] Banco de Dados || SQLite
Obrigado, você teria algum tutorial de um sistema de login com banco de dadosa?
yurinmds- Membro
- PONTOS : 3436
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Banco de Dados || SQLite
yurinmds escreveu:Obrigado, você teria algum tutorial de um sistema de login com banco de dadosa?
olha no topico da posição 2 Argument is Out of Range, la ele postou.
Tópicos semelhantes
» Aplicativo Reseta o Banco de Dados - Sqlite
» [TUTORIAL] Salvando e carregando dados com serialização (Parte 1)
» [TUTORIAL] Banco de Dados || PHP
» [TUTORIAL] Banco de dados || MySQL
» [TUTORIAL] Salvar dados com playerprefs facilmente.
» [TUTORIAL] Salvando e carregando dados com serialização (Parte 1)
» [TUTORIAL] Banco de Dados || PHP
» [TUTORIAL] Banco de dados || MySQL
» [TUTORIAL] Salvar dados com playerprefs facilmente.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos