2016-08-29 3 views
0

Access 테이블에서 데이터를 가져 와서 JTable에 표시하려고합니다. Java 8은 JDBC-ODBC를 지원하지 않으므로 UCanAccess를 사용하고 있습니다.UCanAccess 예외 : ResultSet에서 getMetaData를 사용할 수 없습니다 (잘못된 커서 상태)

내 창 클래스가 충전 방법 전화 : 여기

public class CtrlGestionVentas { 

public void cargarListaVentas(JTable tabla) { 

    ResultSet rs; 
    DataVentas dv = new DataVentas(); 
    rs = dv.getListaVentas(); 
    try { 
      tabla.setModel(buildTableModel(rs)); 
      RowSorter sorter = new TableRowSorter(buildTableModel(rs)); 
      tabla.setRowSorter(sorter); 
      tabla.getTableHeader().setDefaultRenderer(new MultiSortTableCellHeaderRenderer()); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 


public static DefaultTableModel buildTableModel(ResultSet rs) 
     throws SQLException { 

    ResultSetMetaData metaData = rs.getMetaData(); /*THIS IS THE LINE WHICH APPARENTLY PROVOKES THE ERROR*/ 

    // names of columns 

    Vector<String> columnNames = new Vector<String>(); 
    int columnCount = metaData.getColumnCount(); 
    for (int column = 1; column <= columnCount; column++) { 
     columnNames.add(metaData.getColumnName(column)); 
    } 

    // data of the table 

    <Vector<Object>> data = new Vector<Vector<Object>>(); 
    while (rs.next()) { 
     Vector<Object> vector = new Vector<Object>(); 
     for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { 
      vector.add(rs.getObject(columnIndex)); 
     } 
     data.add(vector); 
    } 

    return new DefaultTableModel(data, columnNames); 

} 

} 

이 DataVentas 클래스에서의 ResultSet getter 메소드입니다 : 다음

ctrlGestionVentas= new CtrlGestionVentas(); 
ctrlGestionVentas.cargarListaVentas(tblListaVentas); 

을 CtrlGestionVentas.cargarListaVentas (타블라)는 결과 집합에서의 JTable을 채 웁니다 (참고 : FactoryConexion에는이 게시물에서 생략 된 ConnectionString이 있습니다) :

public class DataVentas { 
    public ResultSet getListaVentas() { 
     PreparedStatement stmt=null; 
     ResultSet rs=null; 
     try { 

      stmt = FactoryConexion.getInstancia().getConn().prepareStatement("select * from ventasfinal"); 
      rs = stmt.executeQuery(); 
     } catch (SQLException ex) { 

       System.out.println("SQLException: " + ex.getMessage()); 

     } 
     finally{ 
      try { 
       if (rs!=null) 
        rs.close(); 
       if (stmt!=null)stmt.close();     
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
     return rs; 
    } 

} 
내가 실행하면, 나는 다음과 같은 얻을 : 디버거에 표시된 마지막 줄 buildTableModel 방법의 하나라고

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 estado del cursor incorrecto: cursor indicado no está abierto 
    at net.ucanaccess.jdbc.UcanaccessResultSet.getMetaData(UcanaccessResultSet.java:480) 
    at negocio.CtrlGestionVentas.buildTableModel(CtrlGestionVentas.java:37) 
    at negocio.CtrlGestionVentas.cargarListaVentas(CtrlGestionVentas.java:22) 
    at ui.GestionVentas.<init>(GestionVentas.java:85) 
    at ui.GestionVentas$1.run(GestionVentas.java:63) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at 
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

Caused by: java.sql.SQLException: estado del cursor incorrecto: cursor indicado no está abierto 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCResultSet.checkClosed(Unknown Source) 
    at org.hsqldb.jdbc.JDBCResultSet.getMetaData(Unknown Source) 
    at net.ucanaccess.jdbc.UcanaccessResultSet.getMetaData(UcanaccessResultSet.java:478) 
    ... 18 more 

Caused by: org.hsqldb.HsqlException: estado del cursor incorrecto: cursor indicado no está abierto 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.error.Error.error(Unknown Source) 
    ... 22 more 

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 estado del cursor incorrecto: cursor indicado no está abierto 
    at net.ucanaccess.jdbc.UcanaccessResultSet.getMetaData(UcanaccessResultSet.java:480) 
    at negocio.CtrlVendedores.buildTableModel(CtrlVendedores.java:38) 
    at negocio.CtrlVendedores.cargarListaVendedores(CtrlVendedores.java:23) 
    at ui.GestionVentas.<init>(GestionVentas.java:95) 
    at ui.GestionVentas$1.run(GestionVentas.java:63) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at 
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

Caused by: java.sql.SQLException: estado del cursor incorrecto: cursor indicado no está abierto 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCResultSet.checkClosed(Unknown Source) 
    at org.hsqldb.jdbc.JDBCResultSet.getMetaData(Unknown Source) 
    at 
net.ucanaccess.jdbc.UcanaccessResultSet.getMetaData(UcanaccessResultSet.java:478) 
    ... 18 more 

Caused by: org.hsqldb.HsqlException: estado del cursor incorrecto: cursor indicado no está abierto 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.error.Error.error(Unknown Source) 
    ... 22 more 

주 (rs.getMetaData()). 무슨 일 이니?

시간 내 주셔서 감사합니다.

답변

1

ResultSet을 가져 와서 finally 블록에서 닫는 메소드입니다. 그래서 당신은 그 ResultSet을 전혀 사용할 수 없습니다. 코드를 다시 구성해야합니다.

+0

우수! 이제 작동합니다. 고마워요! –

관련 문제