저는 DatabaseMetaData 인스턴스를 사용하여 데이터베이스를 검사하고 있습니다. DB에있는 테이블의 모든 정보를 얻었고 예외없이 모든 Resultset을 반복합니다.DatabaseMetaData 쿼리에서 결과 집합의 가져 오기 모드를 변경할 수 있습니까?
반복이 끝나면 ResultSet의 시작 부분으로 돌아가므로 next() 메서드 다음에 next() 메서드를 호출하여 ResultSet의 첫 번째 요소를 가져옵니다.
connect(request.getParameter("source"));
DatabaseMetaData patrol = link.getMetaData();
answer = patrol.getTables(null, null, null, null);
while (answer.next()) {
String nomTable = answer.getString("TABLE_NAME");
System.out.println(nomTable)
}
answer.beforeFirst();
answer.next();
String table = answer.getString("TABLE_NAME");
answer.close();
내 모든 결과를 가지고 그러나 나는이 예외를 가지고 : 여기 내 코드는 모든 것이 정상적인 것
java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY
at sun.jdbc.odbc.JdbcOdbcResultSet.beforeFirst(Unknown Source)
at InspectDB.doPost(InspectDB.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:747)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
at com.sun.web.core.ServletWrapper.handleRequest(ServletWrapper.java:155
)
at com.sun.web.core.InvokerServlet.service(InvokerServlet.java:168)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
at com.sun.web.core.ServletWrapper.handleRequest(ServletWrapper.java:155
)
at com.sun.web.core.Context.handleRequest(Context.java:414)
at com.sun.web.server.ConnectionHandler.run(ConnectionHandler.java:139)
'여기까지. 내 연결 (A MSAcsess에 JDBC-OBDC)에 따르면,의는, 모드 ONLY_FORWARD 페치 나의 ResultSet의 나는 예비 모드를 허용하기 위해
answer.setFetchDirection(ResultSet.FETCH_REVERSE);
answer.beforeFirst();
answer.next();
을 사용하여 변경하려고 ...하지만 그렇지 않습니다 저를 허용. 새로운 예외 :
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcResultSet.setFetchDirection(Unknown Source)
at InspectDB.doPost(InspectDB.java:58)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:747)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
at com.sun.web.core.ServletWrapper.handleRequest(ServletWrapper.java:155)
at com.sun.web.core.InvokerServlet.service(InvokerServlet.java:168)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
at com.sun.web.core.ServletWrapper.handleRequest(ServletWrapper.java:155)
at com.sun.web.core.Context.handleRequest(Context.java:414)
at com.sun.web.server.ConnectionHandler.run(ConnectionHandler.java:139)
는이 DatabaseMetaData의에서 오는 결과 집합에 페치 모드를 설정 할 수 있습니까? 내가 어떻게 해??
감사합니다.
감사합니다. 이미 Statement 인스턴스를 통해 Fetch 방향을 설정할 수 있다는 것을 이미 알고있었습니다. 그러나이 경우 objet 문은 없습니다. ResultSet은 DatabaseMetaData에 의해 직접 반환되며 목적은 예를 들어 getTables 메소드를 호출하기 전에 Fetch Direction을 설정할지 여부를 알 수 있습니다. – jomaora
앞에서 언급했듯이 포워드 결과 집합을 가져온 후에 가져 오는 방향을 설정할 수는 없습니다. DatabaseMetaData 쿼리에 대해 페치 방향 힌트를 미리 설정하는 방법이 있는지 여부에 관해서는, 나는 하나도 알지 못하지만 그것이 존재하지 않는다는 것을 의미하지는 않습니다. – gcooney
또 다른 한 가지 - 명령문을 통해 페치 방향을 설정하는 것은 힌트이며 보증은 아닙니다. 모든 드라이버가 모든 가져 오기 경로를 지원하지는 않습니다. – gcooney