MySQL / Java больше не подключается после обновления текущего дня - PullRequest
0 голосов
/ 08 марта 2019

Я программирую это программное обеспечение (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, прежде чем я прокомментировал «МОЖЕТ БЫТЬ ОШИБКА ЗДЕСЬ?». Итак, есть мысли по этому поводу?

...