Query não funciona!

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?

[code]String sql="SELECT * FROM Paciente WHERE DataEntrada between ‘01/01/2010’ and DataSaida ‘01/12/2010’

Resultset rs=statemente.executeQuery(“sql”);[/code]

Oi,
qual erro q aparece no Stack Trace?

unclosed string literal

O erro diz que a String literal não foi fechada, ou seja, faltou fachar as aspas.

[code]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.[/code]

#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.

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.

[code]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)
			{
				
			}
			
	}
}[/code]

Estou perdidin :S HELP

[code]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.
			}
			
	}
}[/code]Ps.: Não esqueça de arrumar a sua query. Se não vai ser lançada uma SQLException.

[code] 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.executeQueryu;
if(rs.nextb)

            {  
                System.out.println(rs.getInt[u]([/u]"quantidade"));
            } 
 
              	
    } 

[/code]
sÃO 3 Erros onde está em erro

O Erro é esse.

unreported exception java.sql.SQLException; must be caught or declared to be thrown :frowning: :frowning: :frowning:

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.

    	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.

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.

[code]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");  
    } 

[/code]
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.

É, 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.