2013-02-03 2 views
0

저는 JAVA 및 Oracle DB를 사용하여 소프트웨어를 프로그래밍 중입니다.JAVA 루프없이 데이터베이스에서 데이터 가져 오기

는 일반적으로 우리는

Resultset rt = (Resultset) cs.getObject(1); 

while(rt.next){ 
    .... 
} 

같은 루프를 사용하여 데이터베이스의 값을 얻을 그러나 데이터베이스에서 데이터의 수천을 가져올 때 소리가 더 느리게이다.

내 질문은 : 오라클 DB에서

:이 같은 절차를 작성하고 그것을 순회 데이터이며, 커서에 할당합니다. 자바 코드에서

Ex.procedure test_pro(sysref_cursor out info) as 

open info select * from user_tbl ...... 

end test_pro; 

: 내가 전에 언급 한 바와 같이 나는, 내가 왜 값 것을 얻기 위해 루프를 사용한다 a를 resultset을 반복 값을 얻을 수 있지만, 데이터베이스의 측면, 심지어 내가 값을 선택?

(닷넷 프레임 워크의 또 다른 사실은. 그래서 반복하는하지 않고, .NET의 같은 데이터베이스 절차를 바인딩, 자바에있는 어떤 방법이 개념을 바인딩 데이터베이스를 사용하는 것입니다. )

+2

루핑없이 그렇게 할 방법이 없습니다를 참조하십시오 .. –

+0

:-) 당신은 당신이 당신의 결과 집합 말을 의미합니까 ORM – smk

+0

@Praneeth를 사용할 수는 항상 DB와 돈에서 하나의 행을 반환합니다 이 경우에는 여기에있는 동안 단일 행 아웃 아웃이므로 원하는가? 실제로 RESULT-SET을 사용하면 DB에서 반환 된 단일 행의 열을 반복 할 수 있습니다. 여러 행이 반환되면 여러 행을 반복하려면 while()이 필요합니다. –

답변

1

하는 경우 예를 들어

:이 경우 한 번), 당신도 할 경우 건너 뛸 수 있습니다 단지 (rs.next 전화처럼 항상 정확히 하나 개의 결과가있을 것입니다 확실히 알

ResultSet resultset = statement.executeQuery("SELECT MAX (custID) FROM customer"); 
resultset.next(); // exactly one result so allowed 
int max = resultset.getInt(1); // use indexed retrieval since the column has no name 
0

을 예, 자바에서 프로 시저를 호출 할 수 있습니다. http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/

+0

하지만, sys_refcursor를 얻을 때. 그 객체를 가져 오기위한 루프가 필요합니다. –

+0

@Praneeth 다중 행이있는 경우 루프를 피할 방법이 없습니다. 만 리가없는 자바 객체에 데이터베이스를 매핑하려면 ormlite와 같은 일부 프레임 워크를 사용해야합니다. 캐스트됩니다. 데이타베이스의 행을 Java 객체에 건네줍니다. – xff1874

+0

감사합니다 comment.ok "ormlite"를 찾아 보겠습니다. –

0

당신은 반복 피할 수 없다. 성능상의 이유로 Statement 또는 Resultset 오브젝트에서 프리 페치를 조정해야합니다 (100은 확실한 시작점 임).
왜 이렇게 했습니까? 그것은 읽기 스트림 유사 - 당신이 얼마나 큰 몰랐어 - 당신이 덩어리/버퍼, 차례로 읽을 수 있도록 ...

1

해당 데이터를 어느 frequence에 무슨 말을하는 건가요에 따라, ref_cursor에 대한 선택은 좋거나 나쁜 것일 수 있습니다. Ref_cursors는 비 오라클 인식 프로그램에보고를 위해 데이터를 전달하는 방법을 제공하기위한 것입니다.

는 경우, 루프에 충실하지만, 이것은 성능에 엄청난 효과를 가지고 있기 때문에 배열을 가져 오는 구현하는 것을 잊지 마세요. 데이터베이스는 클라이언트에서 jdbc 버퍼의 행을 사용자에게 전달하고 사용자는 해당 버퍼에서 행을 가져옵니다. 버퍼의 끝에 도달 할 때까지 Jdbc 계층은 데이터베이스에서 다음 행의 행을 요청하여 많은 네트워크 왕복을 제거합니다. 기본값은 한 번에 10 개의 행을 가져옵니다. 큰 세트의 경우 메모리가 공간을 제공 할 수있는 경우 더 큰 숫자를 사용하십시오.

Oracle® Database JDBC Developer's Guide and Reference

관련 문제