怎样读取数据库表格以表格形式输出

怎样读取数据库表格以表格形式输出?

  1. 创建表
  2. 链接数据库
  3. 查询语句得到数据
  4. 得到的数据转化
  5. 重组创建的表
结果演示

在这里插入图片描述

源代码

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;
    }
}

链接数据库的方法
也可以 上主页置顶内容。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值