나는 여기 손실에 조금이다. 나는 특정 목적을 위해 javax.sql.RowSet
의 구현을 작성해야하고, 가능한 한 단위 테스트를하려고합니다.삽입 행의 커서로 ResultSet # next에서 발생해야하는 것은 무엇입니까?
이제 ResultSet
에는 정상적인 행 (또는 첫 번째 또는 마지막 행) 또는 삽입 행에있을 수있는 커서가 있습니다. moveToInsertRow()
메시지 :
커서가 삽입 행에있을 때만 updater, getter 및 insertRow 메서드가 호출 될 수 있습니다.
그 다음에는 무엇이 일어나야하는지에 대해서는 언급하지 않습니다.
내가 JDBC API에 대한 사전 경험이없는 세트를이 메소드가 클로즈 된 결과에 불려 갔을 경우 따라서 의도적으로 지정되지 않았는지 (정의되지 않은 동작인가?) 또는 단순한 감독인지 여부에 대한 단서가 없습니다. 은 현재 내가 (- 여기 경우 것이 어느 것도한 줄을 현재 위치에서 앞으로 이동합니다.
ResultSet
커서는 처음에 첫 번째 행 앞에 위치합니다. 다음에 메소드를 처음 호출하면 첫 번째 행이 현재 행이됩니다. 두 번째 호출은 두 번째 행을 현재 행으로 만드는 식입니다.다음 메서드를 호출 할 때
false
이 반환되면 커서는 마지막 행 뒤에 위치합니다. 현재 행이 필요한ResultSet
메소드를 호출하면SQLException
이 발생합니다. 결과 집합 유형이TYPE_FORWARD_ONLY
이면 해당 JDBC 드라이버 구현이false
을 반환하는지 아니면next
을 호출 할 때SQLException
을 throw할지 지정합니다.입력 스트림이 현재 행에 대해 열려있는 경우
next
메서드를 호출하면 암묵적으로 닫힙니다. 새 행을 읽을 때ResultSet
개체의 경고 체인이 지워집니다.결과 :
true
새로운 현재 행이 유효한 경우; 행이 더 이상없는 경우false
는예외 :
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우, 또는
SQLException
는 DB 오류 또는 폐쇄
ResultSet
신호로) 난 그냥 그 곳이 지정되지 않은 것 때문에 아마
UnsupportedOperationException
더 나은 것에도 불구하고
SQLException
던질 거라고 생각합니다.
아니면 어딘가에 약간의 설명서가 누락 되었습니까?
그 자체로 동일한 문서가 저의 머리를 회전 시켰습니다. 100 행을로드한다고 가정 해 보겠습니다. 1) Resultset에서 next()를 호출하면 '입력 스트림'을 말할 때 그들이 말하는 것은 무엇입니까? 2) 나중에 SQLException을 얻지 않고 동일한 ResultSet에서 absolute (-1)를 다시 호출 할 수 있습니까? 3)이 '경고 사슬'은 무엇입니까? – JGFMK
@JGFMK : 1. 입력 스트림은 여전히 열 수있는'update * Stream' 메소드 중 하나와 함께 전달 된'InputStream' 객체입니다. 2.'절대 (-1)'소리가 이상하게 들리지만 지금 당장은 문서가 없지만 "빼기"행이 없으므로 오류라고 생각합니다. 3. 경고 체인은 다양한 메소드를 호출 할 때 데이터베이스에서 발생한 경고를 수집합니다. 내 구현에서는 사용되지 않았기 때문에 (CSV 파일은 경고를 생성하지 않으므로) 너무 신경 쓰지 않았습니다. 결과적으로 알아낼 수 있어야하지만, RowSet의 200 가지 이상의 메소드는 이것을 쉽게 만들지 않습니다. – Joey
절대 (-1)은 마지막 행에 위치합니다. 상대 (-1)은 이전()과 동일 http://download.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#relative(int) – JGFMK