SQL Server를 사용하여 resultSet에서 jTable을 MS Driver 3.0으로 채우려고합니다.SQLServerException : 결과 집합이 닫혔습니다
결과 집합, 문 또는 연결을 닫지 않는 한 표가 생성됩니다. 내가 그들을 닫을 경우, 내 표는 다시 메시지와 함께 응답 :
com.microsoft.sqlserver.jdbc.SQLServerException: The result set is closed.
나는 "테이블을 사용하는 방법"튜토리얼을 사용하여 내하는 TableModel를 작성하려고했습니다.
TableModel model = new AbstractTableModel() {
private String[] columnName = {"Employee ID", "Job Start", "Job ID", "Oper. ID", "Indir. ID"};
public int getColumnCount() {
return columns;
}
public int getRowCount() {
return rows;
}
public Object getValueAt(int row, int col) {
try {
rs.absolute(row+1);
return rs.getObject(col+1);
} catch (SQLException ex) {
System.err.println(ex);
}
return null;
}
public String getColumnName(int col) {
return columnName[col];
}
};
내 연결은 원래 자원 블록 시도에서 수행되었다,하지만 난에 넣어 문제를 찾으려고 노력에 시도 - 캐치 - 마지막으로 RS와 차단 : 여기
내 테이블 모델입니다 .close(), stmt.close() 및 connection.close(). 앞에서 언급했듯이, close 문이 없어도 제대로 작동하지만, 필자가 가지고 있다면 내 테이블 모델의 getValueAt 메서드에 도달 할 때 결과 집합이 닫히게된다고 나와 있습니다.내 전체 코드는 여기에 있습니다 : 나는 모든 것을 던지기와 @Reimeus 말한 기반으로 처음부터 시작 결국
package dashboard;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import org.omg.CORBA.DATA_CONVERSION;
public class Dashboard extends JFrame {
ResultSet rs;
Connection connection;
Statement stmt;
ResultSetMetaData md;
JScrollPane scrollpane;
int columns, rows;
JFrame frame;
String connectionUrl;
@SuppressWarnings("empty-statement")
public Dashboard() throws SQLException {
try {
connection = DriverManager.getConnection(connectionUrl);
stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(query);
ResultSetMetaData md = rs.getMetaData();
//Count number of rows
rs.last();
rows = rs.getRow();
rs.first();
//Get column Count
columns = md.getColumnCount();
TableModel model = new AbstractTableModel() {
private String[] columnName = {"Employee ID", "Job Start", "Job ID", "Oper. ID", "Indir. ID"};
public int getColumnCount() {
return columns;
}
public int getRowCount() {
return rows;
}
public Object getValueAt(int row, int col) {
try {
rs.absolute(row+1);
return rs.getObject(col+1);
} catch (SQLException ex) {
System.err.println(ex);
}
return null;
}
public String getColumnName(int col) {
return columnName[col];
}
};
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
scrollpane = new JScrollPane(table);
getContentPane().add(scrollpane);
frame = new JFrame();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setTitle("Employee Dashboard");
frame.setBounds(300, 300, 1300, 750);
frame.setResizable(false);
frame.add(scrollpane);
frame.setVisible(true);
} catch (SQLException ex) {
System.err.println(ex);
} finally {
rs.close();
stmt.close();
connection.close();
}
}
public static void main(String[] args) throws InterruptedException, SQLException {
Dashboard me = new Dashboard();
}
}
업데이트 6-4-13
. 나는 긍정적이지는 않지만 이것이 효과가 있다고 생각합니다. 나가 인쇄 할 때 model.getRowCount()
그것은 저에게 나의 질문과 동일한 행이다는 것을 저에게 말한다. 코드는 다음과 같습니다.
DefaultTableModel model = new DefaultTableModel();
ResultSetMetaData meta = rs.getMetaData();
int numberOfColumns = meta.getColumnCount();
while (rs.next()) {
Object[] rowData = new Object[numberOfColumns];
for (int i = 0; i < rowData.length; ++i) {
rowData[i] = rs.getObject(i + 1);
}
model.addRow(rowData);
System.out.println(model.getColumnName(1));
}
문제점은 제가 테이블 모델로 테이블을 생성 할 수 없다는 것입니다. 내 마음 내가 생각하고에서는
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
scrollpane = new JScrollPane(table);
getContentPane().add(scrollpane);
frame = new JFrame();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.add(scrollpane);
frame.setVisible(true);
:
DB를 RS RS에 표 모델 TM에 표 표에 ScrollPane에 에 스크로 르페
을 JTable가 여기 내가 일한 것이라고 생각 것입니다나는 그것이 내가하고있는 바보 같은 것이라고 확신한다. 그러나 나는 아직도 그것을 인식 할만큼 충분히 지식이 없다.
을 방지 할 수 있습니다. 질문은 무엇입니까? – Reimeus
Jeez, 나는 여기에 게시하는 것이 너무 긴장되어 어떤 종류의 질문을하는 것을 사실 잊었다. 내 질문은 내 getValueAt 메서드 전에 내 결과 집합 닫는 이유는 무엇입니까? 지난 며칠 동안 여러 가지 예를보고 있었고이를 사용하는 방법의 예를 사용했습니다. 벡터로 작업 했었지만 vector가 더 이상 사용되지 않는 것을 알았습니다. 이제는 결과 세트에 데이터가 들어 있다는 것을 알았습니다. 단지 테이블에 넣고 싶습니다. 내 생각에 이것은 의미가 있지만, 나는 확실히 초보자이며 최후의 수단으로 여기에 왔습니다. – Prizz