Pessoal, já tenho aqui minha aplicaçãozinha segue o código:
package com.canalsac.galardaomobile.persistencedatabase;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class TabelaDbHelper extends SQLiteOpenHelper
{
//private static String DBPATH = "/data/data/com.canalsac.galardaomobile/databases/";
private static String DBPATH = "/home/fabio/Área de trabalho/coletor-mobile/assets/";
private static String DBNAME = "coletor.sqlite";
private Context context;
public TabelaDbHelper(Context context)
{
super(context, DBNAME, null, 2);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db)
{
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
}
private boolean checkDataBase()
{
SQLiteDatabase db = null;
try
{
String path = DBPATH + DBNAME;
db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
db.close();
}
catch(SQLiteException e)
{
}
return db != null;
}
private void createDatabase() throws Exception
{
boolean exists = checkDataBase();
if(!exists)
{
this.getReadableDatabase();
}
try
{
copyDatabase();
}
catch(IOException e)
{
throw new Error("Não foi possível copiar o arquivo");
}
}
private void copyDatabase() throws IOException
{
String dbPath = DBPATH + DBNAME;
OutputStream dbStream = new FileOutputStream(dbPath);
InputStream dbInputStream = context.getAssets().open("coletor.sqlite");
byte[] buffer = new byte[1024];
int length;
while ((length = dbInputStream.read(buffer))>0)
{
dbStream.write(buffer, 0, length);
}
dbInputStream.close();
dbStream.flush();
dbStream.close();
}
public SQLiteDatabase getDatabase()
{
try
{
createDatabase();
String path = DBPATH + DBNAME;
return SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
}
catch(Exception e)
{
return getWritableDatabase();
}
}
}
Preciso de uma ajudinha, como faço para fazer um select para testar se fiz certo a importação do meu banco de dados?
Vc pode atribuir o resultado do select a um Cursor
public Cursor getAllUsuarios() {
Cursor mCursor = mDb.query("usuarios", null, null, null,
null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Mas no caso eu primeiro não teria que dizer quais colunas existem na minha base?
Você conecta o banco e cria as tabelas depois no método que te passei você chama o Cursor e no método “mDb.query()” que se você olhar os atributos que passam por parâmetros tem como passar a tabela que no exemplo seria a tabela “usuarios” e caso você queira trazer somente algumas colunas você pode passar nos outros parâmetros que estão em “null” é possível fazer tbm where tudo nesse método.
Da uma olhada nesse site
http://www.tutoriandroid.com/2012/01/persistencia-de-dados-com-sqlite.html
Deixa eu passar p vê se entendi, eu não preciso necessariamente criar a minha tabela do meu banco de dados na aplicação? Posso somente criar aí como seu exemplo de usuários e passar as colunas por parâmetros?
Sim se você já possui seu banco e colocou por exemplo no cartão de memória, vc acessa sua base e faz select no banco e tudo certo, vai retornar todas as colunas da tabela
Olhe meus códigos:
[code]
package com.canalsac.galardaomobile.modelo;
public class Tabela
{
public static final String TABLE_NAME = “tabela”;
public static final String COLUMN_NAME_IDADE = "idade";
public static final String COLUMN_NAME_CAPITAL = "capital";
public static final String COLUMN_NAME_PRODUTO = "produto";
public static final String COLUMN_NAME_MENSALIDADE = "mensalidade";
private String idade;
private String capital;
private String produto;
private String mensalidade;
public String getIdade()
{
return idade;
}
public void setIdade(String idade)
{
this.idade=idade;
}
public String getCapital()
{
return capital;
}
public void setCapital(String capital)
{
this.capital = capital;
}
public String getProduto()
{
return produto;
}
public void setProduto(String produto)
{
this.produto = produto;
}
public String getMensalidade()
{
return mensalidade;
}
public void setMensalidade(String mensalidade)
{
this.mensalidade = mensalidade;
}
}[/code]
e onde faz o select
package com.canalsac.galardaomobile.dao;
import org.json.JSONException;
import org.json.JSONObject;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.canalsac.galardaomobile.modelo.Tabela;
import com.canalsac.galardaomobile.persistencedatabase.TabelaDbHelper;
import android.content.Context;
public class TabelaDAO
{
private static final String SELECT_ALL = "select * from " +Tabela.TABLE_NAME;
private SQLiteDatabase db;
private TabelaDbHelper tabelaDbHelper;
public TabelaDAO(Context context)
{
tabelaDbHelper = new TabelaDbHelper(context);
db = tabelaDbHelper.getDatabase();
}
public JSONObject getPorIdade(String idade)
{
JSONObject result = new JSONObject();
Cursor cursor = db.rawQuery(SELECT_ALL + "where idade = 16", null);
cursor.moveToFirst();
while(!cursor.isAfterLast())
{
result = readRow(cursor);
cursor.moveToNext();
}
cursor.close();
return result;
}
private JSONObject readRow(Cursor cursor)
{
JSONObject obj = new JSONObject();
try
{
obj.put(Tabela.COLUMN_NAME_MENSALIDADE, cursor.getString(0));
obj.put(Tabela.COLUMN_NAME_PRODUTO, cursor.getString(1));
obj.put(Tabela.COLUMN_NAME_CAPITAL, cursor.getString(2));
obj.put(Tabela.COLUMN_NAME_IDADE, cursor.getString(3));
}
catch(JSONException e)
{
}
return obj;
}
}
Tem algo que possa acrescentar, fiz algo de errado?
Esse código está funcionando?
Pq na classe Tabela você tem atributos privados que não estão sendo usados e outros estáticos que vc chama na outra classe?
Estou tentando achar um jeito de printar isto na tela…
Se tu quer testar pq não conecta direto no banco do emulador com o adb shell?
adb shell
#sqlite3 /data/data/seu.pacote/databases/seu_banco
select * from sua_tabela;
.schema
[quote=wagnerfrancisco]Se tu quer testar pq não conecta direto no banco do emulador com o adb shell?
adb shell
#sqlite3 /data/data/seu.pacote/databases/seu_banco
select * from sua_tabela;
.schema
[/quote]
Abro o terminal e já dá comando não encontrado com o adb shell
O adb fica na pasta android/platform-tools, onde “android” eh a pasta que tu instalou sdk, emulador, etc.
Se não quiser sempre entrar no diretório, adicione-o no path do sistema.