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");
O erro diz que a String literal não foi fechada, ou seja, faltou fachar as aspas.
Stringsql="SELECT * FROM Paciente WHERE DataEntrada between '01/01/2010' and DataSaida '01/12/2010'"//Faltoufecharasaspasaqui.Resultsetrs=statemente.executeQuery(sql);//Aquinãovaiaspas.Comasaspasvocêvaitentarexecutarapalavra"sql"nobancodedados,quandoaintençãoprovavelmentesejaexecutaraqueryqueestánavariávelsql.
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.
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
publicvoidactionPerformed(ActionEvente){if(e.getSource()==btConsulta){Stringsql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and '01/12/2010'";ResultSetrs=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{Stringsql="SELECT count (*) as quantidade FROM Paciente WHERE DataEntrada between '01/01/2010' and '01/12/2010'";ResultSetrs=statement.executeQuery(sql);{if(rs.next()){System.out.println(rs.getInt("quantidade"));}}catch(SQLExceptionExemplo){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.