Boa noite à todos.
Galera, estou com dois problemas referente as datas no meu sistema
Tenho uma tabela que me traz um produto com suas respectivas datas de compra/vencimento.
Problema numero 1 -> Está acontecendo algo difícil de entender, eu cadastro a data de compra agora (30/05/2018) e coloco a data de vencimento para dia 10/06/2018, porem tem produtos que ele cadastra como um dia antes, e tem produtos que ele cadastra como um dia depois, por exemplo:
NO SISTEMA:

Obs.: No sistema eu cadastrei o produto “coco” como: “COMPRA: 30/05/2018” e “VALIDADE 10/06/2018”, perceba que ele retrocedeu um dia em ambas as datas.
O produto coca cola está correto, eu cadastrei exatamente as datas apresentadas.
NO BANCO DE DADOS:
![]()
Obs.: No banco de dados já aparece diferente, o produto “coco” está correto, foi essa data mesmo que inseri (porem perceba que la em cima na tela do sistema ele me mostrou diferente).
O produto coca cola está incorreto, pois a data correta que eu cadastrei no sistema foi “COMPRA: 30/05/2018” e “VALIDADE: 10/06/2018”.
Estou utilizando uma Table Model.
Resumindo -> Alguns produtos estão certo no sistema e errado no banco e vise versa, desculpe a confusão, mas tentei explicar da melhor forma 
Problema numero 2 -> Como faço para ser exibido a data no padrão br ? ( ## - ## - #### ).
Abaixo está o meu código dos métodos ( métodos adicionar() , pesquisar_produtos() e setar_campos() ):
private void adicionar() {
if ((txtProProduto.getText().isEmpty())
|| (txtProPreco.getText().isEmpty()) || (txtProQuantidade.getText().isEmpty())
|| (jDatProCompra.getDate() == null || (jDatProVencimento.getDate() == null))) {
JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
} else {
String sql = "insert into tbprodutos(produto,preco,quantidade,categoria,compra,validade) values(?,?,?,?,?,?)";
try {
pst = connection.prepareStatement(sql);
pst.setString(1, txtProProduto.getText());
pst.setString(2, txtProPreco.getValue().toString());
pst.setString(3, txtProQuantidade.getText());
pst.setString(4, cboProCategoria.getSelectedItem().toString());
pst.setDate(5, new java.sql.Date(jDatProCompra.getDate().getTime()));
pst.setDate(6, new java.sql.Date(jDatProVencimento.getDate().getTime()));
int adicionado = pst.executeUpdate();
if (adicionado > 0) {
JOptionPane.showMessageDialog(null, "Produto cadastrado com sucesso.");
txtProProduto.setText(null);
txtProPreco.setText(null);
txtProQuantidade.setText(null);
cboProCategoria.setSelectedItem(null);
jDatProCompra.setDate(null);
jDatProVencimento.setDate(null);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
}
private void pesquisar_produto() {
String sql = "select produto,preco,quantidade,categoria,compra,validade from tbprodutos where produto like ?";
try {
pst = connection.prepareStatement(sql);
pst.setString(1, txtProPesquisar.getText() + "%");
rs = pst.executeQuery();
tblProdutos.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
public void setar_campos() {
int setar = tblProdutos.getSelectedRow();
txtProProduto.setText(tblProdutos.getModel().getValueAt(setar, 0).toString());
txtProPreco.setText(tblProdutos.getModel().getValueAt(setar, 1).toString());
txtProQuantidade.setText(tblProdutos.getModel().getValueAt(setar, 2).toString());
cboProCategoria.setSelectedItem(tblProdutos.getModel().getValueAt(setar, 3).toString());
jDatProCompra.setDate((java.sql.Date) tblProdutos.getModel().getValueAt(setar, 4));
jDatProVencimento.setDate((java.sql.Date) tblProdutos.getModel().getValueAt(setar, 5));
}
Obrigado à todos!