제목을 잘못 쓰는 방법을 확실히 알지 못했습니다. 일부 시작 및 일정 시간을 데이터베이스에로드하려고 시도하지만 때로는 같은 시스템에 대한 시작 및 중지 시간이 중복되어 같은 시간에 5:30 to 12:30
일 수 있으며 동일한 시스템에 대한 다른 시간은 8:30 to 10:30
일 수 있습니다. 삽입을 피하고 싶습니다. 그 데이터를 테이블에 저장하십시오.jdbc-odbc를 사용하여 충돌하는 행을 삭제하십시오.
jdbc 및 odbc 브리지를 사용하여 Java 프로그램에서이 작업을 모두 수행합니다. 사용자가 생성 일정을 클릭하면 텍스트 파일에서 모든 일정 정보를 읽은 다음 데이터베이스에 삽입합니다. 프로그램이 이미 존재하는 시간 사이에있는 시간을 읽었을 때 나는 삽입하는 것을 건너 뛰고 싶습니다.
내 아이디어 그래서 내가 데이터베이스에서 시간의 최대 값을 가진 텍스트 파일에서 얻을 수있는 끝 시간을 비교하고 그 값보다 작 으면이 삽입을 건너 뛸 수 있지만 어떻게 해야할지 모르겠다. 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
를 시작할 수 있습니다 모든 행을 중지하려면 여기
여기에 현재 삽입 방법의 복사본이 있습니다. 사용하는 모든 여분의 열을 무시합니다. 문제와 관련이 없으며 올바른 시스템을 추가하고 삭제하기 때문에 사용하고 있습니다.
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으로이를 수행하는 방법을 알고 있는지 확인합니다.
업데이트 : 나는 입력하고 내가 확인이 새로운 시간을 입력 갈 때 다음 새 시작 시간 이었다는 것을 확인하기 위해 마지막 시작 시간과 종료 시간을 복용하기 전에 작업을했다> = 이전과 그 새로운 종료 시간 < = 이전 종료 시간. 만약 그렇다면 삽입을 건너 뜁니다.
그러나 이전의 시작/종료 시간을 더 이상 얻을 수없는 프로그램을 약간 변경해야했습니다. 이제 테이블에서 마지막 두 번을 선택하여 변수에 저장하면됩니다. 자바 쪽 그리고 나서 내가 전에했던 동일한 비교를 할
사용할 범위를 어떻게 결정했는지 어떻게 알 수 있습니까? 예를 들어 9:30 ~ 15:30 (1 행, 2 행)이 예제였습니다. 하지만 9시 30 분에서 13시 30 분 (line1, line4)이 될 수 있습니까? –
@AlfredoO 그렇습니다. 예를 들어'9:30 to 13 : 30'이 될 수는 있지만,'12:30 to 13:30'은 제 함수의'update'가 성공할 것이므로'updateSuccess'가 1 그래서'insert' 문을 입력하는'if' 문을 입력하지 않을 것입니다. 여러분의 질문에 대답 한 희망이 – Beef
바로 처리하는 순서가 맞습니까? –