gpt4 book ai didi

java - 使用 jdbc-odbc 删除时间冲突的行

转载 作者:行者123 更新时间:2023-11-30 04:59:20 27 4
gpt4 key购买 nike

我不太确定如何表达标题,对此感到抱歉。我正在尝试将一些开始和停止计划时间加载到数据库中,但有时同一系统的开始和停止时间会重叠,例如一次可能是 5:30 到 12:30,然后是另一个同一系统的时间可能是8:30 到 10:30 我想避免将该数据插入表中。

我使用 jdbc 和 odbc 桥在 java 程序中完成这一切,当用户单击“生成计划”时,它会从文本文件中读取所有计划信息,然后将其插入数据库中。当程序读取已存在时间之间的时间时,我想跳过执行插入操作。

我的想法是如何比较我从文本文件中获得的结束时间与数据库中时间的最大值,如果它小于该值,则跳过此插入,但我不知道如何绑定(bind)将 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端然后进行与之前相同的比较

最佳答案

我认为问题出在你的设计上。如果您的文本文件依赖于顺序,则不应按原样保存在数据库中。

我会将该信息存储在一条记录中。例如,您不需要在数据库中拥有 VALUE_ENUM 和两条记录,而是只需要一条包含以下字段 START_SCHEDULE_TIME 和 END_SCHEDULE_TIME 的记录。现在,通过该设计,您可以像这样进行选择:

select count(*) from ARRAY_BAC_SCH_Schedule where finalStart >= START_SCHEDULE_TIME and finalEnd <= END_SCHEDULE_TIME

如果 select 返回 1,那么您只是跳过而不插入。

关于java - 使用 jdbc-odbc 删除时间冲突的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com