Bom dia, sou novo no fórum e também no java e estou literalmente aprendendo e gostando muito.
gostaria muito da ajuda dos veteranos, pois tenho um problema que não consigo resolver de jeito nenhum estou tentando pesquisar entre datas para trazer os clientes cadastrado de certo período, mas sempre fala que preciso converter eu já fiz varias pesquisa mas sem sucesso.
Meu comando no sql funciona ele converte mas na aplicação não alguém consegue me ajudar nessa questão? por favor.
Como vc está fazendo a consulta?
Bom dia, lucas confesso que estou perdido e mesmo pesquisando acabei indo por instinto .
esse meu sql
select
FILIAL,
CLIENTE_VAREJO,
CPF_CGC,
DDD,
TELEFONE,
DDD_CELULAR,
CELULAR,
email
from
CLIENTES_VAREJO
where FILIAL like '%" + mod.getPesquisa() + "%'
and CADASTRAMENTO between '%" + mod.getDataIN() + "%' and '%" + mod.getDataFIN() + "%'
O que mod.getDataIN()
retorna?
quando add esse campo ele vem a msg
que preciso converter
Conversion failed when converting date and/or time from character string
Pelo visto, vc não está usando Prepared Statements.
Recomendo que dê uma lida sobre prepared statement, pois vai resolver seu problema. Veja um exemplo:
String updateString = "update " + dbName + ".COFFEES set SALES = ? where COF_NAME = ?";
PreparedStatement updateSales = con.prepareStatement(updateString);
updateSales.setInt(1, 1);
updateSales.setString(2, "someValue");
updateSales.executeUpdate();
Para datas, vc pode usar o PreparedStatement.setDate passando um java.sql.Date.
se eu tirar o campo eu consigo trazer
a data formatada.
PreparedStatement pst = conex.con.prepareStatement(“select * from CLIENTES_VAREJO”);
pst.setString(1, mod.getFILIAL());
pst.execute();
} catch (SQLException ex){
JOptionPane.showMessageDialog(null, “Consulta executada!/nErro:”+ex);
}
conex.desconecta();
}
public BeansCliente buscaCliente(BeansCliente mod){
conex.conexao();
conex.executaSql(“select FILIAL,CLIENTE_VAREJO,CPF_CGC,DDD,TELEFONE,DDD_CELULAR,CELULAR,email,convert(varchar(10),cadastramento,103) as 'CADASTRAMENTO’from CLIENTES_VAREJO where FILIAL like '%”+mod.getPesquisa()+"%’");
try {
conex.rs.first();
// mod.setID(conex.rs.getInt("ID"));
mod.setFILIAL(conex.rs.getString("FILIAL"));
mod.setCLIENTEVAREJO(conex.rs.getString("CLIENTE_VAREJO"));
mod.setCPF(conex.rs.getString("CPF_CGC"));
mod.setDataIN(conex.rs.getTimestamp("CADASTRAMENTO"));
mod.setDataFIN(conex.rs.getTimestamp("CADASTRAMENTO"));
// mod.setDataIN(new java.sql.Date(mod.getDataIN().getTime()));
// mod.setDataFIN(new java.sql.Date(mod.getDataIN().getTime()));
mod.setDDD(conex.rs.getString("DDD"));
mod.setTELEFONE(conex.rs.getString("TELEFONE"));
mod.setDDDCELULAR(conex.rs.getString("DDD_CELULAR"));
mod.setCELULAR(conex.rs.getString("CELULAR"));
mod.setEmail(conex.rs.getString("email"));
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Buscar Cliente!/nErro:"+ex);
}
conex.desconecta();
return mod;
}
Não concatene os parâmetros na sql. Se os parâmetros com o prepared statement.
ps.setDate(1, new java.sql.Date(dataInicio.getTime()));
ps.setDate(2, new java.sql.Date(dataFim.getTime()));
Nesse exemplo, dataInicio e dataFim são instâncias de java.util.Date. Mas vc ainda não disse o que mod.getDataIN() retorna.
A solução que estou dizendo é essa: (como digitei aqui no notepad, capaz que tenha algum erro)
StringBuilder sql = new StringBuilder();
sql.append("SELECT ");
sql.append(" filial, ");
sql.append(" cliente_varejo, ");
sql.append(" cpf_cgc, ");
sql.append(" ddd, ");
sql.append(" telefone, ");
sql.append(" ddd_celular, ");
sql.append(" celular, ");
sql.append(" email ");
sql.append("FROM CLIENTES_VAREJO ");
sql.append("WHERE filial LIKE ? ");
sql.append("AND cadastramento BETWEEN ? AND ?");
PreparedStatement ps = con.prepareStatement(sql.toString());
ps.setString(1,"%" + mod.getFILIAL() + "%");
ps.setDate(2, new java.sql.Date(dataInicio.getTime()));
ps.setDate(3, new java.sql.Date(dataFim.getTime()));
ResultSet rs = ps.execute();
Nesse exemplo, dataInicio e dataFim são instâncias de java.util.Date .
entendi vou tentar
man, desculpa minha falta de conhecimento mas esta dando um erro {
desculpa man o forum me bloqueou so podia trocar 20 msg
meu DAO.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ModeloDao;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import modeloBeans.BeansCliente;
import modeloConection.ConexaoBD;
/**
*
* @author alexandro.bueno
*/
public class DaoCliente {
ConexaoBD conex = new ConexaoBD();
BeansCliente mod = new BeansCliente();
private Object dataInicio;
private Object dataFim;
public void ConsultaGeral(BeansCliente mod){
conex.conexao();
try {
PreparedStatement pst = conex.con.prepareStatement("select * from CLIENTES_VAREJO");
pst.setString(1, mod.getFILIAL());
pst.setDate(2,new java.sql.Date(mod.getDataIN().getTime()));
pst.setDate(3,new java.sql.Date(mod.getDataFIN().getTime()));
pst.execute();
} catch (SQLException ex){
JOptionPane.showMessageDialog(null, "Consulta executada!/nErro:"+ex);
}
conex.desconecta();
}
///////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
public BeansCliente buscaCliente(BeansCliente mod){
conex.conexao();
/conex.executaSql("select FILIAL,CLIENTE_VAREJO,CPF_CGC,DDD,TELEFONE,DDD_CELULAR,CELULAR,email,convert(varchar(10),cadastramento,103) as 'CADASTRAMENTO'from CLIENTES_VAREJO where FILIAL like '%"+mod.getPesquisa()+"%'");
try {
conex.rs.first();
// mod.setID(conex.rs.getInt("ID"));
mod.setFILIAL(conex.rs.getString("FILIAL"));
mod.setCLIENTEVAREJO(conex.rs.getString("CLIENTE_VAREJO"));
mod.setCPF(conex.rs.getString("CPF_CGC"));
mod.setDataIN(conex.rs.getDate("CADASTRAMENTO"));
mod.setDataFIN(conex.rs.getDate("CADASTRAMENTO"));
//mod.setDataIN(conex.rs.getTimestamp("CADASTRAMENTO"));
// mod.setDataFIN(conex.rs.getTimestamp("CADASTRAMENTO"));
// mod.setDataIN(new java.sql.Date(mod.getDataIN().getTime()));
// mod.setDataFIN(new java.sql.Date(mod.getDataFIN().getTime()));
mod.setDDD(conex.rs.getString("DDD"));
mod.setTELEFONE(conex.rs.getString("TELEFONE"));
mod.setDDDCELULAR(conex.rs.getString("DDD_CELULAR"));
mod.setCELULAR(conex.rs.getString("CELULAR"));
mod.setEmail(conex.rs.getString("email"));
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Buscar Cliente!/nErro:"+ex);
}
conex.desconecta();
return mod;
}
}
Nessa consulta de clientes, vc passou parâmetros no preparedStatement, mas não colocou no SQL. Deveria ser algo assim:
select * from CLIENTES_VAREJO WHERE filial = ? AND suaData BETWEEN ? AND ?
É uma interrogação para cada parâmetro informado.
Já sobre erro, imagino que seja ao recuperar a data do resultSet:
mod.setDataIN(conex.rs.getDate("CADASTRAMENTO"));
mod.setDataFIN(conex.rs.getDate("CADASTRAMENTO"));
Qual o tipo da coluna CADASTRAMENTO na tabela CLIENTES_VAREJO ?