Consulta ao banco de dados, de JDBC para Hibernate

3 respostas
F

Galera, aqui na empresa estamos modificando nosso projeto, e uma das modificações está relacionada a persistência dos dados. Estamos mudando de JDBC para Hibernate, mas estou com uma certa dificuldade na consulta.
Como eu posso passar essa Query de JDBC para Hibernate?

public List<HashMap<String, Object>> listar_dados(String UF) {
		conectar();

		String filtro = new String();

		if (UF.equalsIgnoreCase("BR")) {
			filtro = "";
		} else if (UF.equalsIgnoreCase("CO")) {
			filtro = " WHERE (UF ='GO' or UF ='DF' or UF ='MT' or UF ='MS')";
		} else if (UF.equalsIgnoreCase("S")) {
			filtro = " WHERE (UF ='RS' or UF ='SC' or UF ='PR')";
		} else if (UF.equalsIgnoreCase("SD")) {
			filtro = " WHERE (UF ='SP' or UF ='MG' or UF ='RJ' or UF ='ES')";
		} else if (UF.equalsIgnoreCase("N")) {
			filtro = " WHERE (UF ='AC' or UF ='AP' or UF ='AM' or UF ='PA' or UF ='RO' or UF ='RR' or UF ='TO')";
		} else if (UF.equalsIgnoreCase("NE")) {
			filtro = " WHERE (UF ='AL' or UF ='BA' or UF ='CE' or UF ='MA' or UF ='PB' or UF ='PE' or UF ='PI' or UF ='RN' or UF ='SE')";
		} else {
			filtro = " WHERE UF = '" + UF + "'";
		}
		List<HashMap<String, Object>> lista_dados = new ArrayList<HashMap<String, Object>>();
		try {

			statement = conexao
					.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
							ResultSet.CONCUR_READ_ONLY);			
			resultset = statement.executeQuery("SELECT ordem, tipo, sum(`2011`) as a2011, "
							+ "sum(`2012`) as a2012, sum(`2013`) as a2013, "
							+ "sum(`2014`) as a2014, sum(`2015`) as a2015  FROM planoconveniencia"
							+ filtro + " GROUP BY tipo ORDER BY ordem");			
			while (resultset.next()) {

				HashMap<String, Object> hashmap_dados = new HashMap<String, Object>();
				hashmap_dados.put("ordem", resultset.getString("ordem"));
				hashmap_dados.put("tipo", resultset.getString("tipo"));
				hashmap_dados.put("a2011", resultset.getDouble("a2011"));
				hashmap_dados.put("a2012", resultset.getDouble("a2012"));
				hashmap_dados.put("a2013", resultset.getDouble("a2013"));
				hashmap_dados.put("a2014", resultset.getDouble("a2014"));
				hashmap_dados.put("a2015", resultset.getDouble("a2015"));  
				lista_dados.add(hashmap_dados);
			}

		} catch (SQLException Banco) {
			JOptionPane.showMessageDialog(null,
					"Erro na manipulação de banco: " + Banco);
		}
		// JOptionPane.showMessageDialog(null, "Passou por aqui!");
		desconectar();
		return lista_dados;
	}

3 Respostas

drsmachado

Se quiser com criteria, dá uma olhada

public List<HashMap<String, Object>> listar_dados(String UF) {  
            conectar();  
			Criteria criteria = sessao.createCriteria(ClasseDaConsulta.class);
            String filtro = new String();  
      
            if (UF.equalsIgnoreCase("BR")) {  
				//não adiciona nada
                filtro = "";  
            } else if (UF.equalsIgnoreCase("CO")) {  
				//usando criteria fica mais fácil. Deve ficar algo assim (não estou certo, pois to sem tempo pra testar
				criteria.add(Restrictions.in(UF, new String[]{"GO", "DF", "MT", "MS"});
                //filtro = " WHERE (UF ='GO' or UF ='DF' or UF ='MT' or UF ='MS')";  
            } else if (UF.equalsIgnoreCase("S")) {  
                filtro = " WHERE (UF ='RS' or UF ='SC' or UF ='PR')";  
            } else if (UF.equalsIgnoreCase("SD")) {  
                filtro = " WHERE (UF ='SP' or UF ='MG' or UF ='RJ' or UF ='ES')";  
            } else if (UF.equalsIgnoreCase("N")) {  
                filtro = " WHERE (UF ='AC' or UF ='AP' or UF ='AM' or UF ='PA' or UF ='RO' or UF ='RR' or UF ='TO')";  
            } else if (UF.equalsIgnoreCase("NE")) {  
                filtro = " WHERE (UF ='AL' or UF ='BA' or UF ='CE' or UF ='MA' or UF ='PB' or UF ='PE' or UF ='PI' or UF ='RN' or UF ='SE')";  
            } else {  
                filtro = " WHERE UF = '" + UF + "'";  
            }  
            List<HashMap<String, Object>> lista_dados = new ArrayList<HashMap<String, Object>>();  
            try {  
				//ao invés de tudo isto, bastaria
				return criteria.list();
                statement = conexao  
                        .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,  
                                ResultSet.CONCUR_READ_ONLY);              
                resultset = statement.executeQuery("SELECT ordem, tipo, sum(`2011`) as a2011, "  
                                + "sum(`2012`) as a2012, sum(`2013`) as a2013, "  
                                + "sum(`2014`) as a2014, sum(`2015`) as a2015  FROM planoconveniencia"  
                                + filtro + " GROUP BY tipo ORDER BY ordem");              
                while (resultset.next()) {  
      
                    HashMap<String, Object> hashmap_dados = new HashMap<String, Object>();  
                    hashmap_dados.put("ordem", resultset.getString("ordem"));  
                    hashmap_dados.put("tipo", resultset.getString("tipo"));  
                    hashmap_dados.put("a2011", resultset.getDouble("a2011"));  
                    hashmap_dados.put("a2012", resultset.getDouble("a2012"));  
                    hashmap_dados.put("a2013", resultset.getDouble("a2013"));  
                    hashmap_dados.put("a2014", resultset.getDouble("a2014"));  
                    hashmap_dados.put("a2015", resultset.getDouble("a2015"));    
                    lista_dados.add(hashmap_dados);  
                }  
      
            } catch (SQLException Banco) {  
                JOptionPane.showMessageDialog(null,  
                        "Erro na manipulação de banco: " + Banco);  
            }  
            // JOptionPane.showMessageDialog(null, "Passou por aqui!");  
            desconectar();  
            return lista_dados;  
        }

Deve ficar assim, como disse, não posso testar agora.

F

Opa, brigadão cara, vou testar aqui.
Aproveitando o embalo, no caso dessa consulta aqui, bastaria utilizar criteria igual no código de cima?

public List listar_tipologia() {
		conectar();

		List lista_dados = new ArrayList();
		DateFormat formataData = new SimpleDateFormat("dd/MMM/yyyy");
		try {

			statement = conexao
					.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
							ResultSet.CONCUR_READ_ONLY);
			resultset = statement.executeQuery(" SELECT inauguracao.tipologia, Count(inauguracao.nome) AS qtd FROM inauguracao WHERE " +
					"inauguracao.tipologia <>  ' ' AND inauguracao.dia >=  '2011-01-01' AND inauguracao.dia <=  now() GROUP BY " +
					"inauguracao.tipologia ORDER BY qtd DESC");
			while (resultset.next()) {

				HashMap hashmap_dados = new HashMap();
				//String dia = formataData.format(resultset.getDate("dia"));			
				hashmap_dados.put("tipologia", resultset.getString("tipologia"));
				hashmap_dados.put("qtd", resultset.getString("qtd"));
				lista_dados.add(hashmap_dados);
			}

		} catch (SQLException Banco) {
			JOptionPane.showMessageDialog(null,
					"Erro na manipulação de banco: " + Banco);
		}
		desconectar();
		return lista_dados;
	}
drsmachado
Firej:
Opa, brigadão cara, vou testar aqui. Aproveitando o embalo, no caso dessa consulta aqui, bastaria utilizar criteria igual no código de cima?
public List listar_tipologia() {
		conectar();

		List lista_dados = new ArrayList();
		DateFormat formataData = new SimpleDateFormat("dd/MMM/yyyy");
		try {

			statement = conexao
					.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
							ResultSet.CONCUR_READ_ONLY);
			resultset = statement.executeQuery(" SELECT inauguracao.tipologia, Count(inauguracao.nome) AS qtd FROM inauguracao WHERE " +
					"inauguracao.tipologia <>  ' ' AND inauguracao.dia >=  '2011-01-01' AND inauguracao.dia <=  now() GROUP BY " +
					"inauguracao.tipologia ORDER BY qtd DESC");
			while (resultset.next()) {

				HashMap hashmap_dados = new HashMap();
				//String dia = formataData.format(resultset.getDate("dia"));			
				hashmap_dados.put("tipologia", resultset.getString("tipologia"));
				hashmap_dados.put("qtd", resultset.getString("qtd"));
				lista_dados.add(hashmap_dados);
			}

		} catch (SQLException Banco) {
			JOptionPane.showMessageDialog(null,
					"Erro na manipulação de banco: " + Banco);
		}
		desconectar();
		return lista_dados;
	}
Cada caso é um caso. Naquele eu citei pela forma como estava. Neste você terá que adaptar muitas coisas. Talvez HQL seja mais simples...
Criado 18 de maio de 2012
Ultima resposta 18 de mai. de 2012
Respostas 3
Participantes 2