Socorro... erro na select

Alguem sabe oque pode estar errado em meu select?

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 2.

Abaixo um trecho do meu código…

Muito Obrigado!!

[code]
public LinkedList listaConciliados(int id, Date dataInicial, Date dataFinal) throws SQLException { //metodo que tras parametro o ID do usuario para fazer a select sobre ele, objeto tipo lista ligada(linked list)

       conn = retornaConn(); //recupera a conexão com o banco de dados
       
       Statement stmt = conn.createStatement();//cria um objeto que é responsável pelo envio de comandos e recuperação de resultados junto ao SGBD
                            
       LinkedList lancamentos  = new LinkedList(); //cria objeto do tipo lista para retornar a lista 
    
       double saldoCaixa = 0;
       double saldoBanco = 0;
       double saldoTotal = 0;
       
       
    try {
      
       
     
       
       ResultSet rs = stmt.executeQuery ("select * from Tab_Extrato where Data between dataInicial and dataFinal and RecDesp = 1 and CodUsuario LIKE '%" + id + "%'");

…[/code]

Uma outra duvida seria como converter uma String para uma java.sql.Date
estou usando a classe GregorianCalendar, porem seu formato não é oque eu preciso… gostaria de converter para dd/mm/yyyy e tb para mm/dd/yyyy e com o codigo abaixo só consigo yyyy/mm/dd…


public java.sql.Date ConverteData(String sdata){
         
         // recebe a data String converte paraDate SQL
         
        GregorianCalendar calendar = new GregorianCalendar();

        int ano = Integer.parseInt(sdata.substring(6,10)); // desmebra a String
        int mes = Integer.parseInt(sdata.substring(3, 5));
        int dia = Integer.parseInt(sdata.substring(0, 2));
            mes = mes-1; // pq aqui é assim 0 p/jan 1 p/fev...
            
        calendar.set(ano, mes, dia);

          Date data = new java.sql.Date(calendar.getTimeInMillis());
         
        return data;
     }

Tente…

SimpleDateFormat sdf = new SimpleDateFormart("mm/DD/yyyy"); sdf.parse(dataAserConvertida);

Ratinho…
Infelizmente não deu certo… acho que o objetos tipo Date da classe SQL só podem usar esse padrão mesmo… YYYY/MM/DD…

Mas vc não me falou nada a respeito do primeiro post nesse mesmo topico… a respeito da select… sabe oque pode ser??

Desde já obrigado!!

Irmao, fiz um exemplinho pra ti…

[code]import java.util.Date;
import java.text.*;

public class Teste {
public Teste() {
String data = "23/12/1986";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
Date date = sdf.parse(data);
System.out.println(DateFormat.getDateInstance(DateFormat.LONG).format(date));

     // Sequizer converter pra java.sql.Date
     System.out.println(new java.sql.Date(date.getTime()));
  }catch(Exception ex) { 
     ex.printStackTrace();
  }

}

public static void main(String[] args) {
new Teste();
}
}[/code]
OK ?

para comparar tu usa data do tipo java.sql.Date, ok ?

Já fiz da forma que vc ensinou acima… mas quando convertemos para DATE do pacote SQL, ele toma novamente o formato YYY/MM/DD.

Outra duvida …

Sabe oq pode estar errado???

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 2.

Abaixo um trecho do meu código…

Muito Obrigado!!

[code]public LinkedList listaConciliados(int id, Date dataInicial, Date dataFinal) throws SQLException { //metodo que tras parametro o ID do usuario para fazer a select sobre ele, objeto tipo lista ligada(linked list)

       conn = retornaConn(); //recupera a conexão com o banco de dados 
        
       Statement stmt = conn.createStatement();//cria um objeto que é responsável pelo envio de comandos e recuperação de resultados junto ao SGBD 
                            
       LinkedList lancamentos  = new LinkedList(); //cria objeto do tipo lista para retornar a lista 
    
       double saldoCaixa = 0; 
       double saldoBanco = 0; 
       double saldoTotal = 0; 
        
        
    try { 
      
        
      
        
       ResultSet rs = stmt.executeQuery ("select * from Tab_Extrato where Data between dataInicial and dataFinal and RecDesp = 1 and CodUsuario LIKE '%" + id + "%'"); 


[/code]

A questão da data, tente não usar Statement e sim PreparedStatement porque ele já trata isso pra você…

Quanto aos parametros você viu se ele está conectando? A exceção é lançada ao conectar ou no executeQuery()?

Oi… na verdade ele se conecta normalmente… o problema é realmente na query select!!

A respeito de não usar Statement e sim PreparedStatement… qual é a diferença basica entre os dois? e como eu poderia modificar esse meu codigo pra trabalhar com o Prep. Stat. seria muito dificil?
Eu tenho que continuar trazendo os parametros dataInicial e dataFinal no tipo Date do pacote SQL?

Se puder exemplificar pra mim eu agradeceria muito…

Obrigado…

Sobre a pergunta q tu me fez no meu ultimo post…
Olhe na linha que usei o SimpleDateFormat… ele converte pra dd/MM/yyyy.

A diferenca do Statement e Prepared, é que no prepared, tu pode setar os parametros, e fica uma coisa + organizada e facil de dar manutencao no seu código, repare no codigo abaixo(PS: eu nao testei rsr)

[code]String sql = "SELECT *
FROM suaTabela
WHERE nome = ? AND idade = ?"

try {
PreparedStatement ps = seuObojetoDeConecao.prepareStatement(sql);
ps.setString(1, "Cassolato");
ps.setInt(2, 19);

ResultSet rs = ps.executeQuery();

while(rs.next()) {
// codigo desejado
}
}catch(Exception ex) {
ex.printStackTrace();
}[/code]
Espero ter ajudado :joia:

Perfeito!! Deu certo e pude entender claramente… muito obrigado mesmo!!!

Grande Abraço!!

Rodrigo.