Olá pessoal,
Vou tentar explicar a situação.
Estou tentando criar uma agenda para a marcação de horários de alunos em uma academia e tenho um problema, antes de mais nada sou iniciante em java, então peço desculpas se estou cometendo erros primários.
Na minha agenda existe uma opção para repetir compromissos (por exemplo, caso o horário agendado seja na segunda-feira ele se repetirá por todas as segundas até uma data definida pelo usuário). O problema está em como eu gravo essa repetição de eventos no banco de dados.
Ex.: O aluno “X” está agendado para todas as segundas até dezembro de 2018.
As opções de repetição de eventos são, semanalmente, a cada 2 semanas, a cada 15 dias e mensalmente.
Alguém pode me dar uma luz de como fazer essa gravação no banco?
DAO:
public void create(AgendaAlunos horAlunos) {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement("INSERT INTO agendaAlunos (aluno, dataescolhida, periodo, repetirevento, profissional, horariochegada, "
+ "horariosaida, idcadalunos)"
+ "VALUES(?,?,?,?,?,?,?,?)");
stmt.setString(1, horalunos.getAluno());
stmt.setTimestamp(2, new Timestamp(horAlunos.getDataescolhida().getTime()));
stmt.setTimestamp(3, new Timestamp(horAlunos.getPeriodo().getTime()));
stmt.setString(4, horAlunos.getRepetirevento());
stmt.setString(5, horAlunos.getProfissional());
stmt.setString(6, horAlunos.getHorariochegada());
stmt.setString(7, horAlunos.getHorariosaida());
stmt.setInt(8, horAlunos.getIdalunos().getIdCadastroAlunos());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Salvo com sucesso");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao salvar:" + ex);
} finally {
ConnectionFactory.closeConnection(con, stmt);
}
}
Método para calcular datas futuras:
public Date addDate(int field, int amount, Date origDate) {
GregorianCalendar gcal = new GregorianCalendar();
try {
gcal.setTime(origDate);
gcal.add(field, amount);
} catch (Exception e) {
}
return (new Date(gcal.getTime().getTime()));
}
Onde faço a repetição dos compromissos (não sei se está no lugar certo também):
private void jDateChooserPeriodoPropertyChange(java.beans.PropertyChangeEvent evt) {
try {
double dataAtual = jCalendar2.getDate().getTime();
double dataFinal = jDateChooserPeriodo.getDate().getTime();
double periodoSemanas = (((dataFinal - dataAtual) + 3600000) / 86400000L) * 0.142857142857143;
double periodoDias = ((dataFinal - dataAtual) + 3600000) / 86400000L;
double periodoMeses = (((dataFinal - dataAtual) + 3600000) / 86400000L) * 0.0328767123287671;
System.out.println("Periodo em semanas:" + periodoSemanas);
System.out.println("Period em dias:" + periodoDias);
System.out.println("Periodo em meses:" + periodoMeses);
String strData = lbDataAlunos.getText();
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
switch (cbRepetirEvento.getSelectedIndex()) {
case 0:
break;
case 1:
//Repetir eventos semanalmente
try {
java.sql.Date data2 = new java.sql.Date(format.parse(strData).getTime());
for (int i = 1; i < periodoSemanas; i++) {
System.out.println("-------------------------------");
String d = format.format(this.addDate(Calendar.WEEK_OF_MONTH, i, data2));
System.out.println("Data +1 semana: " + d);
}
} catch (ParseException ex) {
Logger.getLogger(TelaAgenda.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 2:
//Repetir eventos a cada 2 semanas
try {
java.sql.Date data2 = new java.sql.Date(format.parse(strData).getTime());
for (int i = 2; i < periodoSemanas; i += 2) {
System.out.println("-------------------------------");
String d = format.format(this.addDate(Calendar.WEEK_OF_MONTH, i, data2));
System.out.println("Data +2 semanas: " + d);
}
} catch (ParseException ex) {
Logger.getLogger(TelaAgenda.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 3:
//Repetir eventos a cada 15 dias
try {
java.sql.Date data2 = new java.sql.Date(format.parse(strData).getTime());
for (int i = 15; i < periodoDias; i += 15) {
System.out.println("-------------------------------");
String d = format.format(this.addDate(Calendar.DAY_OF_MONTH, i, data2));
System.out.println("Data +15 dias: " + d);
}
} catch (ParseException ex) {
Logger.getLogger(TelaAgenda.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 4:
//Repetir eventos mensalmente
try {
java.sql.Date data2 = new java.sql.Date(format.parse(strData).getTime());
for (int i = 1; i < periodoMeses; i++) {
System.out.println("-------------------------------");
String d = format.format(this.addDate(Calendar.MONTH, i, data2));
System.out.println("Data +15 dias: " + d);
}
} catch (ParseException ex) {
Logger.getLogger(TelaAgenda.class.getName()).log(Level.SEVERE, null, ex);
}
break;
}
} catch (Exception e) {
}
Agradeço se puderem ajudar