Я программирую это программное обеспечение (Java + MySQL), которое каждый день сохраняет новый реестр в определенной таблице. В этой таблице есть поле «дата» для хранения даты. Когда программное обеспечение запускается, первое, что происходит, - это поиск в этих реестрах, чтобы выяснить, является ли дата новой или уже сохранена, поэтому программное обеспечение можно открывать много раз в день без двойного сохранения.
Я делаю это, сохраняя фактическую дату «сейчас» в строке, которую я сравниваю простым поиском в базе данных, используя метод под названием StartValues()
.
date = new Date(System.currentTimeMillis());
formateDateBD = new SimpleDateFormat("yyyy-MM-dd");
date_save = formatarDateBD.format(date);
Это отлично работает, никогда не было проблем с этим. Проблема началась, когда я обнаружил нарушение в моем коде: когда день меняется (23:59 - 00:00), он должен изменить дату, поэтому я сделал метод, который сравнивает фактическую дату «сейчас» с более старой датой, хранящейся в Строка date_save
ранее.
public static void TestDate(){
Date newDate = new Date(System.currentTimeMillis());
formateDateBD = new SimpleDateFormat("yyyy-MM-dd");
String dateTest = formatarDateBD.format(newDate);
if(!dateTest.equals(date_save)){
CorrectDate();
StartValues();
}
}
Пока все хорошо. Изменяет дату, если «сейчас» отличается от предыдущей. Я звоню TestDate()
каждый раз, когда мне нужно сохранить какой-нибудь реестр, что приведет к необходимости сохранения нового дня. CorrectDate()
просто меняет переменную date_save
на новую, я просто повторно использую предыдущий код. Я также вызываю функцию StartValues()
, которая является ТО ЖЕ, которую я вызвал в первую очередь. По сути, он должен хранить новую дату, но это не так.
public static String StartValues(){
String retorno = "";
int resultado;
String caixa_anterior = "";
String banco_anterior = "";
String query;
try{
//search the last livro caixa
query = "SELECT * FROM lc_livro_caixa " +
"ORDER BY id_lc_livro_caixa DESC " +
"LIMIT 1";
Statement st = (Statement) c.createStatement();
ResultSet rs = st.executeQuery(query);
//if finds
if (rs != null){ //MAYBE THE ERROR IS HERE?????????
if(rs.next()){
//if the last date is today
if (data_save.equals(rs.getString("data"))){
retorno = "dia_existente";
}
//if not, should save a new date (today)
else {
caixa_anterior = rs.getString("caixa_saldo");
banco_anterior = rs.getString("banco_saldo");
retorno = "novo_dia";
}
}
//if this is the first time the software is running
else{
try{
query = "INSERT INTO lc_livro_caixa (data, caixa_saldo, caixa_entrada, caixa_saida, "
+ "banco_saldo, banco_entrada, banco_saida) VALUES "
+ "('" + data_save + "', 0, 0, 0, "
+ "0, 0, 0)";
st = (Statement) c.createStatement();
resultado = st.executeUpdate(query);
if (resultado == 1){
retorno = "primeiro_dia";
}
} catch (Exception e){
}
}
}
st.close();
rs.close();
} catch (Exception e){
//it's here where it goes actually when the day changes (23:59 - 00:00), it shouldn't be!!!
}
if(retorno.equals("novo_dia")){
try{
query = "INSERT INTO lc_livro_caixa (data, caixa_saldo, caixa_entrada, caixa_saida, "
+ "banco_saldo, banco_entrada, banco_saida) VALUES "
+ "('" + data_save + "', " + caixa_anterior + ", 0, 0, "
+ banco_anterior + ", 0, 0)";
Statement st = (Statement) c.createStatement();
resultado = st.executeUpdate(query);
if (resultado == 1){
System.out.println("Dados salvos no banco.");
}
st.close();
} catch (Exception e){
}
}
return retorno;
}
Извините, код все еще с переменными на португальском языке. Что происходит, так это то, что этот код одинаков для первого входа в программное обеспечение в течение дня, который работает отлично, и изменяется первое распознавание после дня (23:59 - 00:00), которое не работает вообще. Это тот же метод, почему он работает только после запуска программного обеспечения? Может быть, что-то связано с MySQL?
Я не понимаю! Я использовал System.out.println
для отладки, но последняя строка кода, которая работала, была ResultSet
, прежде чем я прокомментировал «МОЖЕТ БЫТЬ ОШИБКА ЗДЕСЬ?».
Итак, есть мысли по этому поводу?