[問題] JTable抓資料庫資料...
大家好,小弟目前在實作從資料庫中抓資料丟進JTable中,
從表單抓資料已經可運作,請問如果想在另一個class的方法內畫出JTable,
而且這個JTable要能抓到conSQL這個class中的columnName與recordSet,請問該如何實作
?
小弟用過DefaultTableModel..都抓不到資料..麻煩各位大大指點小弟一下 謝謝~
補充一下我現在的做法 我另一個class是繼承conSQL這個class,但是在使用columnName時
,是空值...是小弟的想法哪邊歪了嗎? 謝謝~~
補充一下JTable部分和主程式部分
class A {
public static voide main(String[] args){
conSQL cns = new conSQL();
cns.run("select * from employees");
member_dialog td = new member_dialog(); //產生對話視窗
td.layout();
}
}
class conSQL {
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:JDBC";
int columnCount;
String[] columnName;
String[] record;
Connection con;
Statement stmt;
ResultSet rs;
ResultSetMetaData rsmd;
@SuppressWarnings("rawtypes")
Vector recordSet;
@SuppressWarnings("rawtypes")
public conSQL() { // 建構函式
recordSet = new Vector();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public void run(String sqlString) {
recordSet = new Vector();
try {
Class.forName(driver);// 載入JDBC Driver
con = DriverManager.getConnection(url);// 與資料來源建立連結
stmt = con.createStatement(); // 建立Statement物件
rs = stmt.executeQuery(sqlString); // 執行SQL指令以ResultSet物件儲存
rsmd = rs.getMetaData(); // 回傳ResultSet欄位的數目、型態、屬性
columnCount = rsmd.getColumnCount(); // 回傳ResultSet欄位的數目
columnName = new String[columnCount];
for (int i = 1; i <= columnCount; i++) {
columnName[i-1] = rsmd.getColumnName(i);// 取得ResultSet欄位的名稱
System.out.println(columnName[i-1]);
}
while (rs.next()) {
record = new String[columnCount];
for (int i = 1; i <= columnCount; i++) {
record[i-1] = rs.getString(i);
System.out.println(record[i-1]);
}
recordSet.addElement(record); //全部資料
}
//fireTableChanged(null);
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
}
catch (Exception e) {
recordSet = new Vector();
e.printStackTrace();
}
}
public String getColumnName(int i) {
return columnName[i];
}
public int getColumnCount() {
return columnCount;
}
public int getRowCount() {
return recordSet.size();
}
public Object getValueAt(int row, int col) {
return ((String[]) recordSet.elementAt(row))[col];
}
}
====================================================================
class member_dialog extends conSQL{
JFrame frame;
JScrollPane scroller_1;
DefaultTableModel model;
JTable table;
public member_dialog(){
frame = new JFrame();
scroller_1 = new JScrollPane();
model = new DefaultTableModel();
}
public void layout(){
Container pane = frame.getContentPane();
GridBagLayout grid = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
pane.setLayout(grid);
try{
for (int i = 1; i <= columnCount; i++) {
model.addColumn(columnName[i-1]);
}
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
record[i-1] = rs.getString(i);
}
recordSet.addElement(record); //全部資料
model.addRow(recordSet);
}
}
catch(Exception e){
e.printStackTrace();
}
table = new JTable(model);
table.setShowGrid(true); // 是否顯示表格的格線
table.setShowHorizontalLines(true); // 是否顯示表格的水平格線
table.setShowVerticalLines(true); // 是否顯示表格的垂直格線
table.setRowSelectionAllowed(true); // 是否允許選擇橫列
table.setColumnSelectionAllowed(true); // 是否允許選擇直行
table.getTableHeader().setReorderingAllowed(true);// 是否允許移動直行
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 設定多重選
擇模式為單選
gc.gridx = 0; //公司成員表格
gc.gridy = 1;
gc.gridwidth = 2;
gc.gridheight = 2;
table.setPreferredScrollableViewportSize(new Dimension(400, 200));
scroller_1.setViewportView(table);
pane.add(scroller_1,gc);
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.171.127.97
→
09/03 02:29, , 1F
09/03 02:29, 1F
→
09/03 02:54, , 2F
09/03 02:54, 2F
→
09/03 10:13, , 3F
09/03 10:13, 3F
※ 編輯: callmeleo 來自: 122.121.202.186 (09/03 15:50)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):