1 24 25 package com.mckoi.jfccontrols; 26 27 import javax.swing.table.*; 28 import java.sql.*; 29 30 39 40 public class ResultSetTableModel extends AbstractTableModel { 41 42 45 private ResultSet result_set; 46 47 50 private ResultSetMetaData meta_data; 51 52 55 private int row_count; 56 57 61 private boolean preserve_table_structure; 62 63 64 67 public ResultSetTableModel(ResultSet result_set) { 68 super(); 69 preserve_table_structure = false; 70 if (result_set != null) { 71 updateResultSet(result_set); 72 } 73 else { 74 clear(); 75 } 76 } 77 78 public ResultSetTableModel() { 79 this(null); 80 } 81 82 88 public void setPreserveTableStructure(boolean status) { 89 preserve_table_structure = status; 90 } 91 92 95 public void updateResultSet(ResultSet result_set) { 96 try { 97 boolean fire_structure_change = true; 98 if (this.result_set != null) { 99 if (preserve_table_structure) { 103 ResultSetMetaData old_meta_data = this.meta_data; 105 ResultSetMetaData new_meta_data = result_set.getMetaData(); 106 int col_count = new_meta_data.getColumnCount(); 107 if (old_meta_data.getColumnCount() == col_count) { 108 boolean different = false; 109 for (int i = 1; i < col_count + 1 && !different; ++i) { 110 different = 111 (!old_meta_data.getColumnName(i).equals( 112 new_meta_data.getColumnName(i)) || 113 !old_meta_data.getTableName(i).equals( 114 new_meta_data.getTableName(i)) || 115 !old_meta_data.getSchemaName(i).equals( 116 new_meta_data.getSchemaName(i))); 117 } 118 fire_structure_change = different; 119 } 120 } 121 this.result_set.close(); 122 } 123 124 this.result_set = result_set; 126 this.meta_data = result_set.getMetaData(); 127 128 if (result_set.last()) { 132 row_count = result_set.getRow(); 133 } 134 else { 135 row_count = 0; 136 } 137 138 if (fire_structure_change) { 139 fireTableStructureChanged(); 140 } 141 else { 142 fireTableDataChanged(); 143 } 144 145 } 146 catch (SQLException e) { 147 throw new Error ("SQL Exception: " + e.getMessage()); 148 } 149 } 150 151 154 public void clear() { 155 if (result_set != null) { 157 try { 158 result_set.close(); 159 } 160 catch (SQLException e) { 161 e.printStackTrace(); 163 } 164 } 165 result_set = null; 166 meta_data = null; 167 row_count = 0; 168 fireTableStructureChanged(); 169 } 170 171 173 public int getRowCount() { 174 return row_count; 175 } 176 177 public int getColumnCount() { 178 if (meta_data != null) { 179 try { 180 return meta_data.getColumnCount(); 181 } 182 catch (SQLException e) { 183 throw new Error ("SQL Exception: " + e.getMessage()); 184 } 185 } 186 return 0; 187 } 188 189 public String getColumnName(int column) { 190 if (meta_data != null) { 191 try { 192 return meta_data.getColumnLabel(column + 1); 193 } 194 catch (SQLException e) { 195 throw new Error ("SQL Exception: " + e.getMessage()); 196 } 197 } 198 throw new Error ("No columns!"); 199 } 200 201 public Object getValueAt(int row, int column) { 202 if (result_set != null) { 203 try { 204 result_set.absolute(row + 1); 205 return result_set.getObject(column + 1); 206 } 207 catch (SQLException e) { 208 throw new Error ("SQL Exception: " + e.getMessage()); 209 } 210 } 211 throw new Error ("No contents!"); 212 } 213 214 } 215 | Popular Tags |