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()). 무슨 일 이니?
시간 내 주셔서 감사합니다.
우수! 이제 작동합니다. 고마워요! –