package shixun2;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class q extends JFrame implements Runnable {
private static final long serialVersionUID = 1L;
// 数据库连接信息
private static final String DB_URL = "jdbc:mysql://localhost:3306/shixun";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "123456";
// 表格列名
private static final String[] COLUMN_NAMES = {"学号", "姓名", "性别", "宿舍号", "宿舍楼", "电话","人员"};
// UI 组件
private JTextField textFieldDno = new JTextField();
private JTextField textFieldName = new JTextField();
private JTextField textFieldGender = new JTextField();
private JTextField textFieldFloor = new JTextField();
private JTextField textFieldPhone = new JTextField();
private JTextField textFieldAccount = new JTextField();
private JTextField textFieldPassword = new JTextField();
private JTable tableAdmins = new JTable(new DefaultTableModel(COLUMN_NAMES, 0));
private JScrollPane scrollPane = new JScrollPane(tableAdmins);
private JButton buttonUpdate = new JButton("修改");
private JButton buttonQuery = new JButton("查询");
public q() {
setTitle("学生住宿管理");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
// 数据输入面板
JPanel panelInput = new JPanel(new GridLayout(7, 2));
panelInput.add(new JLabel("学号:"));
panelInput.add(textFieldDno);
panelInput.add(new JLabel("宿舍号:"));
panelInput.add(textFieldFloor);
panelInput.add(new JLabel("宿舍楼:"));
panelInput.add(textFieldPhone);
panelInput.add(new JLabel("人员:"));
panelInput.add(textFieldPassword);
// 按钮面板
JPanel panelButtons = new JPanel();
panelButtons.add(buttonUpdate);
panelButtons.add(buttonQuery);
// 添加组件到窗口
add(panelInput, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
add(panelButtons, BorderLayout.SOUTH);
// 添加事件监听器
buttonUpdate.addActionListener(e -> updateAdmin());
buttonQuery.addActionListener(e -> queryAdmins());
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(scrollPane);
// 显示窗口
setVisible(true);
}
// 添加管理员信息
// 修改管理员信息
private void updateAdmin() {
int selectedRow = tableAdmins.getSelectedRow();
if (selectedRow == -1) {
return;
}
String dno = textFieldDno.getText().trim();
String name = textFieldName.getText().trim();
String gender = textFieldGender.getText().trim();
String floor = textFieldFloor.getText().trim();
String phone = textFieldPhone.getText().trim();
String account = textFieldAccount.getText().trim();
String password = textFieldPassword.getText().trim();
if (dno.isEmpty() || name.isEmpty() || gender.isEmpty() || floor.isEmpty() || phone.isEmpty() || account.isEmpty() || password.isEmpty()) {
return;
}
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement("UPDATE student SET 姓名=?, 性别=?, 宿舍号=?, 宿舍楼=?, 电话=?, 人员=? WHERE 学号=?")) {
stmt.setString(1, name);
stmt.setString(2, gender);
stmt.setString(3, floor);
stmt.setString(4, phone);
stmt.setString(5, account);
stmt.setString(6, password);
stmt.setString(7, dno);
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
queryAdmins();
}
// 删除管理员信息
// 查询管理员信息
private void queryAdmins() { String dno = textFieldDno.getText().trim();
String name = textFieldName.getText().trim();
String gender = textFieldGender.getText().trim();
String floor = textFieldFloor.getText().trim();
String phone = textFieldPhone.getText().trim();
String d = textFieldPhone.getText().trim();
String n = textFieldPhone.getText().trim();
String sql = "SELECT 学号,姓名,性别,student.宿舍号,student.宿舍楼,电话,sushe.宿舍号,sushe.宿舍楼,人员 FROM student join sushe on student.宿舍号=sushe.宿舍楼 where 1=1";
if (!dno.isEmpty()) {
sql += " AND 学号=?";
}
if (!name.isEmpty()) {
sql += " AND 姓名=?";
}
if (!gender.isEmpty()) {
sql += " AND 性别=?";
}
if (!floor.isEmpty()) {
sql += " AND 宿舍号=?";
}
if (!phone.isEmpty()) {
sql += " AND 宿舍楼=?";
}
if (!d.isEmpty()) {
sql += " AND 电话=?";
}
if (!n.isEmpty()) {
sql += " AND 人员=?";
}
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement(sql)) {
int index = 1;
if (!dno.isEmpty()) {
stmt.setString(index++, dno);
}
if (!name.isEmpty()) {
stmt.setString(index++, name);
}
if (!gender.isEmpty()) {
stmt.setString(index++, gender);
}
if (!floor.isEmpty()) {
stmt.setString(index++, floor);
}
if (!phone.isEmpty()) {
stmt.setString(index++, phone);
}
if (!d.isEmpty()) {
stmt.setString(index++, phone);
}
if (!n.isEmpty()) {
stmt.setString(index++, phone);
}
ResultSet rs = stmt.executeQuery();
DefaultTableModel model = (DefaultTableModel) tableAdmins.getModel();
model.setRowCount(0);
while (rs.next()) {
Object[] row = new Object[COLUMN_NAMES.length];
row[0] = rs.getString("学号");
row[1] = rs.getString("姓名");
row[2] = rs.getString("性别");
row[3] = rs.getString("宿舍号");
row[4] = rs.getString("宿舍楼");
row[5] = rs.getString("电话");
row[6] = rs.getString("人员");
model.addRow(row);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
@Override
public void run() {
queryAdmins();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new q());
}
}
odbc链接的数据库?
添加管理员信息的方法缺失,可以在类中添加以下方法来添加管理员信息:
// 添加管理员信息
private void addAdmin() {
String dno = textFieldDno.getText().trim();
String name = textFieldName.getText().trim();
String gender = textFieldGender.getText().trim();
String floor = textFieldFloor.getText().trim();
String phone = textFieldPhone.getText().trim();
String account = textFieldAccount.getText().trim();
String password = textFieldPassword.getText().trim();
if (dno.isEmpty() || name.isEmpty() || gender.isEmpty() || floor.isEmpty()
|| phone.isEmpty() || account.isEmpty() || password.isEmpty()) {
return;
}
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO student(学号, 姓名, 性别, 宿舍号, 宿舍楼, 电话, 人员) VALUES (?, ?, ?, ?, ?, ?, ?)")) {
stmt.setString(1, dno);
stmt.setString(2, name);
stmt.setString(3, gender);
stmt.setString(4, floor);
stmt.setString(5, phone);
stmt.setString(6, account);
stmt.setString(7, password);
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
queryAdmins();
}
检查数据库有无数据,没有数据的话新建查询添加:
INSERT INTO student(学号, 姓名, 性别, 宿舍号, 宿舍楼, 电话, 人员) VALUES (?, ?, ?, ?, ?, ?, ?)
还有查询管理员信息的方法中,变量d和n重复使用了textFieldPhone.getText().trim(),其中d应该是电话号码,而n应该是人员信息。建议修改为:
String dno = textFieldDno.getText().trim();
String name = textFieldName.getText().trim();
String gender = textFieldGender.getText().trim();
String floor = textFieldFloor.getText().trim();
String phone = textFieldPhone.getText().trim();
String person = textFieldAccount.getText().trim();
String password = textFieldPassword.getText().trim();
String sql = "SELECT 学号,姓名,性别,student.宿舍号,student.宿舍楼,电话,sushe.宿舍号,sushe.宿舍楼,人员 FROM student join sushe on student.宿舍号=sushe.宿舍楼 where 1=1";
if (!dno.isEmpty()) {
sql += " AND 学号=?";
}
if (!name.isEmpty()) {
sql += " AND 姓名=?";
}
if (!gender.isEmpty()) {
sql += " AND 性别=?";
}
if (!floor.isEmpty()) {
sql += " AND 宿舍号=?";
}
if (!phone.isEmpty()) {
sql += " AND 电话=?";
}
if (!person.isEmpty()) {
sql += " AND 人员=?";
}
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement(sql)) {
int index = 1;
if (!dno.isEmpty()) {
stmt.setString(index++, dno);
}
if (!name.isEmpty()) {
stmt.setString(index++, name);
}
if (!gender.isEmpty()) {
stmt.setString(index++, gender);
}
if (!floor.isEmpty()) {
stmt.setString(index++, floor);
}
if (!phone.isEmpty()) {
stmt.setString(index++, phone);
}
if (!person.isEmpty()) {
stmt.setString(index++, person);
}
ResultSet rs = stmt.executeQuery();
DefaultTableModel model = (DefaultTableModel) tableAdmins.getModel();
model.setRowCount(0);
while (rs.next()) {
Object[] row = new Object[COLUMN_NAMES.length];
row[0] = rs.getString("学号");
row[1] = rs.getString("姓名");
row[2] = rs.getString("性别");
row[3] = rs.getString("宿舍号");
row[4] = rs.getString("宿舍楼");
row[5] = rs.getString("电话");
row[6] = rs.getString("人员");
model.addRow(row);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
最后,如果对你有帮助的话,记得点下采纳,谢谢~