Query não funciona!

13 respostas
leobtos

Olá Pessoal quero fazer uma consulta usar uma Query mas não estou conseguindo.

Estou utilizando o Acces como BD. Nele tenho a tabela Paciente e os seguintes campos DataEntra e DataSaida. Com essas datas quero faz o seguinte, exemplo quantos dias O Paciente João fico no hospital. Ja vi aqui alguns post sobre Between, mas fiquei com duvida ainda. Depois que só da uma mensagem na Tela, tipo o João ficou 29 Dias.

JOptionPane.showMessageDialog(null, " João tals ... ");

Esta certo?

String sql="SELECT * FROM Paciente WHERE DataEntrada between '01/01/2010' and DataSaida '01/12/2010'

Resultset rs=statemente.executeQuery("sql");

13 Respostas

A

Oi,
qual erro q aparece no Stack Trace?

leobtos

unclosed string literal

Eric_Yuzo
O erro diz que a String literal não foi fechada, ou seja, faltou fachar as aspas.
String sql="SELECT * FROM Paciente WHERE DataEntrada between '01/01/2010' and DataSaida '01/12/2010'" // Faltou fechar as aspas aqui.

Resultset rs=statemente.executeQuery(sql); // Aqui não vai aspas. Com as aspas você vai tentar executar a palavra "sql" no banco de dados, quando a intenção provavelmente seja executar a query que está na variável sql.
leobtos

#vixi agora ele gerou varios erros de ; e de class,interface or enum expected.

E outra duvida. Como vo joga na tela a quantidade e o nome do Paciente.

Eric_Yuzo

Tem que utilizar os métodos get (getString, getInt, etc) do ResultSet: http://www.guj.com.br/article.show.logic?id=7

Agora que eu vi. Sua consulta não deveria usar between, pois tem dois campos diferentes (DataEntrada e DataSaida) na condição.

leobtos
if(e.getSource()==btConsulta)
    	{
    			String sql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and DataSaida '01/12/2010'"
    			
    			resultSet rs=statement.executeQuery(sql);
    			if(rs.next)
    			{
    				
    			}
    			
    	}
    }

Estou perdidin :S HELP

Eric_Yuzo
String sql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and '01/12/2010'"; // Faltou finalizar a linha com ponto e vírgula
    			
    			resultSet rs=statement.executeQuery(sql);
    			if(rs.next)
    			{
    				System.out.println(rs.getInt("quantidade")); // Pega um valor do tipo inteiro do campo "quantidade" (assim como foi nomeado o resultado em sua consulta). Aqui usei o Sysout, mas pode ser qualquer outra forma de exibição como o JOptionPane.
    			}
    			
    	}
    }
Ps.: Não esqueça de arrumar a sua query. Se não vai ser lançada uma SQLException.
leobtos
public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==btConsulta)
    	{
    		String sql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and '01/12/2010'";
                ResultSet rs=statement.executeQuery[u]([/u]sql);  
                if(rs.next[b]([/b]))  

                {  
                    System.out.println(rs.getInt[u]([/u]"quantidade"));
                } 
     
                  	
        }
sÃO 3 Erros onde está em erro O Erro é esse.
unreported exception java.sql.SQLException; must be caught or declared to be thrown
:( :( :(
Eric_Yuzo

O erro já diz tudo. java.sql.SQLException precisa ser tratada ou declarada.

Se não sabe fazer isso, pesquise sobre tratamento de exceções (try/catch). Tente implementar na sua classe e poste as dúvidas que surgirem.

leobtos
if(e.getSource()==btConsulta)  
		
		try  
		{
		    String sql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and '01/12/2010'";  
            ResultSet rs=statement.executeQuery(sql);    
            {
                if(rs.next())    
              	{
                
                  System.out.println(rs.getInt("quantidade"));  
               
           		}
            }
    		catch(SQLException Exemplo)
    		{
    		
    			if(erro.getMessage().equals("General error"))
				JOptionPane.showMessageDialog(null, "teste");
    		}
		}

Mais erro ‘catch’ without ‘try’ afe.

Eric_Yuzo

A estrutura de try/catch é:

try { // início do bloco // código que pode lançar a exceção... } // fim do bloco catch (Exception e) { // código que trata a exceção... }O catch vem após fechar o bloco try. No seu código o catch está dentro do bloco do try, por isso o erro dizendo que não encontrou o try.

leobtos
try    
		{  
   			String sql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and '01/12/2010'";    
     		ResultSet rs=statement.executeQuery(sql);      
     		{
     		
              if(rs.next())      
                {  
                
                System.out.println(rs.getInt("quantidade"));    
                //JOptionPane.showMessageDialog(rs.getInt("quantidade"));
               
                }  
     		}
		}
		
        catch(SQLException erro)  
        {  
          
        if(erro.getMessage().equals("General error"))  
        JOptionPane.showMessageDialog(null, "teste");  
        }
Conseguir entender a lógica não ocorreu nenhum erro, mas acho que encontrei um grande problema, a linha na imprimi. E estou usando JTextfield para receber essas datas e no banco de dados Access estou salvando como Texto com campo de 8 digitos. Meu amigo disse tenho que converte ela, ai que está ! Legal e agora.

Eric Yuzo Obrigado pela colaboração.

Eric_Yuzo

É, esse é um dos problemas de se armazenar datas em banco de dados no formato texto. Você não pode usar operadores <, >, between e assim por diante. Assim como nada impede que eu armazene um texto qualquer, já que o campo não passa de uma String.

É possível converter a String em data, mas primeiro sugiro que mude o campo no banco de dados para o formato de data. No Access aparece como Data/Hora. Em java, você vai recuperar este valor em um objeto java.sql.Date.

Criado 24 de novembro de 2010
Ultima resposta 25 de nov. de 2010
Respostas 13
Participantes 3