Boa noite a todos estou usando este código,
Ele pega a data inicial e a data final
porem a data inicial e a final é o mesmo dia
Pois estou querendo ver as vendas do mesmo dia.
acontece q eu tenho q aumentar um dia para ver as vendas do dia atual, como eu corrigiria isso???
private void relatorioDiario() {
if (jtData_inicial.getText().equals(" / / ")) {
JOptionPane.showMessageDialog(this, "Preencha o campo data inicial.");
jtData_inicial.requestFocus();
} else if (jtData_final.getText().equals(" / / ")) {
JOptionPane.showMessageDialog(this, "Preencha o campo data final.");
jtData_final.requestFocus();
} else {
Date datainicial = null;
Date datafinal = null;
try {
datainicial = format.parse(jtData_inicial.getText());
datafinal = format.parse(jtData_final.getText());
} catch (ParseException ex) {
Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE, null, ex);
}
if ((!jtData_inicial.getText().equals("")) && (!jtData_final.getText().equals(""))) {
String sql = "SELECT venda.data_inc as Data, \n"
+ " clientes.nome AS Nome,\n"
+ " usuario.usuario AS Usuário,\n"
+ " venda.total as Total\n"
+ "FROM venda\n"
+ " INNER JOIN clientes ON \n"
+ " venda.id_cliente = clientes.id \n"
+ " INNER JOIN usuario ON \n"
+ " venda.id_usuario = usuario.id \n"
+ "where venda.data_inc between ? and ?"; // perceba as interrogações representando os parametros
try {
pst = conexao.prepareStatement(sql);
pst.setDate(1, new java.sql.Date(datainicial.getTime())); // 1 para a primeira interrogação
pst.setDate(2, new java.sql.Date(datafinal.getTime())); // 2 para a segunda interrgação
rs = pst.executeQuery();
tblOs.setModel(DbUtils.resultSetToTableModel(rs));
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (NullPointerException ex) {
JOptionPane.showMessageDialog(null, " Relatorio não localizado nesta data!");
}
}
}
}
A coluna data_inc é DATE ou TIMESTAMP?
timestamp por isso o problema
Então você precisa fazer o seguinte:
Defina a dataInicial como sendo o dia com hora 00:00:00 e a dataFinal como sendo o dia e hora como 23:59:59
public Date criaDataComHoraEspecifica(String data, String hora) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss);
return sdf.parse(data + " " + hora);
}
E para chamar o método:
Date dataInicial = criaDataComHoraEspecifica(jtData_inicial.getText(), "00:00:00"); //Pode criar uma constante private static final String HORA_ZERO = "00:00:00";
Date dataFinal = criaDataComHoraEspecifica(jtData_final.getText(), "23:59:59"); //Pode criar uma constante private static final String HORA_ZERO = "23:59:59";
Aí passa esses caras como parâmetros pro método de consulta.
P.S: Evite misturar a consulta com elementos do front, no teu método você pega direto os JTextFields e mistura tudo, isso é errado e difícil de manter.
P.S.1: siga os padrões de nomes, o java só prevê uso de underline em nomes de constantes.
darlan_machado:
Date dataInicial = criaDataComHoraEspecifica(jtData_inicial.getText(), “00:00:00”); //Pode criar uma constante private static final String HORA_ZERO = “00:00:00”;
Date dataFinal = criaDataComHoraEspecifica(jtData_final.getText(), “23:59:59”); //Pode criar uma constante private static final String HORA_ZERO = “23:59:59”;
so nao entendi onde eu coloco
Date dataInicial = criaDataComHoraEspecifica(jtData_inicial.getText(), “00:00:00”); //Pode criar uma constante private static final String HORA_ZERO = “00:00:00”;
Date dataFinal = criaDataComHoraEspecifica(jtData_final.getText(), “23:59:59”); //Pode criar uma constante private static final String HORA_ZERO = “23:59:59”;
Veja, como o teu código está uma bagunça total, realmente fica difícil encontrar um local onde pode colocá-lo.
Entende, agora, a importância de um código organizado, separado em partes especializadas em fazer coisas específicas?
Até você corrigir tudo isso e criar um código decente, substitua estas linhas:
datainicial = format.parse(jtData_inicial.getText());
datafinal = format.parse(jtData_final.getText());
Use as mesmas variáveis, só troque pela chamada do método que sugeri.
o codigo foi @staroski q me arrumou achei top
ele é um ótimo programador, só o problema é q pra funcionar eu teria q aumentar 1 dia, esse era o erro
mas eu te agradeço pela ajuda top, vou tentar encaixar aqui era isso q eu estava procurando
vou tentar aqui se eu não consegui eu te chamo
Estranho o @staroski colocar uma query numa classe que parece frontend… Não me parece coisa dele.
darlan_machado:
Date dataInicial = criaDataComHoraEspecifica(jtData_inicial.getText(), “00:00:00”); //Pode criar uma constante private static final String HORA_ZERO = “00:00:00”;
Date dataFinal = criaDataComHoraEspecifica(jtData_final.getText(), “23:59:59”); //Pode criar uma constante private static final String HORA_ZERO = “23:59:59”;
Mas “na tora”, nem o básico você aprende. Um dos problemas que temos é a pressa, a vontade de pular etapas. Você não começou a aprender matemática a partir da Fórmula de Bhaskara, precisou aprender os números, as operações básicas, operações mais complexas, depois as primeiras equações, inequações, até chegar em equações de segundo grau. Um passo de cada vez.
Ele me ajudou,
empaquei nao do conta, tenho dificuldade com timestamp
Droga, já estão reconhecendo minha forma de agir!
Lembro de ter ajudado em um outro post onde essa query estava sendo montada com concatenação de String
.
Mostrei como parametrizar os java.sql.Date
no PreparedStatement
.
Mas realmente, eu não faria essas queries no frontend.
Qual a dificuldade exatamente?
Se não explicar, é difícil saber como ajudar.
aquele código funcionava , mas somente se eu adicionasse 1 dia a mais.
pois o campo data_inc é timestamp
Maks_Silva:
aquele código funcionava , mas somente se eu adicionasse 1 dia a mais.
pois o campo data_inc é timestamp
Fera, existe uma grande diferença entre funcionar e estar bom.
Veja, teu notebook pode queimar a tela, vai funcionar, mas não estará bom, não é mesmo?
1 curtida
é por isso q estou pedindo ajuda se tivesse bom eu nem pedia fera
Cara, não entenda errado.
O que eu estou dizendo é que você precisa organizar as coisas.
Ninguém nasceu sabendo e todo mundo cometeu esses erros.
A questão é que eu espero que você não se contente com o "está funcionando’ e busque o “está ótimo”.
pois é, não estou me contentando rs
tem um mes q busco no google
eu prefiro sql, q posso manipular, mas se nao de certo tenho outro codigo q funciona perfeito, mas não é em SQL, assim eu ficaria limitado.
ou entao aumentar 1 dia no segundo campo, mas fica tosco
Ao invés de utilizar java.sql.Date
, utilize java.sql.Timestamp
.
Você pode utilizar um java.util.Calendar
para ajustar entre 00:00h
e 23:59h
.
Método pra obter um Timestamp a partir de um Date já informando a hora e o minuto desejado:
private Timestamp getTimestamp(Date date, int hora, int minuto) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, hora);
calendar.set(Calendar.MINUTE, minuto);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new Timestamp(calendar.getTime().getTime());
}
Exemplo de uso:
private void relatorioDiario() {
if (jtData_inicial.getText().equals(" / / ")) {
JOptionPane.showMessageDialog(this, "Preencha o campo data inicial.");
jtData_inicial.requestFocus();
} else if (jtData_final.getText().equals(" / / ")) {
JOptionPane.showMessageDialog(this, "Preencha o campo data final.");
jtData_final.requestFocus();
} else {
Date datainicial = null;
Date datafinal = null;
try {
datainicial = format.parse(jtData_inicial.getText());
datafinal = format.parse(jtData_final.getText());
} catch (ParseException ex) {
Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE, null, ex);
}
if ((!jtData_inicial.getText().equals("")) && (!jtData_final.getText().equals(""))) {
String sql = "SELECT venda.data_inc as Data, \n"
+ " clientes.nome AS Nome,\n"
+ " usuario.usuario AS Usuário,\n"
+ " venda.total as Total\n"
+ "FROM venda\n"
+ " INNER JOIN clientes ON \n"
+ " venda.id_cliente = clientes.id \n"
+ " INNER JOIN usuario ON \n"
+ " venda.id_usuario = usuario.id \n"
+ "where venda.data_inc between ? and ?"; // perceba as interrogações representando os parametros
try {
pst = conexao.prepareStatement(sql);
pst.setTimestamp(1, getTimestamp(datainicial, 0, 0)); // 1 para a primeira interrogação
pst.setTimestamp(2, getTimestamp(datafinal, 23, 59)); // 2 para a segunda interrgação
rs = pst.executeQuery();
tblOs.setModel(DbUtils.resultSetToTableModel(rs));
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (NullPointerException ex) {
JOptionPane.showMessageDialog(null, " Relatorio não localizado nesta data!");
}
}
}
}
staroski:
private Timestamp getTimestamp(Date date, int hora, int minuto) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, hora);
calendar.set(Calendar.MINUTE, minuto);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new Timestamp(calendar.getTime().getTime());
}
Vc é o kra, perfeito
Que Deus te abençoe Ricardo Staroski grandemente pelo resto da sua vida e te dê a salvação eterna
só isso q eu tenho a oferecer
amém
Muito obrigado