Bom dia Galera do GUJ …
Estou com um problemão! Criei um Bean e nesse Bean coloquei os Campos Data e Hora como sendo String, pois esse Bean é “alimentado” por um método da minha tela Principal que pega o conteúdo do tfData e tfHora. Preciso pegar esse valores passados ao Bean e convertê-los em um tipo java.sql.Date (dentro de outra classe - Control - responsável pelos comandos SQL), mas está dando o seguinte erro:
java.lang.IllegalArgumentException: Cannot format given Object as a Date
Estou utilizando o SimpleDateFormate para Formatar e “Parsear” a String capturada pelo Bean (dd/MM/yyyy) no formato do banco de Dados (yyyy-MM-dd). Estou utilizando o PostgreSQL 9.1.
A data e hora são “jogadas” dentros dos respectivos textFields através de um Componente Swing que Adicionei ao NetBeans 7.1 (o jCalendarButton e jTimeButton que abrem um Popup com o Calendário e as Horas para serem usados).
Segue abaxo os Códigos do Bean …
public class AgendaBean {
private String data;
private String hora;
/**
* @return the data
*/
public String getData() {
return data;
}
/**
* @param data the data to set
*/
public void setData(String data) {
this.data = data;
}
/**
* @return the hora
*/
public String getHora() {
return hora;
}
/**
* @param hora the hora to set
*/
public void setHora(String hora) {
this.hora = hora;
}
do Control …
public class AgendaControl {
SimpleDateFormat dataf = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat datag = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat horaf = new SimpleDateFormat("HH:mm");
java.sql.Date d = null;
java.sql.Date h = null;
PreparedStatement pstm;
ResultSet rs;
String gravaRegistro = "insert into agendas(data, hora) values(?,?)";
public void gravarRegistro(AgendaBean ab) {
ConexaoBD con = new ConexaoBD();
try {
pstm = con.conecta().prepareStatement(gravaRegistro);
pstm.setDate(1, d = new java.sql.Date(datag.parse(ab.getData()).getTime()));
pstm.setDate(2, h = new java.sql.Date(horaf.parse(ab.getHora()).getTime()));
pstm.executeUpdate();
JOptionPane.showMessageDialog(null, "Registro Gravado com Sucesso!");
con.desonecta();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Não Foi Possível Gravar o Registro!");
e.printStackTrace();
}
E da Tela Principal …
public static DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
public static DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
public void setDate(String dateString) {
Date date = null;
try {
if ((dateString != null) && (dateString.length() > 0)) {
date = dateFormat.parse(dateString);
}
} catch (Exception e) {
date = null;
}
this.setDate(date);
}
public void setDate(Date date) {
String dateString = "";
if (date != null) {
dateString = dateFormat.format(date);
}
tfData.setText(dateString);
jCalendarButton1.setTargetDate(date);
}
public void setTime(String timeString) {
Date time = null;
try {
if ((timeString != null) && (timeString.length() > 0)) {
time = timeFormat.parse(timeString);
}
} catch (Exception e) {
time = null;
}
this.setTime(time);
}
public void setTime(Date time) {
String timeString = "";
if (time != null) {
timeString = timeFormat.format(time);
}
tfHora.setText(timeString);
jTimeButton1.setTargetDate(time);
}
private void gravaRegistro() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
AgendaControl c = new AgendaControl();
AgendaBean agenda = new AgendaBean();
agenda.setData(df.format(tfData.getText().trim()));
agenda.setHora(tfHora.getText().trim());
c.gravarRegistro(agenda);
try {
con.executeSQL("select * from agendas order by data");
con.rs.next();
mostraDados();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Erro ao Tentar Gravar os Registros!");
}
}
Alguém tem alguma Solução para o meu Problemão??? Já pensei em mudar o tipo de dado no Bean para Date e já passar para o Bean o Date formatado (yyyy-MM-dd) no formato java.sql.Date. Pode ser uma Solução! Mas se alguém tiver alguma forma de eu não ter que mexer nisso e manter meu Bean com String eu Agradeço.