2016-08-29 2 views
0

Accessテーブルからデータを取得してJTableに表示しようとしています。 Java 8はJDBC-ODBCをサポートしていないため、UCanAccessを使用しています。UCanAccess例外:ResultSetからgetMetaDataを取得できません(無効なカーソル状態)

私のウィンドウクラスが充電メソッドを呼び出します。

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

その後、CtrlGestionVentas.cargarListaVentas(タブラ)はResultSetのからのJTableを埋める:

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); 

} 

} 

ここでのResultSetゲッターメソッドがDataVentasクラスで、です(注: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; 
    } 

} 
私は実行するとは、私は次を得る:

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 

注デバッガにマークされ、最後の行はbuildTableModel法(rs.getMetaData())でのものであること。何が起きてる?

ありがとうございました!

答えて

1

ResultSetを取得し、finallyブロックでそれを閉じるメソッドです。したがって、そのResultSetをまったく使用することはできません。コードを再編成する必要があります。

+0

優秀!今それは動作します。どうもありがとう! –

関連する問題