Você está na página 1de 10

Programação de Aplicativos Mobile II (PAM II)

Prof. Maicon Monttozo


3º ETIM Desenvolvimento de Sistemas

PROJETO SQLite

Neste projeto vamos trabalhar com o acesso ao banco de dados do celular


conhecido como SQLite.
O SQLite, é escrito em C, e utilizada uma classe sem configuração alguma
de SQL (SQL Puro) 92, porém nem todas as funções estão configuradas no SQLite.
O SQLite não possui licença alguma, ele totalmente disponibilizado pelos autores, a
Hwaki, ou seja, qualquer pessoa pode baixar as fontes no site, compilar, modificar,
executar, utilizar, sem problema algum, porém o site do SQLite ressalta que alguns
usuários devem adquirir uma permissão para usar o SQLite:

• Caso use em instituições não-publicas.


• Usar em instituições que não reconhecem o autor.
• Deve publicar a licença em lugar visível para os usuários.
• Seu departamento legal lhe disser que tem que adquirir a licença.

Salvo essas condições o SQLite é totalmente livre para ser usado. Ele tem
algumas restrições quanto ao SQL92, as principais ausências podem ser vistas
abaixo:

• Instrução DELETE em múltiplas tabelas.


• Suporte a FOREIGN KEY.
• Suporte a Triggers
• Suporte Completo ao ALTER TABLE (Somente algumas
funcionalidades estão implementadas)
• Ausência do RIGHT JOIN e FULL OUTER JOIN.
• GRANT e REVOKE

Esses são alguns das principais ausências nos comandos SQL, porém, em
seu site (https://www.sqlite.org/) podemos obter informações completas sobre ele.

Salvar dados em um banco de dados é ideal para dados estruturados ou


que se repetem, por exemplo, os dados de produtos. Neste projeto vamos realizar a

1
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

introdução para começar a trabalhar com bancos de dados SQLite no Android. As


APIs necessárias para usar um banco de dados no Android estão disponíveis no
pacote android.database.sqlite.

Definir um esquema e um produto

Um dos princípios mais importantes dos bancos de dados SQL é o


esquema: uma declaração formal de como o banco de dados é organizado. O
esquema é refletido nas declarações SQL usadas na criação do banco de dados. É
aconselhável criar uma classe de acompanhamento, conhecida como classe de
produto, que especifica explicitamente o layout do esquema de forma sistemática e
auto documentada.

Uma classe de produto é o contêiner das constantes que definem nomes


para URIs, tabelas e colunas. A classe de produto permite usar as mesmas constantes
em outras classes no mesmo pacote. Isso permite que você altere o nome de uma
coluna em um local e que a mudança se propague por todo o código.

Uma boa forma de organizar uma classe de contrato é colocar definições


que sejam globais para todo o banco de dados no nível raiz da classe. Em seguida,
crie uma classe interna para cada tabela. Cada classe interna enumera as colunas da
tabela correspondente.

Para isso vamos criar a classe Produto, clicando sobre o pacote do nosso
projeto e em seguida New > JavaClass.

Na janela a seguir, vamos colocar o nome da nossa classe. Em nosso


projeto vamos utilizar informações sobre produtos, e por isso, nossa classe irá chamar
Produto.

2
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

Após a criação, nossa classe produto fica conforme a imagem a seguir.

3
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

Agora vamos criar um método construtor. O (pseudo-)método construtor


determina que ações devem ser executadas quando da criação de um objeto. Em
Java, o construtor é definido como um método cujo nome deve ser o mesmo nome da
classe e sem indicação do tipo de retorno, nem mesmo void. O construtor é
unicamente invocado no momento da criação do objeto através do operador new.
Podemos criar ele automaticamente clicando com o botão direito dentro da nossa
classe e selecionando a opção Generate, e em seguida selecionar Construtor.

Com isso nosso método construtor fica conforme a imagem a seguir.

4
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

Para impedir que alguém instancia acidentalmente a classe de contrato,


vamos torna-lo como construtor privado.

A próxima etapa, é criar uma classe que define o nome da tabela e os


nomes das colunas de uma única tabela. E nosso exemplo, vamos criar a tabela
conforme imagem a seguir.

Definidos os nomes de variáveis, vamos definir a classe interna que define


o conteúdo de nossa tabela.

5
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

/* Classe interna que define o conteúdo da tabela */


public static class ProdutoEntry implements BaseColumns{
// Nome da tabela
public static final String TABLE_NAME = "tblproduto";
// Codigo de produto
public static final String COLUMN_NAME_proCodigo = "proCodigo";
// Nome do produto
public static final String COLUMN_NAME_proNome = "proNome";
// Valor do produto
public static final String COLUMN_NAME_proValor = "proValor";
}

Criar um banco de dados usando um SQL Helper

Uma vez definida a estrutura do banco de dados, implemente métodos que


criam e mantêm o banco de dados e as tabelas. Veja a seguir a estrutura para criação
da nossa tabela de produtos conforme definido acima.

Crie uma classe chamada ProdutoDBHelper que irá conter os métodos


para manipulação dos dados de nossa tabela.

6
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

Agora vamos criar as strings que serão responsáveis pela execução do


código de criação tabela.

public class ProdutoDBHelper {


private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE IF NOT EXISTS " +
Produto.ProdutoEntry.TABLE_NAME + " (" +
Produto.ProdutoEntry.COLUMN_NAME_proCodigo + " INTEGER
PRIMARY KEY AUTOINCREMENT," +
Produto.ProdutoEntry.COLUMN_NAME_proNome + " VARCHAR," +
Produto.ProdutoEntry.COLUMN_NAME_proValor + " DECIMAL)";

// Exclusão do banco de dados


private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " +
Produto.ProdutoEntry.TABLE_NAME;
}

Da mesma forma que você salva arquivos no armazenamento interno do


dispositivo, o Android armazena seu banco de dados na pasta privada do app. Seus
dados ficam protegidos porque, por padrão, essa área não pode ser acessada por
outros apps nem pelo usuário.

7
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

A classe SQLiteOpenHelper contém um conjunto de APIs útil para


gerenciar seu banco de dados. Quando você usa essa classe para conseguir
referências para o banco de dados, o sistema realiza operações de execução
possivelmente longas para criar e atualizar o banco de dados apenas quando
necessário e não durante a inicialização do app. Basta chamar getWritableDatabase()
ou getReadableDatabase().

Para usar SQLiteOpenHelper, crie uma subclasse que modifique o


onCreate() e os métodos de callback onUpgrade(). Você também pode implementar
os métodos onDowngrade() ou onOpen(), mas eles não são obrigatórios.

Por exemplo, veja uma implementação do SQLiteOpenHelper que utilize


alguns dos comandos mostrados acima.

8
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

public class ProdutoDBHelper extends SQLiteOpenHelper {


// String com comando para Criação do banco de dados
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE IF NOT EXISTS " +
Produto.ProdutoEntry.TABLE_NAME + " (" +
Produto.ProdutoEntry.COLUMN_NAME_proCodigo + " INTEGER
PRIMARY KEY AUTOINCREMENT," +
Produto.ProdutoEntry.COLUMN_NAME_proNome + " VARCHAR,"
+
Produto.ProdutoEntry.COLUMN_NAME_proValor + "
DECIMAL)";

// String com comando para Exclusão do banco de dados


private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + Produto.ProdutoEntry.TABLE_NAME;

// Se você alterar o esquema do banco de dados, deverá incrementar a


versão do banco de dados.
public static final int DATABASE_VERSION = 1;
// Nome do banco de dados
public static final String DATABASE_NAME = "bdtecnico";

public ProdutoDBHelper(Context context) {


super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public void onCreate(SQLiteDatabase db) {


db.execSQL(SQL_CREATE_ENTRIES);
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int


newVersion) {
// Método para atualização da tabela
}

public void onDowngrade(SQLiteDatabase db, int oldVersion, int


newVersion) {
// Médodo para voltar estado da tabela

}
}

Para finalizar a criação da nossa tabela, vamos agora no arquivo


MainActivity para que o mesmo execute os comandos das classes.
Para acessar seu banco de dados, declaramos a subclasse de
SQLiteOpenHelper ProdutoDBHelper.

// Declaração do objeto SQLiteDatabase


SQLiteDatabase sqLiteDatabase;
// Declaração do objeto ProdutoDBHelper
ProdutoDBHelper produtoDBHelper;

9
Programação de Aplicativos Mobile II (PAM II)
Prof. Maicon Monttozo
3º ETIM Desenvolvimento de Sistemas

Agora dentro da nossa classe onCreate do nosso arquivo MainActivity


vamos instanciar a subclasse.

// Inicia um novo objeto produto


produtoDBHelper = new ProdutoDBHelper(this);

Depois abrimos a conexão com banco de dados e executamos o método


onCreate para criação da nossa tabela.

// Abre conexão com o banco


sqLiteDatabase = produtoDBHelper.getWritableDatabase();
// Comando para criação da tabela
produtoDBHelper.onCreate(sqLiteDatabase);

Por fim, fechamos a conexão com o banco de dados.

// Fecha conexão com o banco


sqLiteDatabase.close();

O método completo no arquivo MainActivity fica conforme abaixo.

public class MainActivity extends AppCompatActivity {

// Declaração do objeto SQLiteDatabase


SQLiteDatabase sqLiteDatabase;
// Declaração do objeto ProdutoDBHelper
ProdutoDBHelper produtoDBHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Criar o banco de dados e tabelas


// Inicia um novo objeto produto
produtoDBHelper = new ProdutoDBHelper(this);
// Abre conexão com o banco
sqLiteDatabase =
produtoDBHelper.getWritableDatabase();
// Comando para criação da tabela
produtoDBHelper.onCreate(sqLiteDatabase);
// Fecha conexão com o banco
sqLiteDatabase.close();

}
}

10

Você também pode gostar