Dúvida if dentro de um DAO

10 respostas
M

Pessoal boa tarde, vamos ver se alguem consegue me ajudar,
sou iniciante e estou testando um sistema de cadastro de mensalidades, no jsp eu cadastro a mensalidade atrasada e tem o mesreferencia onde eu coloco o nome do mes no banco de dados, porem agora eu quero listar as mensalidades atrasadas porem quero ordenar os meses de janeiro a dezembro, pois agora sai fora de ordem, para isso eu criei uma coluna onde eu coloco de 1 a 12 referenciando aos meses, assim ordeno na pesquisa pelo numero do mes, 3 = março etc.
no dao eu gostaria de fazer um if assim:

if(contato.getMensalidade().getMesreferencia() == "MARÇO") {
			//mesref = '3';
			contato.getMensalidade().setMesref('3');
			//contato.getMensalidade().setMesref("3");
			
		}

mas para o banco esta indo o valor 0 nao 3, como eu poderia fazer isso?
segue o dao completo:

public class CadastraMensalidadeEmAtrasoDAO {
	private int mesref;
	private final Connection connection;

	public CadastraMensalidadeEmAtrasoDAO() {
		try {
			connection = new ConnectionFactory().getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	
	
	public boolean cadastraMensalidade(Contato contato) throws Exception{

		
		
		PreparedStatement stmt = null;
		stmt.setString(1, contato.getMensalidade().getMesreferencia());
		if(contato.getMensalidade().getMesreferencia() == "MARÇO") {
			//mesref = '3';
			contato.getMensalidade().setMesref('3');
			//contato.getMensalidade().setMesref("3");
			
		} 	    
		    stmt = connection.prepareStatement("SELECT * FROM TB_TB_CONTATO WHERE MATRICULA = ?");

		    stmt.setInt(1, contato.getMatricula());
		    
		    
		    ResultSet rs = stmt.executeQuery();
		    
		    	if(rs.next()){
		        
		    		contato.setId_contato(rs.getInt("ID_CLIENTE"));
		    		contato.setNomecompleto(rs.getString("NOMECOMPLETO"));
		    		contato.setMatricula(rs.getInt("MATRICULA"));
		    		
		    			}else{return false;}

		    				stmt.clearParameters();
		     
		    				
		     	stmt = connection.prepareStatement("INSERT INTO TB_TB_MENSALIDADE VALUES(null,?,?,?,null,?,?,?,?,null,?,?)");
			    stmt.setInt(1, contato.getId_contato());
			    stmt.setInt(2, contato.getMatricula());
			    stmt.setString(3, contato.getNomecompleto());
			    stmt.setFloat(4, contato.getMensalidade().getValormensalidade());
			    	    
			    stmt.setFloat(5, contato.getMensalidade().getMesref());
			    stmt.setString(6, contato.getMensalidade().getMesreferencia());
			    
			    stmt.setString(7, contato.getMensalidade().getAnoreferencia());
			    stmt.setDate(8, new Date(contato.getMensalidade().getDt_cadastro().getTimeInMillis()));
			    stmt.setInt(9, contato.getMensalidade().getPagamentook());
			    
				

			    stmt.execute();
			    stmt.clearParameters();
		     

		    return false;

		  }

}

10 Respostas

R

porquê ‘mesRef’ é um float?

P

Olá,

contato.getMensalidade().getMesreferencia() == “MARÇO”

É isso mesmo que você quer? ou seria isso:

contato.getMensalidade().getMesreferencia().equals(“MARÇO”)

Esse “detalhe” pode lhe trazer problemas mais tarde… be careful!

[ ]'s

G

Na versão 7 do java você vai poder fazer switch com String, ai tudo vai ficar mais simples.
Mas para resolver até que o java 7 não sai é simples, cria um enum com os meses.

Nicolas_Fernandes

mouzer:
Pessoal boa tarde, vamos ver se alguem consegue me ajudar,
sou iniciante e estou testando um sistema de cadastro de mensalidades, no jsp eu cadastro a mensalidade atrasada e tem o mesreferencia onde eu coloco o nome do mes no banco de dados, porem agora eu quero listar as mensalidades atrasadas porem quero ordenar os meses de janeiro a dezembro, pois agora sai fora de ordem, para isso eu criei uma coluna onde eu coloco de 1 a 12 referenciando aos meses, assim ordeno na pesquisa pelo numero do mes, 3 = março etc.
no dao eu gostaria de fazer um if assim:

if(contato.getMensalidade().getMesreferencia() == "MARÇO") {
			//mesref = '3';
			contato.getMensalidade().setMesref('3');
			//contato.getMensalidade().setMesref("3");
			
		}

mas para o banco esta indo o valor 0 nao 3, como eu poderia fazer isso?
segue o dao completo:

public class CadastraMensalidadeEmAtrasoDAO {
	private int mesref;
	private final Connection connection;

	public CadastraMensalidadeEmAtrasoDAO() {
		try {
			connection = new ConnectionFactory().getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	
	
	public boolean cadastraMensalidade(Contato contato) throws Exception{

		
		
		PreparedStatement stmt = null;
		stmt.setString(1, contato.getMensalidade().getMesreferencia());
		if(contato.getMensalidade().getMesreferencia() == "MARÇO") {
			//mesref = '3';
			contato.getMensalidade().setMesref('3');
			//contato.getMensalidade().setMesref("3");
			
		} 	    
		    stmt = connection.prepareStatement("SELECT * FROM TB_TB_CONTATO WHERE MATRICULA = ?");

		    stmt.setInt(1, contato.getMatricula());
		    
		    
		    ResultSet rs = stmt.executeQuery();
		    
		    	if(rs.next()){
		        
		    		contato.setId_contato(rs.getInt("ID_CLIENTE"));
		    		contato.setNomecompleto(rs.getString("NOMECOMPLETO"));
		    		contato.setMatricula(rs.getInt("MATRICULA"));
		    		
		    			}else{return false;}

		    				stmt.clearParameters();
		     
		    				
		     	stmt = connection.prepareStatement("INSERT INTO TB_TB_MENSALIDADE VALUES(null,?,?,?,null,?,?,?,?,null,?,?)");
			    stmt.setInt(1, contato.getId_contato());
			    stmt.setInt(2, contato.getMatricula());
			    stmt.setString(3, contato.getNomecompleto());
			    stmt.setFloat(4, contato.getMensalidade().getValormensalidade());
			    	    
			    stmt.setFloat(5, contato.getMensalidade().getMesref());
			    stmt.setString(6, contato.getMensalidade().getMesreferencia());
			    
			    stmt.setString(7, contato.getMensalidade().getAnoreferencia());
			    stmt.setDate(8, new Date(contato.getMensalidade().getDt_cadastro().getTimeInMillis()));
			    stmt.setInt(9, contato.getMensalidade().getPagamentook());
			    
				

			    stmt.execute();
			    stmt.clearParameters();
		     

		    return false;

		  }

}

Bom, eu penso assim:

Mês deveria ser uma entidade e, na entidade Matricula, deveria existir um atributo MesReferencia que fosse chave para a entidade Mes.

Assim, é só você passar o objeto do mês 3 para o objeto contato que ele se vira depois… Daria pra ficar algo assim:

Na sua View, você teria uma DropDown que teriam os meses. Quando você receber os dados da sua JSP no seu Servlet, você vai receber o objeto selecionado. Este objeto conterá o código e a descrição do mês. Coloque o seu objeto Mes no lugar que você está colocando, e o seu DAO cuida do resto!

Entendeu mais ou menos?
Abraço!

M

fala nicolas, blz?
eu entendi mais ou menos, sou bem iniciante mesmo, eu consegui resolver com a dica do schranko só não sei se é a melhor forma de se fazer isso, segue oq eu fiz para resolver:

public boolean cadastraMensalidade(Contato contato) throws Exception{

		
		
		PreparedStatement stmt = null;
		if(contato.getMensalidade().getMesreferencia().equals("JANEIRO")) {
			contato.getMensalidade().setMesref(1);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("FEVEREIRO")) {
			contato.getMensalidade().setMesref(2);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("MARÇO")) {
			contato.getMensalidade().setMesref(3);
		} else if 
		(contato.getMensalidade().getMesreferencia().equals("ABRIL")) {
		 	contato.getMensalidade().setMesref(4);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("MAIO")) {
				contato.getMensalidade().setMesref(5);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("JUNHO")) {
			contato.getMensalidade().setMesref(6);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("JULHO")) {
			contato.getMensalidade().setMesref(7);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("AGOSTO")) {
			contato.getMensalidade().setMesref(8);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("SETEMBRO")) {
			contato.getMensalidade().setMesref(9);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("OUTUBRO")) {
			contato.getMensalidade().setMesref(10);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("NOVEMBRO")) {
			contato.getMensalidade().setMesref(11);
		} else if
		(contato.getMensalidade().getMesreferencia().equals("DEZEMBRO")) {
			contato.getMensalidade().setMesref(12);			
		}

obrigado a todos pela ajuda

nel

Bom dia.

Conhece ENUM?
Se não conhece, clique aqui e principalmente Aqui!.

No segundo link é utilizado exatamente para a sua necessidade, ou seja, com meses.
Seria algo como você registrar o nome do mês e o seu respectivo número em uma única variavél.

Dá uma olhada nos links que serão muito útil, em especial no segundo.
Abraços.

Nicolas_Fernandes

Ainda acho mais válido fazer uma classe para representar o mês ou fazer uso de Enumerators.

M

muito obrigado a todos, ainda sou iniciante, tenho muita coisa a aprender,
vou estudar todas as dicas dadas e no futuro projetar um sistema melhor.

SDS

M

estava lendo sobre o enum e me bateu uma duvida…
como ficaria o DAO, a action e o jsp se eu utilizasse este enum?

agora como visto preciso desda informacao no banco de dados, para quando eu realizar a pesquisa no banco poder ordenar os meses de janeiro a dezembro, antes saia no relatorio tudo fora de ordem, ou seja, na ordem cadastrada no banco de dados, saia fevereiro, jabeiro dezembro marco, e eu gostaria que saisse janeiro fevereiro marco dezembro etc.

abraço a todos

M

Veja essa implementação:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.NoSuchElementException;

public enum Month {

	JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;

	private String name;

	private Month() {
		Date d = new GregorianCalendar(0, ordinal(), 1).getTime();
		name = new SimpleDateFormat("MMMM").format(d);
	}

	public int getNumber() {
		return ordinal();
	}

	@Override
	public String toString() {
		return name;
	}

	public static Month getInstance(String name) {
		for (Month m : values()) {
			if (m.toString().equalsIgnoreCase(name)) {
				return m;
			}
		}
		throw new NoSuchElementException("There is no month called '" + name
				+ "'");
	}

}

E veja esse exemplo:

//import java.util.Locale;

public class Test1 {

	public static void main(String[] args) {
		// essa implementação é independente de Locale
		// descomente a linha a seguir e a do importe e veja o resultado
		// Locale.setDefault(Locale.ENGLISH);
		for (Month m : Month.values()) {
			System.out.printf("%d -> %s%n", m.getNumber(), m);
		}
		System.out.println(Month.getInstance("janeiro").getNumber());
		System.out.println(Month.getInstance("JANEIRO").getNumber());
		System.out.println(Month.getInstance("JaNeIrO").getNumber());
		System.out.println(Month.getInstance("jAnEiRo").getNumber());
	}

}
Criado 11 de setembro de 2010
Ultima resposta 12 de set. de 2010
Respostas 10
Participantes 7