2017-03-31 192 views
1

我试图从结果集的元数据中获取coulmn count时,似乎遇到问题。线程“AWT-EventQueue-0”中的错误为异常java.lang.IllegalStateException:SQLite JDBC:不一致的内部状态。从ResultSet元数据调用getColumnCount()时出错

想法是使用此表模型来填充来自数据库查询结果的JTable。但是,当我做到我得到上述错误。

相关的代码是:

public DefaultTableModel buildFlightModel() 
      throws SQLException { 

     query="SELECT Airline.AirlineName, Flight.FlightID, Flight.Location, Flight.Destination, Flight.ArriveTime, Flight.LeaveTime FROM Flight INNER JOIN Airline ON Airline.AirlineID=Flight.AirlineID;"; 

      try { 
       Class.forName("org.sqlite.JDBC"); 
       c = DriverManager.getConnection("jdbc:sqlite:coursework.db"); 
       stmt = c.createStatement(); 
       rs=stmt.executeQuery(query); 
       while(rs.next()){ 
        //System.out.println(s); 
       } 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     ResultSetMetaData metaData = rs.getMetaData(); 

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

    } 

任何想法/想法/帮助将深表感激。谢谢。

+1

http://stackoverflow.com/questions/25108764/gooddata-metadata-extraction-failed-sqlite-jdbc-inconsistent-internal-state –

回答

0

ResultSet.isclose() == true时抛出此异常。尝试在启动读取循环之前创建MetaDataClone

+0

请使用正确的格式! – SteveFest