Galera help ai..
Eu tenho a seguinte classeDBpublic class ClasseDB extends SQLiteOpenHelper {
private Context context;
private static final String TABELA = "CREATE TABLE MINHATABELA(CODIGO INT NOT NULL, NOME VARCHAR( 10 ) NOT NULL);";
public ClasseDB(Context context) {
super(context, ConstantesDAO.DATABASE, null, ConstantesDAO.VERSAO);
this.context = context;
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(TABELA);
verificarSeOBanoExiste();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void verificarSeOBanoExiste(){
String path = context.getFilesDir().getParentFile().getPath() + "/databases" + "/" + ConstantesDAO.DATABASE;
File fileBanco = new File(path);
fileBanco.delete();
if (!fileBanco.exists()){
try {
copiarBancoDados(path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e(ConstantesSistema.TAG, "Erro FileOutputStream(dbPath);");
}
}
}
private void copiarBancoDados(String caminho) throws IOException {
OutputStream dbStream = new FileOutputStream(caminho);
Log.i(ConstantesSistema.TAG, "Copiando banco de dados para sdCard ");
InputStream dbInputStream = context.getAssets().open(ConstantesDAO.CAMINHO_DATABASE);
byte[] buffer = new byte[1024];
int length;
while ((length = dbInputStream.read(buffer)) > 0) {
dbStream.write(buffer, 0, length);
}
dbInputStream.close();
dbStream.flush();
dbStream.close();
}
}
ContasDAO contasDAO = new ContasDAO(this);
contasDAO.abrirConexao();
contasDAO.salvarContas(obterInformacoesContas());
contasDAO.fecharConexao();
private ClasseDB classeDB;
private SQLiteDatabase banco;
public ContasDAO(Context context){
super();
this.context = context;
this.classeDB = new ClasseDB(context);
}
public void abrirConexao() {
// TODO Auto-generated method stub
try{
banco = classeDB.getWritableDatabase();
}catch(Exception e){
Log.e(ConstantesSistema.TAG, "Erro ao abrir conexões ContasDAO");
}
}
public void salvarContas(final ContasEntity contasEntity) {
// TODO Auto-generated method stub
ContentValues campos = new ContentValues();
campos.put("NOME", contasEntity.nome);
campos.put("VALOR", contasEntity.valor);
campos.put("TIPO", contasEntity.tipo);
campos.put("ICON", contasEntity.icon);
try {
banco.insertOrThrow(ConstantesSistema.CONTAS, ConstantesSistema.BANCO_RUNAT, campos);
Toast.makeText(context, context.getString(R.string.msg_salvar_contas), Toast.LENGTH_SHORT).show();
Log.i(ConstantesSistema.TAG, context.getString(R.string.msg_salvar_contas));
} catch (Exception e) {
e.getMessage();
Toast.makeText(context,context.getString(R.string.erro_salvar_contas), Toast.LENGTH_SHORT).show();
Log.e(ConstantesSistema.TAG, context.getString(R.string.erro_salvar_contas));
} finally {
}
}
Erro na hora de executar o banco.insertOrThrow(ConstantesSistema.CONTAS, ConstantesSistema.BANCO_RUNAT, campos);
android.database.sqlite.SQLiteException: no such table: CONTAS (code 1): , while compiling: INSERT INTO CONTAS(CON_VALOR,CON_TIPO,CON_NOME,CON_ICON) VALUES (?,?,?,?)
android.database.sqlite.SQLiteException: no such table: CONTAS (code 1): , while compiling: INSERT INTO CONTAS(CON_VALOR,CON_TIPO,CON_NOME,CON_ICON) VALUES (?,?,?,?)
O banco é copiado sem problemas, a tabela existe do banco...
Desde de já obrigado..
Em 25 de julho de 2013 16:01, Andre Souza <deh.osouza@gmail.com> escreveu:
Opa, valeu por compartilhar :D
Em 25/07/2013 15:25, "Rudson Lima" <rudsonlive@gmail.com> escreveu:André.. a minha ficou assim.. Funcionado perfeitamente. Agradeço as dicas
public class ClasseDB {
private static final String DATABASE = "banco.db";
private static final int VERSAO = 1;
private SQLiteDatabase db;
private static String CAMINHO;
private static Context context;
private DatabaseHelper dbHelper;
public ClasseDB(Context contex) {
// TODO Auto-generated constructor stub
context = contex;
CAMINHO = "data/data/" + context.getPackageName() + "/databases/" + DATABASE;
this.dbHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context) {
super(context, DATABASE, null, VERSAO);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
try {
if ( copiarBancoDados()){
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
private boolean copiarBancoDados() throws IOException {
new Thread(new Runnable() {
public void run() {
String dbPath = CAMINHO;
OutputStream dbStream = null;
try {
dbStream = new FileOutputStream(dbPath);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
InputStream dbInputStream = null;
try {
dbInputStream = context.getAssets().open(DATABASE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] buffer = new byte[1024];
int length;
try {
while ((length = dbInputStream.read(buffer)) > 0) {
dbStream.write(buffer, 0, length);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dbInputStream.close();
dbStream.flush();
dbStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
Log.i(ConstantesSistema.TAG, "Copiando banco de dados para sdCard ");
return false;
}
}
public ClasseDB abrirDB() throws SQLException{
this.db = dbHelper.getWritableDatabase();
return this;
}
public void fecharDB(){
dbHelper.close();
}
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy){
return db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
}
public Cursor rawQuery(String sql, String[] selectionArgs ){
return db.rawQuery(sql, selectionArgs);
}
public boolean insertOrThrow(String table, String nullColumnHack, ContentValues values){
return ( db.insertOrThrow(table, nullColumnHack, values) > 0 );
}
public boolean update(String table, ContentValues values, String whereClause, String[] whereArgs){
return ( db.update(table, values, whereClause, whereArgs) > 0);
}
public boolean delete(String table, String whereClause, String[] whereArgs){
return ( db.delete(table, whereClause, whereArgs) > 0);
}
public void execSQL(String sql){
db.execSQL(sql);
}
}--Em 25 de julho de 2013 12:22, Rudson Lima <rudsonlive@gmail.com> escreveu:
Era essa a palavra que queria escutar PADRÃOEm 25 de julho de 2013 12:15, Andre Souza <deh.osouza@gmail.com> escreveu:
Esse metodo q mandei copia pro diretorio certo de onde seria criado o banco naturalmente. Tb acho q deva ficar la mas dependendo de quais sejam os objetivos vc decide oq é melhorEm 25 de julho de 2013 12:10, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:O melhor é sempre manter o padrão até por questões de segurança das informações do app.Não coloque ele no SdCard!Em 25 de julho de 2013 12:00, Rudson Lima <rudsonlive@gmail.com> escreveu:
O lance do copiar eu já tenho já que faço isso no sistema da empresa..Então ate o momento pasta database \o/
Em 25 de julho de 2013 11:55, Andre Souza <deh.osouza@gmail.com> escreveu:
Ai tb criei uma AsyncTask onde chamo esses metodos. No doInBackground eu chamo minha classe que extende o SQLiteOpenHelper: db = new DatabaseHelper(getApplicationContext()).getWritableDatabase(); Isso serve para que ele crie o banco, dai depois eu deleto o que ele cria e copio o que ja foi criado. Na epoca que fiz consegui somente dessa forma.Em 25 de julho de 2013 11:50, Andre Souza <deh.osouza@gmail.com> escreveu:
Não sei se esta é a melhor forma, da pra melhorar, mas fiz assim:public void copiaBanco() {String destPath = getFilesDir().getParentFile().getPath() + "/databases";try {//primeiro tenho que apagar o que ja foi criadoFile apagarBanco = new File(destPath+"/nomedobanco.db");apagarBanco.delete();//o metodo que irá copiar do assets para o diretorio de databasescopia(getAssets().open("banco/compracerta.db"), new FileOutputStream(destPath+"/nomedobanco.db"));} catch (FileNotFoundException e) {Toast.makeText(this, getResources().getString(R.string.texto_alerta_erro_cria_banco), Toast.LENGTH_LONG).show();} catch (IOException e) {Toast.makeText(this, getResources().getString(R.string.texto_alerta_erro_cria_banco), Toast.LENGTH_LONG).show();}}private void copia(InputStream input, OutputStream output) throws IOException {byte[] buffer = new byte[1024];int lengh;while ((lengh = input.read(buffer)) > 0) {output.write(buffer, 0, lengh);}output.flush();output.close();input.close();}Em 25 de julho de 2013 11:38, Rudson Lima <rudsonlive@gmail.com> escreveu:
André te perdoa cara pelo o envio ( SemQuererQuerendo )
Como falei o app é meu, só queria saber a melhor pratica junto com o grupo.
Então vc já colocar o banco na Data>Data>[Meu Pacote]>database via file explore?
Em 25 de julho de 2013 11:28, Andre Souza <deh.osouza@gmail.com> escreveu:
Enviei sem querer uahhauua, recomeçando:olha uma vez tive uma duvida parecida, basicament eu tinha que ter um banco com muitos registros inseridos e seria ruim fazer isso na iniciação...então eu criei o banco manualmente, inseri os dados e em tempo de execução eu substituia o banco local da aplicação por esse que eu criava. So q ele não ficava no SD. Entao meu conselho é que se forem muitos registros previamente inseridos, acredito que valha mais a pena fazer isso. Agora uma pergunta, tem q ser externo mesmo o banco? E se o usuario deletar o app, o banco vai continuar la? Ele pode ate mesmo fazer copia e olhar os dados?
Em 25 de julho de 2013 11:24, Andre Souza <deh.osouza@gmail.com> escreveu:
olha uma vez tive uma duvida parecida, basicament eu tinhaEm 25 de julho de 2013 11:23, Rudson Lima <rudsonlive@gmail.com> escreveu:
Bom dia a todos \o/
Galera é o seguinte...
Estou desenvolvendo um projeto na empresa onde o banco ficará no sdCard ( Exigência da empresa )
Agora iniciei um projeto ( Meu \o/ )
E queria saber de vcs como devo proceder em relação ao local do banco. O que vc acham? Onde vcs usam no projeto de vcs?
Vantagens e desvantagens de ambas as opções..
A agora duvida é como devo proceder em relação a criação do banco, já deixo ele todo criado ( Com todas as tabelas sem registros )
ou crio tudo na primeira inicialização do sistema ( Banco, tabelas e alguns registros )
E em relação a isso oq vcs me indicam... ( xml, ou no oncreat da minha classe banco )
Espero ter sido claro na minha explicação...
Desde de já agradeço
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
André Luiz de Oliveira Souza
Engenheiro da Computação
Pós-graduando em Desenvolvimento de Software com ênfase em Java Corporativo--
André Luiz de Oliveira Souza
Engenheiro da Computação
Pós-graduando em Desenvolvimento de Software com ênfase em Java Corporativo--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
André Luiz de Oliveira Souza
Engenheiro da Computação
Pós-graduando em Desenvolvimento de Software com ênfase em Java Corporativo--
André Luiz de Oliveira Souza
Engenheiro da Computação
Pós-graduando em Desenvolvimento de Software com ênfase em Java Corporativo--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
Abraços,
Pedro Subutzki
__________________________________________HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
André Luiz de Oliveira Souza
Engenheiro da Computação
Pós-graduando em Desenvolvimento de Software com ênfase em Java Corporativo--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.







0 comentários:
Postar um comentário