ANDROID-Criando e Utilizando Bancos de Dados No Android

  • Published on
    09-Jul-2015

  • View
    195

  • Download
    0

Transcript

Criando e usando um banco de dados SQLite no Androidpor psyhclo 06 Dez 2010, 18:35Depois de tentar bastante, depois de vrios erros retornados, achei uma forma interessante de se criar e usar banco de dados SQLite. Atravs doSQLiteStatement, que um mtodo diferente porm mais fcil do que oSQLiteDatabase.query(). Tambm implementaremos como uma classe interna a classe SQLiteOpenHelper que uma classe que ajuda no gerenciamento da base de dados.

O resultado final sero palavras inseridas e depois requisitadas e imprimidas na tela da sua aplicao no emulador. Para isso vamos criar nosso projeto Android. V em File > New > Android Project e siga conforme a imagem abaixo (o target name usado deve coincidir com o que voc tiver instalado, no nosso caso a verso 2.2 est instalada. Leia mais sobre isso aquihttp://developer.android.com/guide/appendix/api-levels.html).

Aps criar o seu projeto Android, vamos para a criao das classes. Criaremos uma classe que ir manipular o banco de dados. Chamaremos deBDHelper.java.

CDIGO: SELECIONAR TODOS

import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; import android.util.Log;

import java.util.ArrayList; import java.util.List;

public class DataHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "table_name";

private Context context; private SQLiteDatabase db;

private SQLiteStatement insertStmt; private static final String INSERT = "insert into " + TABLE_NAME + "(name) values (?)";

public DataHelper(Context context) { this.context = context; OpenHelper openHelper = new OpenHelper(this.context); this.db = openHelper.getWritableDatabase(); this.insertStmt = this.db.compileStatement(INSERT); }

public long insert(String name) { this.insertStmt.bindString(1, name); return this.insertStmt.executeInsert(); }

public void deleteAll() { this.db.delete(TABLE_NAME, null, null); }

public String select(String wrd) { String list = new String(); Cursor cursor = this.db.query(TABLE_NAME, new String[] {"name"},null, null, null, null, null); if (cursor.moveToFirst()) { do { list = cursor.getString(0); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } return list; }

public List selectAll() { List list = new ArrayList(); Cursor cursor = this.db.query(TABLE_NAME, new String[] {"name" }, null, null, null, null, "id desc"); if (cursor.moveToFirst()) { do {

list.add(cursor.getString(0)); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } return list; }

private static class OpenHelper extends SQLiteOpenHelper {

OpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT, count INTEGER)"); }

@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) { Log.w("banco Database", "Upgrading database, this will destroy the database and recreate."); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } }

Como se pode ver o mtodo onCreate() da classe interna OpenHelper cria o banco de dados utilizando as variveis que voc declarou no incio da classe. A classe BDHelper.java tambm utiliza os mtodos da classe SQLiteStatement para manipulao do banco de dados, por exemplo o mtodo insert().

CDIGO: SELECIONAR TODOS

private SQLiteDatabase db; private SQLiteStatement insertStmt;

private static final String INSERT = "insert into " + TABLE_NAME + "(name) values (?)";

public BDHelper(Context context) { this.context = context; OpenHelper openHelper = new OpenHelper(this.context); this.db = openHelper.getWritableDatabase(); this.insertStmt = this.db.compileStatement(INSERT); }

public long insert(String name) { this.insertStmt.bindString(1, name); return this.insertStmt.executeInsert(); }

Voc pode ver que para se usar os mtodos da classe SQLiteStatement, deve-se declarar as variveis desse tipo, e tambm deve-se compilar esse comando SQL atravs do mtodo da classe SQLiteDatabase dentro do construtor da classe que manipula o banco de dados. Aps isso devemos trabalhar na nossa atividade. A classe Main.java que criamos.

CDIGO: SELECIONAR TODOS

import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView;

import java.util.List;

public class Main extends Activity {

private TextView txtView;

private DataHelper bdh;

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

this.txtView = (TextView) this.findViewById(R.id.txtView);

this.bdh = new BDHelper(this); this.bdh.deleteAll(); this.bdh.insert("psyhclo.com"); this.bdh.insert("this"); this.bdh.insert("is"); this.bdh.insert("a test."); List names = this.bdh.selectAll(); StringBuilder sb = new StringBuilder(); sb.append("Palavras na base de dados: "); for (String name : names) { sb.append(name + " "); }

this.txtView.setText(sb.toString());

} }

Aqui tudo que se faz simplesmente fazer a chamada de mtodo passando os argumentos necessrios. No se esquecendo que o arquivo main.xmlcomanda o layout da Atividade da sua aplicao. Ento devemos adicionar alguns componentes bsicos para se listar as palavras inseridas no banco de dados, o TextView. Na hierarquia do seu projeto, v em res > layout > main.xml.

CDIGO: SELECIONAR TODOS

Agora basta executar sua aplicao, e voc ter algo como a imagem abaixo.

Com isso, temos o bsico. Temos um aplicativo que cria um banco de dados, armazena e recupera os dados, tambm exploramos um pouco de explorar as ferramentas SQLite no ADB. Espero poder expandir esse artigo futuramente e acrescentar mais tabelas, e outros exemplos. interessante darem uma lida na documentao do Android, na parte que fala do SQLiteStatement e do SQLiteDatabase.