Java教程

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

本文主要是介绍怎样读取数据库表格以表格形式输出,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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

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

这篇关于怎样读取数据库表格以表格形式输出的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!