我正在对该软件(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
,然后我评论了“这里有错误吗?”。
那么,对此有何想法?