1、主界面
package com.meng;
import java.awt.BorderLayout;
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.Vector;
import javax.swing.*;
import java.awt.event.*;
public class StuMan extends JFrame implements ActionListener {
/**
* 1、与mysql数据库交互实现信息展示功能。 2、增加增删改查按钮。3、实现监听(查询功能)。
*/
Vector rowData, columnNames, row;
JScrollPane jsp = null;
JTable jt = null;
JPanel jp1, jp2;
JLabel jl1;
JTextField jtf1;
JButton jb1, jb2, jb3, jb4;
Model sm = null;
// 定义连接数据库所需元素
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
// String url = “jdbc:mysql://127.0.0.1:3306/stu”;
// String username = “root”;
// String password = “”;
public static void main(String[] args) {
// TODO 自动生成的方法存根
StuMan stu5 = new StuMan();
}
public StuMan() {
columnNames = new Vector();
// 设置列名
columnNames.add("学号");
columnNames.add("姓名");
columnNames.add("年龄");
// 初始化按钮,设置按钮名称
jb1 = new JButton("查询");
jb2 = new JButton("添加");
jb3 = new JButton("修改");
jb4 = new JButton("删除");
// 初始化标签
jl1 = new JLabel("请输入要查询的姓名:");
// 初始化文本域
jtf1 = new JTextField(5);
// 讲jb1,jtf1,jb1放入jp1中,放入之前要newjp
jp1 = new JPanel();
jp1.add(jl1);
jp1.add(jtf1);
jp1.add(jb1);
// 讲jb2,jb3,jb4放入jp2中,放入之前要newjp
jp2 = new JPanel();
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
// 初始化columnsName。
// columnsName = new Vector();
// columnsName.add(“学号”);
// columnsName.add(“姓名”);
// columnsName.add(“年龄”);
rowData = new Vector();
SqlHelper sh = new SqlHelper();
ResultSet rs=sh.query("select * from stuInfo", null);
try {
while(rs.next()){
row = new Vector();
row.add(rs.getInt(1));
row.add(rs.getString(2));
row.add(rs.getInt(3));
rowData.add(row);
}
} catch (SQLException e) {
// TODO 自动生成的 catch块
e.printStackTrace();
}
// //初始化JTable
jt = new JTable(rowData, columnNames);
// 初始化JSrollPane。
jsp = new JScrollPane(jt);
// 讲JScrollPane放入JFrame中
this.add(jsp);
// 讲jp1,jp2放入JFrame中
this.add(jp1, BorderLayout.NORTH);
this.add(jp2, BorderLayout.SOUTH);
// 添加监听事件
// jb1.setActionCommand("查询");
jb1.addActionListener(this);
jb2.setActionCommand("添加");
jb2.addActionListener(this);
jb3.setActionCommand("修改");
jb3.addActionListener(this);
jb4.setActionCommand("删除");
jb4.addActionListener(this);
this.setTitle("学生管理系统V1.0");
this.setSize(300, 400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void updateSModel() {
sm = new Model();
sm.queryStu("select * from stuInfo", null);
//jt.setModel(sm);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
// if (e.getActionCommand().equals("查询")) {
// System.out.println("查询按钮被按下!");
//
// } 或者下面一种方式:
if (e.getSource() == jb1) {
System.out.println("查询按钮被按下!");
// 执行查询操作
String sql = "";
// 1、获取文本框中的姓名值
String s = jtf1.getText().trim();
String[] name = {s};
//
//
// 2、判断匹配
if (s.length() != 0) {
sql = “select * from stuInfo where stuName=?”;
//System.out.println(“Test”);
} else {
sql = "select * from stuInfo";
name=null;
}
// sm = new Stu5Model();
// //sm.queryStu(sql, name);
// sm.queryStu(“select * from stuInfo”, name);
System.out.print("aa");
//jt.setModel(sm);
SqlHelper sh1 = new SqlHelper();
rs = sh1.query(sql, name);
try {
while(rs.next()){
row = new Vector();
row.add(rs.getInt(1));
row.add(rs.getString(2));
row.add(rs.getInt(3));
rowData.add(row);
}
} catch (SQLException ee) {
// TODO 自动生成的 catch块
ee.printStackTrace();
}
jt=new JTable(rowData,columnNames);
jsp.add(jt);
this.add(jsp);
jtf1.setText("");
}
if (e.getSource()==jb2) {
System.out.println("添加按钮被按下!");
boolean flag = false;
//确定是否添加新的学生
int i = JOptionPane.showConfirmDialog(this, "是否添加学生?","",JOptionPane.YES_NO_OPTION);
if(i!=JOptionPane.NO_OPTION){
flag=true;
}
while(flag){
StuAdd sa = new StuAdd(this, "添加新学生", true);
//更新数据模型
this.updateSModel();
}
}
if (e.getActionCommand().equals("修改")) {
System.out.println("修改按钮被按下!");
if(jt.getSelectedRow()==-1){
JOptionPane.showMessageDialog(this, "请先选择一行数据");
return;
}else {
int i = jt.getSelectedRow();
sm=new Model();
sm.queryStu("select * from stuinfo", null);
StuUpdate su = new StuUpdate(this, "修改学生信息", true, sm, i);
}
}
if (e.getActionCommand().equals("删除")) {
System.out.println("删除按钮被按下!");
if(jt.getSelectedRow()==-1){
JOptionPane.showMessageDialog(this, "请先选择一行数据");
return;
} else {
int selectId = jt.getSelectedRow();
String[] stuId = {jt.getValueAt(selectId, 0).toString()};
String sql = "delete from stuInfo where stuNo=?";
sm=new Model();
sm.updateStu(sql, stuId);
this.updateSModel();
}
}
}
}
2、数据库操作类 SqlHelper
/*
* 数据库操作模型
*/
package com.meng;
import java.sql.*;
public class SqlHelper {
public static final String DRIVER = "com.mysql.jdbc.Driver";//Driver,D必须大写!
public static final String URL = "jdbc:mysql://127.0.0.1:3306/stu";
public static final String USERNAME = "root";
public static final String PASSWORD = "";
// 定义连接数据库的元素(组件)
Connection conn;
PreparedStatement ps;
ResultSet rs;
// 构造函数
public SqlHelper() {
// 连接数据库
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
// 对数据库进行增删改操作。
public boolean upSql(String sql, String[] args) {
boolean b = true;
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setString(i + 1, args[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
// TODO 自动生成的 catch块
e.printStackTrace();
}
return b;
}
// 对数据库进行查询操作。
public ResultSet query(String sql, String[] args) {
try {
ps = conn.prepareStatement(sql);
if (args == null) {
rs = ps.executeQuery();
} else {
for (int i = 0; i < args.length; i++) {
ps.setString(i + 1, args[i]);
rs = ps.executeQuery();
}
}
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return rs;
}
// 关闭资源
public void close() {
try {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
3、模式model类
package com.meng;
import java.util.Vector;
import java.sql.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class Model implements TableModel {
/**
* @Model
*/
Vector rowData, columnsName, row;
SqlHelper sh;
ResultSet rs;
/*
* 查询数据
*/
public void queryStu(String sql, String[] args) {
// 初始化columnsName。
// columnsName = new Vector();
// columnsName.add(“学号”);
// columnsName.add(“姓名”);
// columnsName.add(“年龄”);
rowData = new Vector();
sh = new SqlHelper();
rs=sh.query(sql, args);
try {
while(rs.next()){
row = new Vector();
row.add(rs.getInt(1));
row.add(rs.getString(2));
row.add(rs.getInt(3));
rowData.add(row);
}
} catch (SQLException e) {
// TODO 自动生成的 catch块
e.printStackTrace();
}
sh.close();
}
/*
* 增删改操作
*/
public boolean updateStu(String sql,String[] args){
boolean b = false;
sh=new SqlHelper();
b=sh.upSql(sql, args);
return b;
}
//得到共有多少列
// public int getColumnCount(){
// return this.columnsName.size();
// }
//得到共有多少行
public int getRowCount(){
return this.rowData.size();
}
//得到某行某列的值
public Object getValueAt(int rowIndex,int columnIndex){
//return this.rowData.get(rowIndex);
return ((Vector) this.rowData.get(rowIndex)).get(columnIndex);
}
public String getColumnName(int index) {
// TODO Auto-generated method stub
return this.columnsName.get(index).toString();
}
@Override
public void addTableModelListener(TableModelListener arg0) {
// TODO 自动生成的方法存根
}
@Override
public Class<?> getColumnClass(int arg0) {
// TODO 自动生成的方法存根
return null;
}
@Override
public boolean isCellEditable(int arg0, int arg1) {
// TODO 自动生成的方法存根
return false;
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO 自动生成的方法存根
}
@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
// TODO 自动生成的方法存根
}
@Override
public int getColumnCount() {
// TODO 自动生成的方法存根
return this.columnsName.size();
}
}
4、添加功能 StuAdd
package com.meng;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuAdd extends JDialog implements ActionListener {
JPanel jp1, jp2, jp3;
JLabel jlNo, jlName, jlAge;
JTextField jtfNo, jtfName, jtfAge;
JButton jbsave, jbcancel;
Model sm = null;
// public static void main(String[] args) {
//
// JFrame owner = null;
// Stu5Add sm5 = new Stu5Add(owner, “hehe”, true);
//
// }
// 构造函数
public StuAdd(JFrame owner, String title, boolean model) {
super(owner, "title", true);
// 创建组件
jp1 = new JPanel(new GridLayout(5, 1));
jp2 = new JPanel(new GridLayout(5, 1));
jp3 = new JPanel(new GridLayout(5, 1));
jlNo = new JLabel("学号", JLabel.CENTER);
jlName = new JLabel("姓名", JLabel.CENTER);
jlAge = new JLabel("年龄", JLabel.CENTER);
jtfNo = new JTextField(15);
jtfName = new JTextField(15);
jtfAge = new JTextField(15);
jbsave = new JButton("保存");
jbcancel = new JButton("取消");
jp1.add(jlNo, BorderLayout.NORTH);
jp1.add(jlName, BorderLayout.CENTER);
jp1.add(jlAge, BorderLayout.SOUTH);
jp2.add(jtfNo);
jp2.add(jtfName);
jp2.add(jtfAge);
jp3.add(jbsave, BorderLayout.WEST);
jp3.add(jbcancel, BorderLayout.EAST);
this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.EAST);
this.add(jp3, BorderLayout.SOUTH);
jbcancel.addActionListener(this);
jbsave.addActionListener(this);
this.setSize(400, 300);
this.setLocation(100, 300);
this.setVisible(true);
// this.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if (e.getSource() == jbsave) {
String[] values = { jtfNo.getText().trim(),
jtfName.getText().trim(), jtfAge.getText().trim() };
String sql = "insert into stuinfo values(?,?,?)";
sm = new Model();
System.out.println("保存按钮被按下!");
System.out.println(values[1]);
sm.updateStu("insert into stuinfo values(?,?,?)", values);
this.dispose();
}
if (e.getSource() == jbcancel) {
System.out.print("取消按钮被按下!");
this.dispose();
//this.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
// this.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// dispose();
// System.out.print(“qqq!”);
// }
// });
}
}
}
5、更新类(删除、修改) update
package com.meng;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuUpdate extends JDialog implements ActionListener {
JPanel jp1, jp2, jp3;
JLabel jlNo, jlName, jlAge;
JTextField jtfNo, jtfName, jtfAge;
JButton jbsave, jbcancel;
Model sm = null;
// public static void main(String[] args) {
//
// JFrame owner = null;
// Stu5Up sm5 = new Stu5Up(owner, "hehe",sm,1);
//
// }
// 构造函数
public StuUpdate(JFrame owner, String title, boolean model, Model sm,
int idValue) {
super(owner, title, model);
// 创建组件
jp1 = new JPanel(new GridLayout(5, 1));
jp2 = new JPanel(new GridLayout(5, 1));
jp3 = new JPanel(new GridLayout(5, 1));
jlNo = new JLabel("学号", JLabel.CENTER);
jlName = new JLabel("姓名", JLabel.CENTER);
jlAge = new JLabel("年龄", JLabel.CENTER);
jtfNo = new JTextField(15);
jtfNo.setText(sm.getValueAt(idValue, 0).toString());
jtfNo.setEditable(false);
jtfName = new JTextField(15);
jtfName.setText(sm.getValueAt(idValue, 1).toString());
// jtfName.setEditable(false);
jtfAge = new JTextField(15);
jtfAge.setText(sm.getValueAt(idValue, 2).toString());
// jtfAge.setEditable(false);
jbsave = new JButton("保存");
jbcancel = new JButton("取消");
jp1.add(jlNo, BorderLayout.NORTH);
jp1.add(jlName, BorderLayout.CENTER);
jp1.add(jlAge, BorderLayout.SOUTH);
jp2.add(jtfNo);
jp2.add(jtfName);
jp2.add(jtfAge);
jp3.add(jbsave, BorderLayout.WEST);
jp3.add(jbcancel, BorderLayout.EAST);
this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.EAST);
this.add(jp3, BorderLayout.SOUTH);
jbcancel.addActionListener(this);
jbsave.addActionListener(this);
this.setSize(400, 300);
this.setLocation(100, 300);
this.setVisible(true);
// this.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if (e.getSource() == jbsave) {
String[] values = { jtfName.getText().trim(),
jtfAge.getText().trim(), jtfNo.getText().trim() };
String sql = "update stuinfo set stuName=?,stuAge=? where stuNo=?";
sm = new Model();
System.out.println("保存按钮被按下!");
System.out.println(values[1]);
sm.updateStu(sql, values);
this.dispose();
}
if (e.getSource() == jbcancel) {
System.out.print("取消按钮被按下!");
this.dispose();
// this.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
// this.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// dispose();
// System.out.print("qqq!");
// }
// });
}
}
}