원격 웹 서비스 &에서 데이터를 가져 와서 Oracle 데이터베이스로 푸시 할 응용 프로그램을 작성 중입니다.오라클 효율성을 갖춘 Java PreparedStatement?
이제 데이터는 이벤트 기반이므로 INSERT/UPDATE 또는 DELETE 일 수 있습니다. 이를 위해 preparedStatement &의 단일 객체를 만든 다음 이벤트 유형에 따라 코드가 문자열을 만듭니다. &은 준비된 명령문에 할당합니다.
이제 각 검색 이벤트 오라클에 테이블 이름 월 각 이벤트를 검색 한 후에, 문자열이 동작 & 후 실행 PreparedStatement 객체 &에 전달되고 수행되는 테이블에 기초하여 생성되므로, 따라서 질의 &을 변경한다.
하지만, 나는이 2 문제를했습니다 - 내가 생각
- , 내가 된 PreparedStatement에 대한 DB 캐싱 메커니즘은 많은 도움이 될 것입니다 경우 쿼리가 확실하지 않은 변경 때마다 때문에, 효율적으로 준비된 문을 사용하지 않는 이 경우에.
또한 내 모든 문장은 INSERT, UPDATE 또는 DELETE 중 하나이므로 pstmt.executeUpdate()를 사용하고 있습니다. 이제는 조작으로 영향을받는 행 수를 반환합니다. 하지만, 나는 "최대 오픈 커서 확장 오류"를지고 있어요 ... 많은 문을 & 내 결과가 결과를 반환하지 않기 때문에, & 각 작업 후 효율적으로, 내가 어떻게이 오류를 처리해야 잘 모르겠 preparedstatement 폐쇄 닫습니다. DB에서 열린 커서 수를 늘릴 수 있지만 나쁜 시나리오가 발생할 때까지 오류 만 지연 될 수 있으므로 응용 프로그램이 수정되지 않습니다.
getEvents()
for (i = 0 -> lastevent)
{
if (event == condition1)
{
Process.condition1(arg1, arg2)
}
else if (event == condition2)
{
Process.condition2(arg1, arg2)
}
.
.
.
}
pstmt.close();
connection.close();
프로세스 클래스
{
condition1(arg1, arg2)
{
sqlstatement = "INSERT INTO Table1 (column1, column2, column3,...) VALUES (?, ?, ?);"
pstmt = connection.prepareStatement(sqlstatement);
pstmt.setString(1, value1);
pstmt.setInt(2, value2);
.
.
.
pstmt.executeUpdate();
connection.commit();
return;
}
condition2(arg1, arg2)
{
sqlstatement = "INSERT INTO Table2 (column1, column2, column3,...) VALUES (?, ?, ?);"
pstmt = connection.prepareStatement(sqlstatement);
pstmt.setString(1, value1);
pstmt.setInt(2, value2);
.
.
.
pstmt.executeUpdate();
connection.commit();
return;
}
}
죄송합니다, 나는 위의 모든 과정이 완료되는 방법에 대한 몇 가지 아이디어를 줄 수 추측 ... 나는 'didn를 실제 코드를 넣으면 다양한 클래스들 사이에 분산되어 있습니다. & 원격 서비스에서 위치 매개 변수에 대한 데이터를 얻습니다. 그러나 위의 내용은 어떻게 수행되고 있는가를 요약 한 형태입니다.
& 비슷한 종류의 이벤트를 처리 할 수도 있지만 내 비즈니스 요구 사항이 & 인 방식으로 원격 서비스가 데이터를 제공하는 방식으로 오류가 발생하기 쉽습니다.
또한 oracle &의 일부 테이블에는 130 개 이상의 열이 있으며이 코드는 15 분마다 150 개 이상의 이벤트를 처리합니다.
어떻게'PreparedStatement'를 사용하는지 보여주십시오. –
코드 제공을 요청했습니다. 이 사이트는 프로그래머 용이며 코드/디자인에 문제가 있으므로 코드를 게시하여 현재 디자인을 확인하십시오. 최종 사용자로서 코드에 대해 질문하지 마십시오. –
짧은 대답 : 바퀴를 재발견하려하지 않습니다. myBatis (iBatis) 또는 최대 절전 모드를 사용하십시오. – DwB