Socorro... erro na select

9 respostas
R

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!!

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 + "%'");

...

9 Respostas

R

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;
     }
C

Tente…

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

R

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!!

C
Irmao, fiz um exemplinho pra ti...
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();
   }
}
OK ?

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

R

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!!

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 + "%'"); 

...
J

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()?

R

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…

C

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)
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();
}
Espero ter ajudado :joia:
R

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

Grande Abraço!!

Rodrigo.

Criado 23 de agosto de 2006
Ultima resposta 26 de ago. de 2006
Respostas 9
Participantes 3