源代码
package Links; import java.awt.*; import java.math.BigDecimal; import javax.swing.*; import java.sql.*; import java.sql.Date; import java.time.LocalDate; import java.util.*; import javax.swing.table.*; /** * @Author: 冀十三 * @DescIption:读取数据库以表格输出 * @Date:2021--06--10--21:13 */ public class JDBCJTable extends JFrame { // 声明一个类AbstractTableModel对象 AbstractTableModel model; // 声明一个类JTable对象 JTable table; // 声明一个滚动面板对象 JScrollPane jscrollpane; // 声明表头 String titles[]; Class<?> colClasses[]; // 二维表 列的类型 // 声明一个二维向量存储每一行数据 Vector<Vector<String>> records; public void initTableModel() { records = new Vector<>(); // 实例化向量 model = new AbstractTableModel() { private static final long serialVersionUID = 1L; public int getColumnCount() { // 取得表格列数 return titles.length; } public int getRowCount() { return records.size(); // 取得表格行数 } public String getValueAt(int row, int column) { if (!records.isEmpty()) // 取得单元格中的属性值 return records.elementAt(row).elementAt(column); else return null; } public String getColumnName(int column) { return titles[column]; // 设置表格列名 } public Class<?> getColumnClass(int column) { System.out.println("getColumnClass(int column):" + colClasses[column]); return colClasses[column]; } public void setValueAt(Object value, int row, int column) { } public boolean isCellEditable(int row, int column) { return false; // 设置单元格不可编辑,为缺省实现 } }; } //这里我使用了我写的另一个工具类中链接数据库的方法。 //文末附链接 Connection conn=JDBCUtils.getConnection(); public void showData() throws SQLException, ClassNotFoundException { // 执行查询 Statement stmt = JDBCUtils.getConnection().createStatement(); ResultSet rs = stmt.executeQuery(" SELECT * FROM `school`.`user`"); // 得到元数据 ResultSetMetaData meta = rs.getMetaData(); // 返回列的数量 int colCnt = meta.getColumnCount(); System.out.println(colCnt); titles = new String[colCnt]; // 提供数据类型,重写 // public Class<?> getColumnClass(int column) colClasses = new Class[colCnt]; for (int i = 0; i < colCnt; i++) { // 得到列名,注意下标是从1开始的 titles[i] = meta.getColumnName(i + 1); String className = meta.getColumnClassName(i + 1); System.out.println("类型:" + className); // 得到数据类型 Class<?> clz = Object.class; if (className != null) try { clz = Class.forName(className); } catch (Exception ex) { ex.printStackTrace(); } if (clz == Double.class) { clz = BigDecimal.class; } if (clz == Date.class) { clz = LocalDate.class; } colClasses[i] = clz; } // records 二维向量,记录每一行查询所得,已被初始化 records = new Vector<>(); records.removeAllElements(); while (rs.next()) { // 每一行 Vector<String> rec_vector = new Vector<>(); // 从结果集中取数据放入向量rec_vector中 for (int i = 0; i < titles.length; i++) { Object obj = rs.getObject(i + 1); System.out.print(obj + ";"); rec_vector.addElement(obj == null ? null : obj.toString()); } records.addElement(rec_vector); System.out.println(); } // 实例化JTable对象 // 使用继承JTable类的子类MTable实例化JTable对象 table = new MTable(); // 设置帮助提示 table.setToolTipText("显示全部查询结果"); // 设置表格调整尺寸模式 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 设置单元格选择方式 table.setCellSelectionEnabled(true); table.setShowVerticalLines(true); table.setShowHorizontalLines(true); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); table.setSelectionBackground(Color.YELLOW); table.setSelectionForeground(Color.gray); table.setRowHeight(40); table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // 设置表格模型 table.setModel(model); // 将表格放在滚动面板中 jscrollpane = new JScrollPane(table); getContentPane().add(jscrollpane); // 更新表格 model.fireTableStructureChanged(); // 注:设定数据,也可以用以下的构造方法 } public static void main(String[] args) { JDBCJTable f = new JDBCJTable(); f.initTableModel(); try { f.showData(); } catch (Exception e) { e.printStackTrace(); } f.setSize(560, 480); f.setLocationRelativeTo(null); f.setTitle("数据库查询"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } //继承JTable //设置表格内容居中 class MTable extends JTable { public MTable(Vector<Vector<String>> rowData, Vector<String> columnNames) { super(rowData, columnNames); } public MTable() { } public JTableHeader getTableHeader() { JTableHeader tableHeader = super.getTableHeader(); tableHeader.setReorderingAllowed(false); DefaultTableCellRenderer hr = (DefaultTableCellRenderer) tableHeader.getDefaultRenderer(); hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER); return tableHeader; } public TableCellRenderer getDefaultRenderer(Class<?> columnClass) { DefaultTableCellRenderer cr = (DefaultTableCellRenderer) super.getDefaultRenderer(columnClass); cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER); return cr; } public boolean isCellEditable(int row, int column) { return false; } }
链接数据库的方法
也可以 上主页置顶内容。