我不太确定如何措辞标题,对此感到抱歉。我正在尝试将一些开始和停止计划时间加载到数据库中,但有时同一系统的开始和停止时间会重叠,例如一个时间可能是5:30 to 12:30
,然后同一系统的另一个时间可能是8:30 to 10:30
我想避免插入该数据到表中。
我在 java 程序中使用 jdbc 和 odbc 桥来完成这一切,当用户单击生成计划时,它会从文本文件中读取所有计划信息,然后将其插入数据库。当程序读取已经存在的时间之间的时间时,我想跳过插入。
我的想法必须是一些如何比较我从文本文件中获得的结束时间与数据库中时间的 MAX 值,如果它小于该值,则跳过此插入,但我不知道如何绑定 MAX 值进入 if 语句。另一个想法是在我完成所有插入之后,只需删除SCHEDULE_TIME
大于列中最小值SCHEDULE_TIME
且SCHEDULE_TIME
小于列中最大值的SCHEDULE_TIME
行。
这是我表中数据的示例:
SITE_ID ------- DEV_ID ------- SCHEDULE_TIME ------- VALUE_ENUM
---------------------------------------------------------------
1 3000 09:30:00 1
1 3000 15:30:00 0
1 3000 12:30:00 1
1 3000 13:30:00 0
1 3000 16:30:00 1
1 3000 18:30:00 0
行从开始时间到停止时间交替,所有VALUE_ENUM
为 1 的行是开始时间,所有VALUE_ENUM
为 0 的行是停止时间。我试图删除其他开始和停止时间之间的时间,在这种情况下删除第 3 行和第 4 行。请记住,这个表实际上从文本文件中创建了数百行,所以我不能手动删除它,它会是最好是我能找到一种方法来避免插入它。
这是我当前插入方法的副本,忽略我使用的所有额外列,它们与问题无关,它们只是使用,所以我为正确的系统添加和删除。
private void Insert() throws SQLException
{
stmt = conn.createStatement();
String sqlStm = "update ARRAY_BAC_SCH_Schedule set SCHEDULE_TIME = {t '" + finalEnd + "'} WHERE SCHEDULE_TIME >= {t '" + finalStart + "'} AND" +
" SCHEDULE_TIME <= {t '" + finalEnd + "'} AND VALUE_ENUM = 0 AND DEV_ID = " + devID + " and INSTANCE = " + instanceNum;
int updateSuccess = stmt.executeUpdate(sqlStm);
if (updateSuccess < 1)
{
sqlStm = "insert into ARRAY_BAC_SCH_Schedule (SITE_ID, DEV_ID, INSTANCE, DAY, SCHEDULE_TIME, VALUE_ENUM, Value_Type) " +
" values (1, " + devID + ", " + instanceNum + ", " + day + ", {t '" + finalStart + "'}, 1, 'Unsupported')";
stmt.executeUpdate(sqlStm);
sqlStm = "insert into ARRAY_BAC_SCH_Schedule (SITE_ID, DEV_ID, INSTANCE, DAY, SCHEDULE_TIME, VALUE_ENUM, Value_Type) " +
" values (1," + devID + ", " + instanceNum + ", " + day + ", {t '" + finalEnd + "'}, 0, 'Unsupported')";
stmt.executeUpdate(sqlStm);
}
if(stmt!=null)
stmt.close();
}
我希望我已经对此进行了足够的解释,如果问题不清楚,我很抱歉。
我还在 sql 标签下发布了这个问题,看看是否有人知道仅使用 sql 的方法。
更新:我之前通过输入最后一个开始和结束时间来让它工作,然后当我进入 2 个新时间时,我检查了新的开始时间 >= 前一个,新的结束时间 <=之前的结束时间,如果是,我会跳过插入。
但是我不得不对程序进行一些更改,我无法再获得以前的开始/结束时间,我现在的想法是,如果我可以选择表中的最后 2 次并将它们保存到 java 端的变量中并且然后做我之前做的同样的比较