Dúvida SQLiteOpenHelper

Pessoal,

Estou finalizando um sistema que foi arquitetado utilizando mvc.

Criei o meu banco fora da aplicação e estou tendo dificuldade em envia-lo para o celular.

Segundo conselhos, é melhor criar o banco na mão e carrega-lo na execução da aplicação.

As dúvidas são o seguinte.

Possuo N classes Dao, preciso de um SQLiteOpenHelper para cada classe Dao?

Como criar uma única classe que cria o banco e as tabelas assim que o sistema é acessado?

Exemplo.

A minha primeira tela é um login e senha.

Preciso que este banco seja criado antes que o usuário execute esta tela.

Exemplo de como estão as minhas classes Dao.


package br.com.mylims.model;

import br.com.mylims.bean.Empresa;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class EmpresaDao extends SQLiteOpenHelper {


    private static final String CATEGORIA = "coleta";
    private static final String NOME_BANCO = "mylimsColeta";
    private static final int VERSAO = 1;


    public EmpresaDao(Context context) {
        super(context, NOME_BANCO, null, VERSAO);
        // TODO Auto-generated constructor stub

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }


    public boolean salvarDadosEmpresa(Empresa empresa){

        try {

            ContentValues valores = new ContentValues();

            valores.put("IDAUXEMPRESA", empresa.getIdAuxEmpresa());
            valores.put("NMFANTASIA", empresa.getNomeFantasia());
            valores.put("NMCONTATO", empresa.getNomeContato());
            valores.put("SOBRENOME", empresa.getSobrenome());
            valores.put("NMAREACONTATO", empresa.getNomeAreaContato());
            valores.put("DDD", empresa.getDdd());
            valores.put("FONE", empresa.getFone());
            valores.put("RAMAL", empresa.getRamal());
            valores.put("DDDCELULAR", empresa.getDddCelular());
            valores.put("CELULAR", empresa.getCelular());

            long sql = getWritableDatabase().insert("EMPRESA", null, valores);


            if (sql > 0) {

                Log.i(CATEGORIA, "LOG: Dados EMPRESA cadastrado com sucesso!");
                return true;

            } else {

                Log.i(CATEGORIA, "LOG: Não foi possível cadastrar os dados EMPRESA!");
                return false;

            }


        } catch (SQLException e) {
            // 

            Log.i(CATEGORIA, "LOG: Erro dados EMPRESA!");
            return false;
        }

    }



    public boolean altualizaDadosEmpresa(Empresa empresa, String idEmpresa){


        try {


            String[] args = new String[]{idEmpresa};

            ContentValues valores = new ContentValues();

            valores.put("IDAUXEMPRESA", empresa.getIdAuxEmpresa());
            valores.put("NMFANTASIA", empresa.getNomeFantasia());
            valores.put("NMCONTATO", empresa.getNomeContato());
            valores.put("SOBRENOME", empresa.getSobrenome());
            valores.put("NMAREACONTATO", empresa.getNomeAreaContato());
            valores.put("DDD", empresa.getDdd());
            valores.put("FONE", empresa.getFone());
            valores.put("RAMAL", empresa.getRamal());
            valores.put("DDDCELULAR", empresa.getDddCelular());
            valores.put("CELULAR", empresa.getCelular());

            int sql = getWritableDatabase().update("EMPRESA", valores, "IDAUXEMPRESA = ?", args);



            if (sql > 0) {

                Log.i(CATEGORIA, "LOG: Dados EMPRESA cadastrado com sucesso!");
                return true;

            } else {

                Log.i(CATEGORIA, "LOG: Não foi possível cadastrar os dados EMPRESA!");
                return false;

            }


        } catch (SQLException e) {
            // 

            Log.i(CATEGORIA, "LOG: Erro dados EMPRESA!");
            return false;
        }


    }



    public boolean salvaOuAtualizaEmpresa(Empresa empresa, String idEmpresa){


        try {

            String[] args = new String[]{idEmpresa};

            Cursor c = getWritableDatabase().rawQuery("SELECT * FROM EMPRESA WHERE IDAUXEMPRESA = ?", args);

            if (c.getCount() == 0) {

                if (salvarDadosEmpresa(empresa)) {

                    Log.i(CATEGORIA, "LOG: Dados EMPRESA cadastrado com sucesso!");
                    return true;

                } else {

                    Log.i(CATEGORIA, "LOG: Dados EMPRESA não pôde ser cadastrado!");
                    return false;

                }

            } else 

            {

                if (altualizaDadosEmpresa(empresa, idEmpresa)) {


                    Log.i(CATEGORIA, "LOG: Dados EMPRESA atualizado com sucesso!");
                    return true;

                } else {

                    Log.i(CATEGORIA, "LOG: Dados EMPRESA não pôde ser atulizado!");
                    return false;
                }

            }


        } catch (SQLException e) {

            Log.i(CATEGORIA, "LOG: erro SQLException." + e);
            return false;
        }

    }



}

Pessoal,

Criei uma classe SQLiteOpenHelper e alterei um dos meus Daos para testar.

Alguém pode me ajudar e ver se estou no caminho certo, por favor?

Seguem as classes.


package br.com.mylims.auxiliares;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class GerenciaBanco extends SQLiteOpenHelper{

	private static final int DATABASE_VERSION = 1;
	private static final String DATABASE_NAME = "mylimsColeta.db";

	private static final String COLETA = "CREATE TABLE COLETA (" +
			"IDAUXCOLETA INTEGER NOT NULL, " +
			"IDAUXPROCESSO INTEGER," + 
			"IDCOLETA VARCHAR(250)," + 
			"DTPREVISTA DATETIME," + 
			"DTAGENDA DATETIME, " +
			"OBSCOLETA TEXT," +
			"CONSTRAINT [PK_COLETA] PRIMARY KEY (IDAUXCOLETA);)";


	private static final String EMPRESA = "CREATE TABLE EMPRESA (" +
			"IDAUXEMPRESA INTEGER NOT NULL," + 
			"NMFANTASIA VARCHAR(250) NOT NULL," + 
			"NMCONTATO VARCHAR(250) NOT NULL, " +
			"SOBRENOME VARCHAR(255), " +
			"NMAREACONTATO VARCHAR(255)," + 
			"DDD VARCHAR(250), " +
			"FONE VARCHAR(250), " +
			"RAMAL VARCHAR(250), " +
			"DDDCELULAR VARCHAR(250)," + 
			"CELULAR VARCHAR(250)," +  
			"CONSTRAINT [PK_EMPRESA] PRIMARY KEY (IDAUXEMPRESA);)";


	private static final String CFGFTP = "CREATE TABLE CFGFTP (" +
			"CDFTP INTEGER NOT NULL, " +
			"IPFTP VARCHAR(250) NOT NULL," + 
			"LOGINFTP VARCHAR(250) NOT NULL," + 
			"SENHAFTP VARCHAR(250) NOT NULL," +
			"CONSTRAINT [PK_CFGFTP] PRIMARY KEY (CDFTP);)";


	private static final String USUARIO = "CREATE TABLE USUARIO (" +
			"CDUSUARIO INTEGER NOT NULL," + 
			"NMUSUARIO VARCHAR(250) NOT NULL," + 
			"LOGIN VARCHAR(250) NOT NULL, " +
			"SENHA VARCHAR(250) NOT NULL,  " +
			"CDFTP INTEGER NOT NULL,  " +
			"CONSTRAINT [PK_USUARIO] PRIMARY KEY (CDUSUARIO)," +
			"FOREIGN KEY (CDFTP) REFERENCES CFGFTP(CDFTP) ON UPDATE CASCADE ON DELETE CASCADE);)";


	private static final String AMOSTRA ="CREATE TABLE AMOSTRA (" +
			"CDAMOSTRA INTEGER NOT NULL," + 
			"IDAMOSTRA VARCHAR(250), " +
			"IDPROCESSO VARCHAR(250), " +
			"IDAUXPROCESSO INTEGER, " +
			"DTPREVISTA DATETIME, " +
			"DTCOLETA DATETIME, " +
			"FLCOLETADA CHAR(1) NOT NULL," + 
			"DTDOWNLOAD DATETIME, " +
			"DTUPLOAD DATETIME, " +
			"ENDERECOCOLETA VARCHAR(250)," + 
			"OBSERVACAO VARCHAR(250)," +
			"CDUSUARIO INTEGER NOT NULL," +  
			"IDAUXCOLETA INTEGER NULL," +
			"IDAUXEMPRESA INTEGER NOT NULL," +  
			"CONSTRAINT [PK_AMOSTRA] PRIMARY KEY (CDAMOSTRA)," +
			"FOREIGN KEY (CDUSUARIO) REFERENCES USUARIO(CDUSUARIO) ON UPDATE CASCADE ON DELETE CASCADE," +
			"FOREIGN KEY (IDAUXCOLETA) REFERENCES COLETA(IDAUXCOLETA) ON UPDATE CASCADE ON DELETE CASCADE," +
			"FOREIGN KEY (IDAUXEMPRESA) REFERENCES EMPRESA(IDAUXEMPRESA) ON UPDATE CASCADE ON DELETE CASCADE);)";

	private static final String GRPINFO ="CREATE TABLE GRPINFO(" +
			"CDGRPINFO INTEGER NOT NULL," +  
			"NMGRPINFO VARCHAR(250), " +
			"CONSTRAINT [PK_GRPINFO] PRIMARY KEY (CDGRPINFO);)";


	private static final String INFO ="CREATE TABLE INFO(" +
			"CDINFO INTEGER NOT NULL," +  
			"NMINFO VARCHAR(250) NOT NULL," +
			"CDTIPODADO INTTEGER NOT NULL, " + 
			"CONSTRAINT [PK_INFO] PRIMARY KEY (CDINFO);)";


	private static final String INFOSAMOSTRA = "CREATE TABLE INFOSAMOSTRA(" +
			"CDAMOSTRA INTEGER NOT NULL," +
			"CDINFO INTEGER NOT NULL,  " +
			"CDGRPINFO INTEGER NOT NULL," +
			"VLINFO VARCHAR(250)," +
			"FLOBRIGATORIO CHAR(1) NOT NULL," +
			"FOREIGN KEY (CDINFO) REFERENCES INFO(CDINFO) ON DELETE CASCADE ON UPDATE CASCADE," + 
			"FOREIGN KEY (CDGRPINFO) REFERENCES GRPINFO(CDGRPINFO) ON DELETE CASCADE ON UPDATE CASCADE," +
			"FOREIGN KEY (CDAMOSTRA) REFERENCES AMOSTRA(CDAMOSTRA) ON DELETE CASCADE ON UPDATE CASCADE);)";


	private static final String OPCOESINFO = "CREATE TABLE OPCOESINFO (" +
			"CDINFO INTEGER NOT NULL, " +
			"CDOPCAO INTEGER NOT NULL, " +
			"NMOPCAO VARCHAR(250), " +
			"DESCOPCAO VARCHAR(250), " +
			"CONSTRAINT [PK_OPCOESINFO] PRIMARY KEY (CDOPCAO);)";



	public GerenciaBanco(Context context) {
		
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {

		db.execSQL(CFGFTP);
		db.execSQL(USUARIO);
		db.execSQL(EMPRESA);
		db.execSQL(GRPINFO);
		db.execSQL(INFO);
		db.execSQL(OPCOESINFO);
		db.execSQL(COLETA);
		db.execSQL(AMOSTRA);
		db.execSQL(INFOSAMOSTRA);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

Minha classe com os Dao’s


package br.com.mylims.model;

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

import br.com.mylims.auxiliares.GerenciaBanco;
import br.com.mylims.bean.ConfigFTP;
import br.com.mylims.bean.Usuario;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class ConfigFTPDao extends Activity{

	private static final String CATEGORIA = "coleta";
	
	
	private GerenciaBanco gerenciaDataBase;


	public boolean salvaFTP(ConfigFTP ftpBean){

		try {

			ContentValues valores = new ContentValues();

			valores.put("IPFTP", ftpBean.getIpFtp());
			valores.put("LOGINFTP", ftpBean.getLoginFtp());
			valores.put("SENHAFTP", ftpBean.getSenhaFtp());

			SQLiteDatabase db = gerenciaDataBase.getWritableDatabase();
			
			long sql = db.insert("CFGFTP", null, valores);

			if (sql > 0) {

				Log.i(CATEGORIA, "Dados FTP salvos com sucesso!");
				return true;

			} else {

				Log.i(CATEGORIA, "ERRO: Dados FTP  não foram salvos!");
				return false;
			}


		} catch (SQLException e) {

			Log.i(CATEGORIA, "ERRO: SQLException salvaFTP: " + e);
			return false;
		}

	}


	public List<ConfigFTP> pegaIdFtp(String ipFTP){

		String[] args = new String[]{ipFTP};

		Cursor c = gerenciaDataBase.getWritableDatabase().rawQuery("SELECT CDFTP FROM CFGFTP WHERE IPFTP = ?", args);
		

		try {

			List<ConfigFTP> lista = new ArrayList<ConfigFTP>();


			while (c.moveToNext()) {

				ConfigFTP ftp = new ConfigFTP();

				ftp.setIdFtp(c.getInt(0)); // CDFTP

				lista.add(ftp);


			}

			return lista;


		} catch (SQLException e) {


			Log.i(CATEGORIA, "MENSAGEM DE ERRO NO SQL: " + e);

			return null;

		}

		finally{

			c.close();
		}

	}


}