为什么java通过jdbc调用mysql的代码编译时报错中断?

这两个代码文件代码部分ide没有报错和警告,但是编译时就报错然后中断编译:

img


package JDBC;

import javax.swing.*;

public class Example11_6 {
    public static void main(String[] args) {
        String[] tableHead;
        String[][] content;
        JTable table;
        JFrame win = new JFrame();
        Query findRecord = new Query();
        findRecord.setDatabaseName("students");
        findRecord.setSQL("select * from mess");
        content = findRecord.getRecord();//返回二维数组,即查询的全部记录
        tableHead = findRecord.getColumnName();//返回全部字段名
        if(content==null || tableHead==null)
            System.out.println("值为空");
        else {
            table = new JTable(content, tableHead);//疑似该语句出现问题
            win.add(new JScrollPane(table));
            win.setBounds(12, 100, 400, 200);
            win.setVisible(true);
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
}


package JDBC;

import java.sql.*;

public class Query {
    String databaseName = "";//数据库名
    String SQL;//SQL语句
    String[] columnName;//全部字段名
    String[][] record;//查询的记录

    public Query() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
        }
    }

    public void setDatabaseName(String s) {
        databaseName = s.trim();
        //System.out.println(databaseName);
    }

    public void setSQL(String SQL) {
        this.SQL = SQL.trim();
    }

    public String[] getColumnName() {
        if (columnName == null) {
            System.out.println("先查询记录");
            return null;
        }
        return columnName;
    }

    public String[][] getRecord() {
        startQuery();
        return record;
    }

    public void startQuery() {
        Connection con;
        Statement sql;
        ResultSet rs;
        String uri = "jdbc:mysql://localhost:3306/" + databaseName + "?useSSL=true&characterEncoding=utf-8";
        try {
            con = DriverManager.getConnection(uri, "root", "110120");
            sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = sql.executeQuery(SQL);
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();//字段数目
            columnName = new String[columnCount];
            for (int i = 1; i < columnCount; i++) {
                columnName[i - 1] = metaData.getColumnName(i);
            }
            rs.last();//结果集中记录数目
            int recordAmount = rs.getRow();
            record = new String[recordAmount][columnCount];
            int j = 0;
            rs.beforeFirst();
            while (rs.next()) {
                for (int k = 1; k < columnCount; k++) {
                    record[j][k - 1] = rs.getString(k);//第j条记录放入二维数组的第j行
                }
                j++;
            }
            con.close();
        } catch (Exception e) {
            System.out.println("请输入正确的表名" + e);
        }
    }
}

你这 是 运行 报错了,18行 初始化 JTable 报了空指针了,初始化的两个构造方法入参是null 吧

img

点下这里,然后在前一行打个断点看什么为空

img