这两个代码文件代码部分ide没有报错和警告,但是编译时就报错然后中断编译:
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 吧
点下这里,然后在前一行打个断点看什么为空