程序中有一点小错误,不会调试,为什么数据库中查询的数据没有显示到JTable中?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
public class TestTable implements ActionListener{
String choice;
String[] columns={"book_id","book_number","book_name","isbn","book_type","publishing_house","publishing_time","author","inbound_date","state","price"};
List<Object> rows=null;
JFrame frame;//主界面
AbstractTableModel model;
JTable table;
Container contentPane;//容器,存放表格等东西
Toolkit tools=Toolkit.getDefaultToolkit();
Dimension size=tools.getScreenSize();
int width = size.width / 2;
int height = size.height / 2;
Connection conn;
Statement stat;
JTextField nameField;//
public TestTable() {
frame = new JFrame("检索界面");
rows = new ArrayList<Object>();
init();
}
void init() {
frame.setSize(width, height);// 设置大小
frame.setLocation(width / 2, height / 2);// 设置位置
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭时动作
frame.setLayout(new BorderLayout());// 设置布局方式
contentPane = frame.getContentPane();
model = new TableModel();// TableModel是自定义的类。使用自定义的类是为了更好的做自己想要做的事,比如更新数据库==。
table = new JTable(model);
JScrollPane scroll = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);// 给表格加入滚动条,横向不加,纵向加
contentPane.add(scroll, BorderLayout.CENTER);
// 新建一个面板,放在表格顶端,用来放置搜索条件
JPanel searPanel = new JPanel();
JButton loadBtn = new JButton("检索");//检索按钮
loadBtn.addActionListener(this);
loadBtn.setActionCommand("load");
nameField = new JTextField(15);//文本框
JComboBox combo;
combo = new JComboBox<String>();//下拉列表框
combo.addItem("任意词");
combo.addItem("图书名");
combo.addItem("出版社");
combo.addItem("作者");
combo.setFont(new Font("楷体", Font.BOLD, 20));
searPanel.add(combo);
searPanel.add(nameField);
searPanel.add(loadBtn);
contentPane.add(searPanel,BorderLayout.NORTH);
frame.setVisible(true);
}
class TableModel extends AbstractTableModel{
//获取表格行数
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return rows.size();
}
//获取表格列数
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return columns.length;
}
//获取某个单元格数据
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return ((Object[]) rows.get(rowIndex))[columnIndex];
}
//获取表头
@Override
public String getColumnName(int column) {
return columns[column];
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("load")) {
Class.forName("com.mysql.jdbc.Driver");
conn =DriverManager.getConnection("jdbc:MySQL://localhost:3306/test","root","123456");// 连接数据库,登录名是root,密码是123
try {
if (e.getSource() == loadBtn) {
try {
if (e.getSource() == loadBtn) {
if(combo.getSelectedItem()=="任意词") {
choice="";
}
else if(combo.getSelectedItem()=="图书名"){
choice="book_name";
}
else if(combo.getSelectedItem()=="出版社") {
choice="publishing_house";
}
else if(combo.getSelectedItem()=="作者"){
choice="author";
}
}
stat = conn.createStatement();
String sql;
sql = "select * from book where "+choice+" LIKE '%"+nameField.getText().trim()+"%'";
ResultSet set = stat.executeQuery(sql);// 执行查询,并返回查询的结果集
rows.clear();
}
catch (Exception e1) {
System.out.println("搜索框不能为空!");
e1.printStackTrace();
}
}
}
catch(ClassNotFoundException cefe) {
System.out.println("数据库驱动加载错误,请确保添加正确的jar包");
}catch(SQLException sqle) {
System.out.println("数据库连接错误,请仔细检查用户名、密码、端口等是否有错");
}finally {// 记得关闭连接
try {
if (conn != null)
conn.close();
if (stat != null)
stat.close();
} catch (SQLException e1) {
System.err.println("关闭连接失败");
}
}
}
}
public static void main(String args[]) {
new TestTable();
}
}