Olá, existe no MYSQL Workbench algum comando ou opção que eu mude as colunas da data no formato yyyy-MM-dd para dd/MM/yyyy, pois quando conseguir usar no Java o Statement no formato (UK), o banco de dados deixou como campo “null”.
Existiria alguma forma dele aceitar?
Neste caso eu faria o seguinte. Crie o seu controller, service e repository.
em service instancie uma classe DTO e converta o valor conforme abaixo. para mostrar o correto para o usuario brasileiro e faça o inverso para salvar no banco.
ExemploDTO dto = new ExemploDTO ();
LocalDateTime inicio = item.getDataInicial();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“dd/MM/yyyy”);
String iniciado = inicio.format(formatter);
dto.setDataInicial(iniciado);
voce nao precisa se preocupar com isso. Voce pode usar a propria programacao para corrigir isso.
Voce esta usando spring? Se estiver basta usar um formatador que ele cuida do resto.
public abstract class TemporalFormatter<T extends Temporal> implements Formatter<T> {
@Override
public String print(T temporal, Locale locale) {
DateTimeFormatter formatter = getDateTimeFormatter(locale);
return formatter.format(temporal);
}
@Override
public T parse(String text, Locale locale) throws ParseException {
DateTimeFormatter formatter = getDateTimeFormatter(locale);
return parse(text, formatter);
}
private DateTimeFormatter getDateTimeFormatter(Locale locale) {
return DateTimeFormatter.ofPattern(pattern(locale));
}
public abstract String pattern(Locale locale);
public abstract T parse(String text, DateTimeFormatter formatter);
}
@Component
public class LocalDateFormatter extends TemporalFormatter<LocalDate> {
@Autowired
private Environment env;
@Override
public String pattern(Locale locale) {
return env.getProperty("localdate.format-" + locale, "yyyy-MM-dd");
}
@Override
public LocalDate parse(String text, DateTimeFormatter formatter) {
return LocalDate.parse(text, formatter);
}
}
assim sempre que voce pegar uma data de um campo ou pegar uma data do banco e for exibir na tela a data ficara formatada corretamente.
para filtrar no banco de dados e pegar voce faz assim:
usando spring jdbctemplate
@Override
protected RowMapper<Cotacao> rowMapper() {
return new RowMapper<Cotacao>() {
@Override
public Cotacao mapRow(ResultSet rs, int rowNum) throws SQLException {
Cotacao cotacao = new Cotacao();
cotacao.setId(rs.getLong("idcotacao"));
cotacao.setEmpresa(new Empresa(rs.getLong("idloja")));
cotacao.setDataInicial(rs.getDate("datainicio").toLocalDate());
cotacao.setDataFinal(rs.getDate("datafinal").toLocalDate());
cotacao.setSituacao(rs.getString("situacao"));
cotacao.setDescricao(rs.getString("descricao"));
return cotacao;
}
};
}
pesquisando do banco de dados
public Page<Cotacao> findAll(Pageable pageable, CotacaoFilter cotacaoFilter) {
String sql = "SELECT * FROM cotacao "
+ " WHERE (datainicio >= :datainicio OR :datainicio is null) "
+ " AND (datafinal <= :datafinal OR :datafinal is null) "
+ " AND (situacao LIKE CONCAT('%', :situacao, '%') OR :situacao is null) "
+ " ORDER BY idcotacao DESC "
+ " limit :page, :size";
MapSqlParameterSource source = new MapSqlParameterSource();
source.addValue("page", pageable.getPageNumber() * pageable.getPageSize());
source.addValue("size", pageable.getPageSize());
source.addValue("datainicio", cotacaoFilter.getDataInicial());
source.addValue("datafinal", cotacaoFilter.getDataFinal());
source.addValue("situacao", cotacaoFilter.getSituacao());
return new PageImpl<>(namedQuery().query(sql, source, rowMapper()), pageable, getTotalRegistros(cotacaoFilter));
}
e a classe filter para voce ver, eh uma classe simples
public class CotacaoFilter {
private LocalDate dataInicial = null;
private LocalDate dataFinal = null;
private String situacao = null;
public LocalDate getDataInicial() {
return dataInicial;
}
public void setDataInicial(LocalDate dataInicial) {
this.dataInicial = dataInicial;
}
public LocalDate getDataFinal() {
return dataFinal;
}
public void setDataFinal(LocalDate dataFinal) {
this.dataFinal = dataFinal;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
}
o proprio spring lida com a formatacao devido as classes que formatam a data
agora se voce estiver usando na mao. voce vai ter que pegar a data formatada do banco de dados usando a funcao date_format(coluna_de_data, ‘%d/%M/%y’), e usar no PreparedStatement o javax.sql.Date.
Se quiser colocar o seu codigo, fica mais facil de ajudar.
Por enquanto estou utilizando o jdbc para depois utilizar a programação spring:
code
String dtn = “19/02/1971”;
int idade = id.calcularIdade(dtn);
String dtNasc = “19/02/1971”;
DateTimeFormatter formato = DateTimeFormatter.ofPattern(“dd/MM/yyyy”,Locale.UK);
LocalDate data = LocalDate.parse(dtNasc, formato);
convidado.setDataNascimento(data); //
//code
//Arquivo Dao
stmt.setDate(4, convidado.getDataNascimento());
//
O Tipo de dado no modelo é do tipo date.
Alguém teria mais alguma outra sugestão?
Eu executei o teste e o problema esta com o Java, onde emulei a resposta pelo console e ficou em resposta como “null”, da mesma forma que ficou no Banco de Dados…lógico, existe alguma outra forma de que o formato apareça como dd/MM/yyyy ou do formato que o MySQL interprete?