Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] [Duvida] Banco SQLite no "Data>Data>[seu pacote do projeto]>database" ou "sdCard"

Galera help ai..

Eu tenho a seguinte classeDB

public 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();
    }                                                   
}

Tela de cadastros

        ContasDAO contasDAO = new ContasDAO(this);
        contasDAO.abrirConexao();
        contasDAO.salvarContas(obterInformacoesContas());
        contasDAO.fecharConexao();

Class ContasDAO

    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 (?,?,?,?)


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ÃO


Em 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 é melhor


Em 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 criado
File apagarBanco = new File(destPath+"/nomedobanco.db");
apagarBanco.delete();
//o metodo que irá copiar do assets para o diretorio de databases
copia(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 tinha 


Em 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.
 
 



--
Atenciosamente,
Rudson Lima

+ Desenvolvedor Delphi - NpInfo
+ Desenvolvedor Android - NpInfo

--
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.
 
 



--
Atenciosamente,
Rudson Lima

+ Desenvolvedor Delphi - NpInfo
+ Desenvolvedor Android - NpInfo

--
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.
 
 



--
Atenciosamente,
Rudson Lima

+ Desenvolvedor Delphi - NpInfo
+ Desenvolvedor Android - NpInfo



--
Atenciosamente,
Rudson Lima

+ Desenvolvedor Delphi - NpInfo
+ Desenvolvedor Android - NpInfo

--
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.
 
 



--
Atenciosamente,
Rudson Lima

+ Desenvolvedor Delphi - NpInfo
+ Desenvolvedor Android - NpInfo

--
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.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário