quarta-feira, 14 de setembro de 2011

C# - SQLite Criação de Tabelas

Antes de partir para o código em C# para executar uma query e assim criar as tabelas no banco de dados SQLite que neste artigo é o objetivo do mesmo, temos de falar sobre os tipos de dados que o SQLite implementa.
No SQLite, existem apenas 5 tipos de dados, sendo eles:
  • NULL - comum em qualquer outro banco de dados.
  •  INTEGER - inteiro com sinal, armazenado em 1, 2, 3, 4, 6 ou 8 bytes dependendo da grandeza do valor.
  • REAL - valor de ponto flutuante armazenado em 8 bytes.
  • TEXT - uma string armazenada usando UTF-8, UTF-16BE ou UTF-16LE.
  •   BLOB - armazena um blob, como indica o nome.

A biblioteca do SQLite implementa recursos de compatibilidade com outros bancos de dados, no site do desenvolvedor essa compatibilidade é tratada como uma espécie de afinidade. Por exemplo, um tipo de dados INT comum em diversos bancos de dados é tratado como um INTEGER no SQLite, abaixo segue uma tabela com uma listagem das afinidades entre os tipos de dados e o SQLite:

Tipo de Dados de Outros Bancos de Dados
Tipo de Dados do SQLite
INT




INTEGER
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED INT BIG
INT2
INT8
CHARACTER (20)



TEXT
VARCHAR (255)
CHARACTER VARYING (255)
NCHAR (55)
CHARACTER NATIVA (70)
NVARCHAR (100)
TEXTO
CLOB
BLOB
BLOB
REAIS

REAL
DOUBLE
DOUBLE PRECISION
FLOAT
NUMERIC


NUMERIC
DECIMAL (10,5)
BOOLEAN
DATA
DATETIME
  
Basicamente são estes os tipos de dados mais Informações podem ser vistas no site do desenvolvedor do SQLite nesta página.
Partindo para o tema do artigo, vamos estudar como utilizar a classe do System.Data.SQLite, classe esta que executa comandos no banco de dados. O SQLiteCommand é a classe responsável por esta execução de comandos no banco de dados.
O exemplo abaixo mostra como cria no banco da dados SQLite uma tabela chamada Cliente com três campos cliId, cliNome e o cliEmail, vamos aproveitar a rotina mostrada no ultimo artigo que mostrava como criar e abrir uma conexão com o banco de dados SQLite:
SQLiteCommand objCommand;
SQLiteConnection objConnection; // Objeto de com o arquivo do banco de dados
StringBuilder strConnection = new StringBuilder();// String de com o arquivo do banco de dados
// Busco o Diretório de onde minha aplicação esta sendo executada
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
// pego o caminho de onde a aplicação esta sendo executada concateno o diretório com o nome do 
// arquivo do banco de dados
path = path + @"\BaseDados.db";
// Comesso a montar a String de Conexão definindo o Data Source
strConnection.Append("Data Source=BaseDados.db;");
// Definindo a versão
strConnection.Append("Version=3;");
// Verifico se o arquivo do banco de dados existe para criar ou não um novo banco de dados
if (File.Exists(path))
    strConnection.Append("New=False;");
else
    strConnection.Append("New=True;");
// Defino que quero o arquivo em um formato comprimido para economizar espaço em disco
strConnection.Append("Compress=True;");
// adiciono ao objeto de conexão a string de conexão formada
objConnection= new SQLiteConnection(strConnection.ToString());
// Abro o banco de dados
objConnection.Open();
// Crio um novo comando para executar comandos SQL no banco de dados
objCommand = objConnection.CreateCommand();
// Adiciono o comando ao SQLiteCommand
objCommand.CommandText = "CREATE TABLE CLIENTE (cliId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
                         " cliNome TEXT NOT NULL, cliEmail TEXT NOT NULL)";
// Executo a Nom Query (nom query porque não está me retornando dados)
objCommand.ExecuteNonQuery();
// Executo o metodo dispose para liberar os recuses que não serão mais utilizados
objCommand.Dispose();
// Fecha a conexão com o banco de dados
objConnection.Open();
// Executo o metodo dispose para liberar os recuses que não serão mais utilizados
objConnection.Dispose();


O SQLite possui diversas formas de executar este comando  de criação de uma tabela nesta página do site do Desenvolvedor do SQLite, o comando de criação de uma tabela também pode ser escrito de outra forma como a mostrada abaixo:
  •    "CREATE TABLE IF NOT EXISTS CLIENTE..." –  Sendo que este comando criaria a tabela cliente caso a não exista no banco de dados.

Para se excluir uma tabela do banco de dados SQLite, não existe nenhum segredo ele basicamente funciona da mesma forma que funciona em outros bancos de dados:
  •  "DROP TABLE CLIENTE" –  Exclui a tabela cliente do banco de dados.
  • "DROP TABLE IF EXISTS CLIENTE" –  Exclui uma tabela no banco de dados caso a mesma exista.

Bom basicamente é desta forma que criamos e excluímos uma tabela no banco de dados Sqlite, no próximo artigo veremos como inserir dados no SQLite usando os recursos oferecidos pelo componente ADO.NET System.Data.SQLite.

C# - Conexão com o SQLite

Boa Tarde!

Hoje vamos começar a ver alguma coisa sobre o SQLite na pratica, utilizando o componente desenvolvido para o Visual Studio  (C++, Vb.net ou C#) disponível no site do System.Data.Sqlite, sendo que este componente incorpora a biblioteca do SQLite 3 em seu código fonte, ou seja, não existe dependência da DLL do SQLite.
No site do System.Data.Sqlite existe um Vídeo que mostra a integração do componente System.Data.Sqlite com o Visual Studio.
Nos artigos vamos supor que já tenha sido criado um projeto com Visual Studio C# com referencia a DLL do System.Data.Sqlite.
Vamos mostrar neste artigo como fazer a string de conexão com banco de dados SQLite:

String de conexão Básica

Data Source =Arquivo; Version =3;

Onde:
Data Source =Arquivo – é o arquivo do banco de dados, sendo que se o arquivo conter somente o nome do arquivo o componente System.Data.Sqlite vai considerar que a localização do arquivo será no mesmo  diretório de onde se encontra a DLL do componente System.Data.Sqlite se encontra (ex: Data Source =”banco.db”;), porém se for especificado o caminho do arquivo logicamente que o System.Data.Sqlite vai procurar o arquivo no caminho especificado.
Version =3 – indica a versão do motor do banco de dados, ou seja, a versão do código fonte puro do SQLite original, sendo que o System.Data.Sqlite é um componente que da ao SQLite as funcionalidades do ADO.NET.

String de conexão usando UTF16

Data Source = Arquivo; Version =3; UseUTF16Encoding =True;

String de conexão especificando senha de Acesso

Data Source = Arquivo; Version =3; Password =senha;

Onde:
Password =senha – “senha” especifica a senha de acesso ao banco de dados (ex: Password= “123mudar”).

String de conexão para abrir o banco de dados no modo de somente leitura

Data Source = Arquivo; Version =3; Read Only =True;

String de conexão para criar um novo banco de dados

Data Source = Arquivo; Version =3; New =True;

String de conexão para não criar um novo banco de dados

Data Source = Arquivo; Version =3; New =False;

String de conexão indicando que o banco possui um formato comprimido

Data Source = Arquivo; Version =3; Compress =True;

Normalmente eu utilizo a rotina abaixo para criar um conexão com meu banco de dados :

SQLiteConnection objConnection; // Objeto de com o arquivo do banco de dados
StringBuilder strConnection = new StringBuilder();// String de com o arquivo do banco de dados
// Busco o Diretório de onde minha aplicação esta sendo executada
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
// pego o caminho de onde a aplicação esta sendo executada concateno o diretório com o nome do
// arquivo do banco de dados
path = path + @"\BaseDados.db";
// Comesso a montar a String de Conexão definindo o Data Source
strConnection.Append("Data Source=BaseDados.db;");
// Definindo a versão
strConnection.Append("Version=3;");
// Verifico se o arquivo do banco de dados existe para criar ou não um novo banco de dados
if (File.Exists(path))
    strConnection.Append("New=False;");
else
    strConnection.Append("New=True;");
// Defino que quero o arquivo em um formato comprimido para economizar espaço em disco
strConnection.Append("Compress=True;");
// adiciono ao objeto de conexão a string de conexão formada
objConnection= new SQLiteConnection(strConnection.ToString());
// Abro o banco de dados
objConnection.Open();

Nas próximas postagens veremos como enviar comandos SQL para o banco de dados SQLite para que possamos ver melhor a performance deste excelente banco de dados.

segunda-feira, 12 de setembro de 2011

SQLite

Boa Noite!


Vamos Inaugurar o blogue com a primeira de algumas postagens sobre esta biblioteca escrita em Linguagem C, que implementa um poderoso banco de dados amplamente utilizado nos dias em hoje em diversos softwares já consagrados como por exemplo o  navegador Google Crome, estando também implementado nativamente nas bibliotecas do SDK QT, uma poderosa biblioteca de desenvolvimento C++, sendo que não podemos nos esquecer do Sistema Operacional Android, que em sua SDK também implementa nativamente as bibliotecas do SQLite.
A biblioteca SQLite, basicamente implementa um banco de dados em um arquivo, onde ele lê e escreve todas as informações que são submetidas e requeridas através da Linguagem SQL.
O uso desta biblioteca é recomendado quando não se tem a necessidade dos incontáveis recursos de um Gerenciador de Banco de dados Convencional como o SQL Server, Oracle e Mysql por exemplo.

Sendo que o SQLite é recomentado para aplicações onde:
  •  Sites (com menos de cem mil requisições por dia);
  •  Dispositivos e sistemas embarcados;
  • Aplicações desktop;
  •  Ferramentas estatísticas e de análise;
  • Aprendizado de banco de dados;
  • Implementação de novas extensões à SQL.

O SQLite não é recomendado para aplicações onde:
  • Sites com muitos acessos;
  • Grande quantidade de dados (maior que algumas dúzias de gigabytes);
  • Sistemas com grande concorrência;
  • Aplicações cliente/servidor.

Vejamos algumas características do SQLite:
  •  Software livre/domínio público e Multiplataforma;
  •   Mecanismo de armazenamento seguro com transações ACID;
  •  Não necessita de instalação, configuração ou administração;
  • Implementa a maioria do SQL92;
  • O Banco de Dados é guardado em um único arquivo;
  • Suporta bases de dados acima de 2 terabytes;
  • Sem dependências externas.

O Site do Desenvolvedor do SQLite se encontra no link abaixo:

Nas próximas postagens vamos ver como implementar SQLite junto de aplicações desenvolvidas com C# e mais adiante Android.