タイトルの言い方がよくわからなかったので、申し訳ありません。いくつかの開始および停止スケジュール時刻をデータベースにロードしようとしていますが、同じシステムの開始時刻と停止時刻が重複することがあります。たとえば、ある時刻と5:30 to 12:30
同じシステムの別の時刻が重複することがあります。8:30 to 10:30
そのデータの挿入を避けたいと考えています。テーブルに。
私はjdbcとodbcブリッジを使用してJavaプログラムでこれをすべて実行しています。ユーザーがスケジュールの生成をクリックすると、テキストファイルからすべてのスケジュール情報が読み取られ、データベースに挿入されます。プログラムが既存の時間の間にある時間を読み取るとき、挿入をスキップしたいと思います。
私のアイデアは、テキストファイルから取得した終了時間をデータベース内の時間の最大値と比較する方法をいくつか検討する必要があり、その値よりも小さい場合はこの挿入をスキップしますが、最大値を関連付ける方法がわかりません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側の変数に保存できるかどうかです。次に、前に行ったのと同じ比較を行います