Consulta entre datas

Estou tentando fazer uma consulta entre datas, mas esta ocorrendo alguns erros, alguém pode me ajudar ?, segue meu código.
Banco Mysql

public ListgetLista(String dataInicial, String dataFinal) throws SQLException {
String sql = “select * from movimentacao where data BETWEEN ? AND ?”;

PreparedStatement stmt = connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();

stmt.setString(1, dataInicial);
stmt.setString(2, dataFinal);

List minhaLista = new ArrayList();
while(rs.next()){
Fornecedor c1 = new Fornecedor();
FornecedorDAO dao = new FornecedorDAO();

c1.setDoc(rs.getString(“doc”));
c1.setTipo_doc(rs.getString(“tipo_doc”));
c1.setNome(rs.getString(“nome”));
c1.setEndereco(rs.getString(“endereco”));
c1.setEmail(rs.getString(“email”));

//Date d = rs.getDate(“data”); // a data
//SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”); // formato de data desejado
//String s = sdf.format(d); // data formatada
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate(“data”));
c1.setData(data);

minhaLista.add(c1);
}
rs.close();
stmt.close();
return minhaLista;

}
}

Classe onde quero mostrar os dados.

public class listarFornecedor {

public static void main(String[] args) throws SQLException {

FornecedorDAO dao = new FornecedorDAO();
String dataInicial = null;
String dataFinal = null;

List minhaLista = dao.getLista(dataInicial, dataFinal);

dataInicial = JOptionPane.showInputDialog(“digite a data inicial”);
dataFinal = JOptionPane.showInputDialog(“digite a data final”);

for (Fornecedor fornecedor : minhaLista)

System.out.println(“doc :” +fornecedor.getDoc());
SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
System.out.println(sdf.format( fornecedor.getData().getTime()));
System.out.println(“tipo_doc :” +fornecedor.getTipo_doc());
System.out.println(“nome :” +fornecedor.getNome());
System.out.println(“endereco :” + fornecedor.getEndereco());
System.out.println(“email :” +fornecedor.getEmail());

}

}

Em primeiro lugar, aconselho a leres isto. Será muito mais fácil que depois alguém olhe para o teu código e te ajude.

E convém que digas que erros ou problemas estás a ter. “mas esta ocorrendo alguns erros” não diz nada sobre que erros estão a ocorrer e assim se torna dificil de ajudar.

Colocar na categoria certa também é importante e não me parece que isto seja de Java Avançado.

Finalmente, e não sei se esse será o único problema do teu código mas tens isto trocado:

[quote=RuanSjp]

[code]
PreparedStatement stmt = connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();

stmt.setString(1, dataInicial);
stmt.setString(2, dataFinal);

[/code] [/quote]

O set dos parâmetros é antes da execução da query.

PreparedStatement stmt = connection.prepareStatement(sql); 

stmt.setString(1, dataInicial); 
stmt.setString(2, dataFinal); 

ResultSet rs = stmt.executeQuery(); 

E para as datas formatadas… (não sei como está no BD…) faça assim:

AND to_char( dt_sistema, 'DD/MM/YYYY') between ((?::varchar)) and ((?::varchar)) 

Assim uso para postgres, mas acho que para MySql funciona tbm

n precisa formatar as datas, é só colocar o campo de data como Calendar e usar o stmt.setDate ao inves do setString

[quote=Pacato]E para as datas formatadas… (não sei como está no BD…) faça assim:

AND to_char( dt_sistema, 'DD/MM/YYYY') between ((?::varchar)) and ((?::varchar)) 

Assim uso para postgres, mas acho que para MySql funciona tbm[/quote]

Nem reparei nisso, mas essa é uma péssima dica.

Para datas deve usar o setDate e ter os campos no código como Date ou Calendar.
O único sítio onde deve haver formatação para String é na interface com o utilizador, onde se mostra ou se recolhem dados num determinado formato.

é… como falei não sei como está pegando esta data… mas outras conversções que usei já foram:

Date dtAtivacao;
stmt.setDate(1, new java.sql.Date((dtAtivacao).getTime()));

e

[code]
Calendar horaAtual;

stmt.setTimestamp(1, new java.sql.Timestamp(horaAtual.getTimeInMillis()));[/code]

Galera valeu pelas dicas, avancei um pouco mas agora esta dando outro erro, segue abaixo o codigo e abaixo o erro. Banco Mysql

public ResultSet getLogin(Date data1, Date data2) throws Exception {

	   String sql = "SELECT * FROM fornecedor  WHERE data BETWEEN ? AND ?";
               PreparedStatement stmt = connection.prepareStatement(sql);
               
               Calendar c = Calendar.getInstance();
               c.set(Calendar.DAY_OF_MONTH, 20);
               c.set(Calendar.MONTH, 3);
               c.set(Calendar.YEAR, 2013);
                                      
               java.sql.Date dt = new java.sql.Date(c.getTimeInMillis());
               
               
                              
               
                
                stmt.setDate(1, (java.sql.Date) data1);
                stmt.setDate(2, (java.sql.Date) data2);
                
                
                stmt.setDate(1, dt);
                stmt.setDate(2, dt);
                
	  ResultSet rs = stmt.executeQuery();
	   return rs;
   }
public static void main(String[] args) throws SQLException, Exception {
    
                
          
    
    
   
   
   
   String retorno = JOptionPane.showInputDialog("digite data1");
   Date data1 = new SimpleDateFormat("dd/MM/yyyy").parse(retorno);
   
   String retorno1 = JOptionPane.showInputDialog("digite data1");
   Date data2 = new SimpleDateFormat("dd/MM/yyyy").parse(retorno1);
     
    Relatorio rel = new Relatorio();
    rel.getLogin(data1, data2);
    
    Relatorio relatorio = new Relatorio();
    
    ResultSet rs = relatorio.getLogin(data1, data2);
    
     while(rs.next()){
         
        System.out.println("doc :" +rs.getString("nome"));
        
        
    
     }

    
}

}

run:
Exception in thread “main” java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
at dao.Relatorio.getLogin(Relatorio.java:56)
at dao.Relatorio.main(Relatorio.java:82)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 15 segundos)

amigo, primeiro tente colocar seus códigos nas tags [code] e [/code

Você está começando a se confundir, tem date (da biblioteca sql, da útil), calendar…

Não está dando para entender o que você quer… explique melhor…

Quer consultar as datas no bd e pegar os valores do resultado? quer ver apensa se retorna ou não (boolean)?

Se você misturar muito as datas vai acabar se confundindo… pois mexer com data já é chato, ainda misturando bibliotecas…rsrs…

Então eu preciso consultar os registros entre as duas datas, eu preciso que retorne para mostrar na tela. segue o codigo novamente.

[code]public ResultSet getLogin(Date data1, Date data2) throws Exception {

String sql = “SELECT * FROM fornecedor WHERE data BETWEEN ? AND ?”;
PreparedStatement stmt = connection.prepareStatement(sql);

Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 20);
c.set(Calendar.MONTH, 3);
c.set(Calendar.YEAR, 2013);

java.sql.Date dt = new java.sql.Date(c.getTimeInMillis());

stmt.setDate(1, (java.sql.Date) data1);
stmt.setDate(2, (java.sql.Date) data2);

stmt.setDate(1, dt);
stmt.setDate(2, dt);

ResultSet rs = stmt.executeQuery();
return rs;
}
public static void main(String[] args) throws SQLException, Exception {

String retorno = JOptionPane.showInputDialog(“digite data1”);
Date data1 = new SimpleDateFormat(“dd/MM/yyyy”).parse(retorno);

String retorno1 = JOptionPane.showInputDialog(“digite data1”);
Date data2 = new SimpleDateFormat(“dd/MM/yyyy”).parse(retorno1);

Relatorio rel = new Relatorio();
rel.getLogin(data1, data2);

Relatorio relatorio = new Relatorio();

ResultSet rs = relatorio.getLogin(data1, data2);

while(rs.next()){

System.out.println(“doc :” +rs.getString(“nome”));

}

}
}
[/code]

run:
Exception in thread “main” java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
at dao.Relatorio.getLogin(Relatorio.java:56)
at dao.Relatorio.main(Relatorio.java:82)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 15 segundos)

Bom… esse meu método faz uma consulta no BD e adiciona na variável… vi que vc está setando 4 valores para consulta… primeiro 2 depois outros 2… tente seguir este modelo, recebe um dado de uma classe, faz a consulta e adiciona na variável… é só vc trocar por tipo data ou que necessite… :



private static final String SQL_SIMCARD_EXISTE_SIMCARDDISPOSITIVO = " SELECT SIMCardDispositivo.Dispositivo_Numero AS dispositivo FROM SIMCardDispositivo WHERE SIMCardDispositivo.SIMCard_Numero = 	(?::varchar)::numeric";


	public String existeSimCardDispositivo(String simCard) {
		String dispositivo = null;
		Connection conn = null;
		PreparedStatement ps = null;

		try {
			conn = ConnectionManager.obterConexao();
			ps = conn.prepareStatement(SQL_SIMCARD_EXISTE_SIMCARDDISPOSITIVO);
			ps.setString(1, simCard);
			ResultSet rs = ps.executeQuery();
			
			while (rs.next()) {
				dispositivo = rs.getString("dispositivo");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			ConnectionManager.fecharConexao(conn, null, ps);
		}

		return dispositivo;
	}

Isso ps.setString(1, simCard); significa… colocar o valor no primeiro ? … como vc tem dois campos … dois valores… só que se vc repete, ele sobrescreve… e só vai aceitar os 2 últimos…

o que significa esse “(?::varchar)::numeric”?

Olá Luiz Augusto Prado

significa pegar uma variável do tipo varchar (String) e converter para numeric… essa nomenclatura é utilizada no postgresql, só deixei isso para ele ver que tem diversas formas de receber um valor e converter…

[quote=Pacato]Olá Luiz Augusto Prado

significa pegar uma variável do tipo varchar (String) e converter para numeric… essa nomenclatura é utilizada no postgresql, só deixei isso para ele ver que tem diversas formas de receber um valor e converter…[/quote]

bem legal!
obrigado Sr. Pacato.

Por nada… mas Sr não né? rsrs… abs