Montar DAO

normal ué … muda só a String da linha de comando da criação da tabela ué:

[quote] String TABELA_ATIVIDADE = "CREATE TABLE IF NOT EXISTS atividade (

idatividade INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT ,

materia_fk_ INT NULL ,

titulo VARCHAR(45) NULL ,

descricao VARCHAR(255) NULL ,

pontos FLOAT NULL ,

data DATETIME NULL ,

status VARCHAR(45) NULL ,

CONSTRAINT materia

FOREIGN KEY (`materia_fk_` )

REFERENCES `materia` (`idmateria` )

ON DELETE NO ACTION

ON UPDATE NO ACTION);";

[code]

O que está entre ‘’ seria os campos? Porque entre aspas? O meu não tem.

Boa noite

Dei um ctrl+c e ctrl+v e separei algumas coisas…lembrando que isto não foi testado é um quase um pseudo código do que normalmente eu faria

1º classe de conexão com SQLITE

  package br.me.aquasystem.banco;  
      
    import android.content.ContentValues;  
    import android.content.Context;  
    import android.database.Cursor;  
    import android.database.sqlite.SQLiteDatabase;  
    import android.database.sqlite.SQLiteException;  
    import android.database.sqlite.SQLiteOpenHelper;  
      
    public class DbAdapter {  
          
        private final Context mCtx;  
          
        private DatabaseHelper mDbHelper;  
        private SQLiteDatabase mDb;  
          
        public DbAdapter(Context ctx){  
            this.mCtx = ctx;  
        }  
          
        public DbAdapter open() throws SQLiteException{  
            if(isClosed()){  
                mDbHelper = new DatabaseHelper(mCtx);  
                mDb = mDbHelper.getWritableDatabase();  
            }  
            return this;  
        }  
          
        public void close(){  
            mDbHelper.close();  
        }  
          
        public boolean isClosed(){  
            return mDb == null || !mDb.isOpen();  
        }  
         
		public SQLiteDatabase getConnection(){
			return mDb;
		}
		 
        private class DatabaseHelper extends SQLiteOpenHelper{  
      
            public DatabaseHelper(Context context) {  
                super(context, DATABASE_NAME, null, DATABASE_VERSION);  
            }  
      
            @Override  
            public void onCreate(SQLiteDatabase db) {  
                db.execSQL(DATABASE_CREATE_CLIENTES);  
                db.execSQL(DATABASE_CREATE_CARROS);  
                db.execSQL(DATABASE_CREATE_TIPO_CARRO);  
                db.execSQL(DATABASE_CREATE_SERVICOS);  
                db.execSQL(DATABASE_CREATE_HORARIOS);  
                db.execSQL(DATABASE_CREATE_OS);  
            }  
      
            @Override  
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
            }  
              
        }  
          
    }  

2º classe abstrata com Constantes “maneira simples”, mas prefiro criar uma classe enum…

package br.me.aquasystem.banco; 

public abstract class ConstantsBD{

        public static final String DATABASE_NAME = "bancoaqua";  
        public static final int DATABASE_VERSION = 1;  
          
        public static final String DATABASE_TABLE_CLIENTES = "clientes";  
        public static final String DATABASE_TABLE_CARROS = "carros";  
        public static final String DATABASE_TABLE_TIPO_VEICULO = "tipo_veiculo";  
        public static final String DATABASE_TABLE_SERVICOS = "servicos";  
        public static final String DATABASE_TABLE_HORARIOS = "horarios";  
        public static final String DATABASE_TABLE_OS = "os";  
          
    //  CAMPOS DA TABELA CLIENTES     
        public static final String KEY_ID_CLI = "_id";  
        public static final String KEY_NOME = "nome";  
        public static final String KEY_ENDERECO = "endereco";  
        public static final String KEY_TELEFONE = "telefone";  
        public static final String KEY_CELULAR = "celular";  
        public static final String KEY_EMAIL = "email";  
      
    //  CAMPOS DA TABELA CARROS   
        public static final String KEY_ID_CARRO = "_id";  
        public static final String KEY_IDCLIENTE_CARRO = "id_cliente";  
        public static final String KEY_IDTIPO_CARRO = "id_tipo_carro";  
        public static final String KEY_MODELO = "car_modelo";  
        public static final String KEY_PLACA = "car_placa";  
      
    //  CAMPOS DA TABELA TIPO DE VEICULO      
        public static final String KEY_ID_TIP = "_id";  
        public static final String KEY_TIPDESC = "tip_descricao";  
          
    //  CAMPOS DA TABELA SERVICOS     
        public static final String KEY_ID_SER = "_id";  
        public static final String KEY_IDTIPO_SER = "id_tipo_carro";  
        public static final String KEY_DESCRICAO_SER = "ser_descricao";  
        public static final String KEY_VALOR = "ser_valor";  
          
    //  CAMPOS DA TABELA HORARIOS     
        public static final String KEY_ID_HOR = "_id";  
        public static final String KEY_HORARIO = "hor_horario";  
          
    //  CAMPOS DA TABELA OS   
        public static final String KEY_ID_OS = "_id";  
        public static final String KEY_IDCLIENTE_OS = "id_cliente";  
        public static final String KEY_IDSERVICO_OS = "id_servico";  
        public static final String KEY_IDHORARIO_OS = "id_horario";  
        public static final String KEY_DATA = "os_data";  
          
          
    //  CRIA A TABELA CLIENTES  
        public static final String DATABASE_CREATE_CLIENTES = "create table " + DATABASE_TABLE_CLIENTES + " ("  
        + KEY_ID_CLI + " integer primary key autoincrement, "  
        + KEY_NOME + " text, "  
        + KEY_ENDERECO + " text, "  
        + KEY_TELEFONE + " text, "  
        + KEY_CELULAR + " text, "  
        + KEY_EMAIL + " text);";  
          
    //  CRIA A TABELA CARROS      
        public static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("      
        + KEY_ID_CARRO + " integer primary key autoincrement, "      
        + KEY_IDCLIENTE_CARRO + " integer, "      
        + KEY_IDTIPO_CARRO + " integer, "      
        + KEY_MODELO + " text, "      
        + KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO      
        + " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI      
        + " ) ON DELETE RESTRICT ON UPDATE CASCADE , FOREIGN KEY ( "       
        + KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_VEICULO + " ("       
        + KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";   
          
    //  CRIA A TABELA TIPO_CARRO  
        public static final String DATABASE_CREATE_TIPO_CARRO = "create table " + DATABASE_TABLE_TIPO_VEICULO + " ("  
        + KEY_ID_TIP + " integer primary key autoincrement, "  
        + KEY_TIPDESC + " text);";  
      
    //  CRIA A TABELA SERVICOS  
        public static final String DATABASE_CREATE_SERVICOS = "create table " + DATABASE_TABLE_SERVICOS + " ("  
        + KEY_ID_SER + " integer primary key autoincrement, "  
        + KEY_IDTIPO_SER + " integer, "  
        + KEY_DESCRICAO_SER + " text, "  
        + KEY_VALOR + " text, FOREIGN KEY ( " + KEY_IDTIPO_SER  
        + " ) REFERENCES " + DATABASE_TABLE_TIPO_VEICULO + " (" + KEY_IDTIPO_SER  
        + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";  
          
    //  CRIA A TABELA HORARIOS  
        public static final String DATABASE_CREATE_HORARIOS = "create table " + DATABASE_TABLE_HORARIOS + " ("  
        + KEY_ID_HOR + " integer primary key autoincrement, "  
        + KEY_HORARIO + " text);";  
      
    //  CRIA A TABELA OS  
        public static final String DATABASE_CREATE_OS = "create table " + DATABASE_TABLE_OS + " ("      
        + KEY_ID_OS + " integer primary key autoincrement, "      
        + KEY_IDCLIENTE_OS + " integer, "      
        + KEY_IDSERVICO_OS  + " integer, "      
        + KEY_IDHORARIO_OS + " integer ,"    
        + KEY_MODELO + " text, "      
        + KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_OS      
        + " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI      
        + " ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( "       
        + KEY_IDSERVICO_OS + " ) REFERENCES "       
        + DATABASE_TABLE_SERVICOS + " (" + KEY_IDSERVICO_OS      
        + " ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( "       
        + KEY_IDHORARIO_OS + " ) REFERENCES " + DATABASE_TABLE_HORARIOS + " ("       
        + KEY_IDHORARIO_OS + " ) ON DELETE RESTRICT ON UPDATE CASCADE);"; 

} 

3º uma classe Dao p/Veiculo, o ideal é criar uma classe Bean para usar junto com a Dao

package br.me.aquasystem.banco; 

import java.util.*;
import android.content.ContentValues;  
import android.database.sqlite.SQLiteDatabase; 
import android.database.Cursor;   

public class VeiculoDao{
	
	 private DbAdapter adapter;  
	 
     public VeiculoDao(DbAdapter adapter){
		this.adapter=adapter;
	 }

    public List<Veiculos> getTodosTipoVeiculo(){  
	    List<Veiculo> veiculos=new ArrayList<Veiculo>();
	    SQLiteDatabase mDb=adapter.getConnection();
        Cursor cursor=null;
		Veiculo veiculo=null;
		
		try{
		    cursor=mDb.query(DATABASE_TABLE_TIPO_VEICULO, null, null, null, null, null, null); 
			cursor.moveToFirst()
			
			while(!cursor.moveToLast()){
				veiculo=new Veiculo();
				veiculo.setPlaca(cursor.getColumnNames(cursor.getColumnIndex("VEI_PLACA")));
				/*
				  VARRE O CURSOR SETANDO TODOS BEANS
				*/
				veiculos.add(veiculo);
			  cursor.moveToNext();
			}
			
		}catch(Exception e){
			e.printStackTrace();	
		}finally{
			if(cursor != null)
			cursor.close;
		}	

			return veiculos;
    }  

}

Quando for usar :

        DbAdapter dbAdapter=new DbAdapter(this);
	VeiculoDao veiDao=new VeiculoDao(dbAdapter);
	List<Veiculo> veiculos=null;
	
	try{
		dbAdapter.open()
		veiculos=veiDao.listar();
	}catch(Exception e){
	   e.printStackTrace();
	}finally{
		 if(!dbAdapter.isClosed())
			dbAdapter.close();
	}

Separe tudo em camadas “pacotes”, use uma arquitetura p/desenvolver, padrões como singleton “toda classe tem a sua responsabilidade”, eu particulamente uso o MVC - Model , View , Control.

Model = Bean, Dao "onde mantem os dados e persiste"
View = Activity "tudo que for visual"
Controle = Adapters “tudo que faça controle sobre a View”

Abraço :wink:

Ok, mas como seria essa Classe Bean?

Boa noite

A classe Bean é uma entidade ou seja um objeto do mundo real,
que possui atributos que devem ter acesso atraves de métodos getters e setters “encapsulamento”.

O eclipse tem um gerador de código p/os metodos getter/setter, só é preciso escrever isto…

public class Veiculo {
	
	private String placa;
	private int    ano;
	private double chassi;
	private String marca;
	private String modelo;
 
        //coloque o cursor do teclado aqui e clique com botão direito do mouse Source > Generate Getters and Setters
}

resultado será…

public class Veiculo {
	
	private String placa;
	private int    ano;
	private double chassi;
	private String marca;
	private String modelo;
	
	public String getPlaca() {
		return placa;
	}
	public void setPlaca(String placa) {
		this.placa = placa;
	}
	public int getAno() {
		return ano;
	}
	public void setAno(int ano) {
		this.ano = ano;
	}
	public double getChassi() {
		return chassi;
	}
	public void setChassi(double chassi) {
		this.chassi = chassi;
	}
	public String getMarca() {
		return marca;
	}
	public void setMarca(String marca) {
		this.marca = marca;
	}
	public String getModelo() {
		return modelo;
	}
	public void setModelo(String modelo) {
		this.modelo = modelo;
	}
	
}

mais detallhes : http://pt.wikipedia.org/wiki/JavaBeans

Obrigado pelo retorno. Ok, então como ficaria todas as classes prontas com essa Bean?

eu separo em 4 pacotes:

. model;
. repositorio(dao);
. adpter;
. activity(view);

Valerio, posta aqui as classes, tem como?

Opa

Tenho um exemplo no GitHUb fiz um simples M.V.C: “Model,View, Control”.
O exemplo é ListView c/custom Adapter que mostra alguns países:
https://github.com/SolutionBTO/AppAndroidListView_MVC/

O botão [ZIP] vc baixa todo projeto, ou importar com url no eclipse:
http://www.yaw.com.br/screencast/show/eclipse-plugin-egit/

Ok, vou baixar. Esse link: http://www.yaw.com.br/screencast/show/eclipse-plugin-egit/ é pra usar no Eclipse?

Tem CRUD?

Uma dúvida pertinente,

Como faço os relacionamentos das tabelas no SQLite?

Certo.

Este link do tutorial para egit, não é framework para CRUD, é um framework p/controle de versão, com ele vc pode importar os projeto do GITHUB “repositorio web”, lá no GITHUB tem vários projetos que pode usar como parâmetro.

Enquanto a relacionamento de tabelas :http://www.sqlite.org/lang.html

Ok, obrigado. Então uso o link do egit?

Teria algum bd do sqlite com relacionamento para que possa pegar de modelo?

Não necessariamente precisa usar o egit, pode somente baixar o exemplo e importar no eclipse, na página do GITHUB tem um botão [ZIP] p/todos projetos lá.

Fiz os minhas tabelas no sqlite sem relacionamento até hoje, tb não sei como funciona , mas neste site que te passei,
tem toda documentação.

Por gentileza, se foi resolvido o lance do Montar DAO, edite seu post para [RESOLVIDO] Montar Dao, e abra outro post para resolver este lance
do relacionamento, desta maneira podera separar os assuntos e ajudar outras pessoas, com a mesma dúvida :wink:

Falow

Ok, tópico resolvido.

Primeiramente, não acho que a criação das tabelas tenha que ficar no adapter, mas sim numa classe a parte que tenha exclusivamente essa responsabilidade.

Depois, verifique quais são os métodos relacionados ao CRUD que estão no Adapter e que você quer portar para o DAO especializado (marque-os como Abstract e remova o corpo dos mesmos, terminando os métodos com ;).
Ex.: // ALTERAR TIPO VEÍCULO public boolean alterarTipoVeiculo(long Id, String tipo){ ContentValues valores = new ContentValues(); valores.put(KEY_TIPDESC, tipo); return mDb.update(DATABASE_TABLE_TIPO_VEICULO, valores, KEY_ID_TIP + "=" + Id, null) > 0; }
Mude para // ALTERAR TIPO VEÍCULO public abstract boolean alterarTipoVeiculo(long Id, String tipo);

Faça com que teu DAO especializado herde o Adapter.

Veja que, ao fazer isso apenas, não necessariamente tornou teu Adapter mais genérico. Você deve fazer uma análise de suas necessidades de modo que possa especializar mais o Adapter para ser utilizado para outros DAOs.

[quote=fbrigatt]Alguém ajuda?[/quote]Você tentou fazer alguma coisa? Ou está esperando a resposta? Pois aqui já tem alguns passo-a-passos a serem seguidos.
Se o que foi respondido não é exatamente o que deseja, acredito que seja necessário você explicar melhor tua necessidade.

Posta onde você está instanciando e usando a DbAdapter.
Porém, poste as alterações que fez e, se possível, qual o erro está ocorrendo.

Estava esperando uma tentativa de alteração sua, ou seja, a DbAdapter alterada e a TipoVeiculoDAO implementada (e se houvesse erros, postasse também). Mas você postou a mesma classe DbAdapter que já tinha postado anteriormente.

Acredito que você não esteja lendo as mensagens ou mesmo tentando e apenas esperando que alguém altere para você.