主程序:
package xsglxt;
import java.sql.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//第一:做界面
//第二:做监听
//第三。
public class Xsglxt extends JFrame implements ActionListener {
JPanel mb1,mb2;//最上面和最下面
JLabel bq1;
JTextField wbk1;
JButton an1,an2,an3,an4;
JTable bg1;
JScrollPane gd1;
Xsxx xsxx2;//删除时才创建的参数,并且把下面的所有的都
//集合类
Vector ziduan,jilu;
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
public static void main(String[] args) {
Xsglxt xs=new Xsglxt();
}
public Xsglxt() {
mb1=new JPanel();
bq1=new JLabel("请输入姓名:");
wbk1=new JTextField(10);
an1=new JButton("查询");
an1.addActionListener(this);
an1.setActionCommand("chaxun");
mb1.add(bq1);
mb1.add(wbk1);
mb1.add(an1);
mb2=new JPanel();
an2=new JButton("添加");
an2.addActionListener(this);
an2.setActionCommand("tianjia");
an3=new JButton("修改");
an3.addActionListener(this);
an3.setActionCommand("xiugai");
an4=new JButton("删除");
an4.addActionListener(this);
an4.setActionCommand("shanchu");
mb2.add(an2); mb2.add(an3); mb2.add(an4);
ziduan=new Vector();
ziduan.add("学号");
ziduan.add("姓名");
ziduan.add("性别");
ziduan.add("年龄");
ziduan.add("籍贯");
ziduan.add("所在院系");
jilu=new Vector();//记录必须从数据库中读
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=xsglxt","sa","123456789h");
ps=ct.prepareStatement("select *from Xuesheng");
rs=ps.executeQuery();
while(rs.next()) {//一行一行读,一个行六个字段,然后把一行添加到记录里面
Vector hang=new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
hang.add(rs.getInt(4));
hang.add(rs.getString(5));
hang.add(rs.getString(6));
jilu.add(hang);
}
}catch(Exception e) {}
finally {
try {
if(rs!=null) {rs.close();}
if(ct!=null) {rs.close();}
}catch(Exception e1) {}
//bg1=new JTable(jilu,ziduan);//将记录和字段添加到表中,JTable后面的括号是先记录后字段
//删除时改了
xsxx2=new Xsxx();
bg1=new JTable(xsxx2);
gd1=new JScrollPane(bg1);//如果表过长设置可以滚动
//总界面的添加过程
this.add(gd1);
this.add(mb1,"North");
this.add(mb2,"South");
this.setTitle("学生管理系统");
this.setSize(500, 400);
this.setLocation(201, 181);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("chaxun")) {
String xingming=this.wbk1.getText().trim();//这一句的意思就是取出文本框输入的内容,固定的
String sql="select * from Xuesheng where xingming='"+xingming+"'";
//第一个xingming是数据库里面的,第二个xingming是输入的姓名,上一句取出来的
xsxx2=new Xsxx(sql);
bg1.setModel(xsxx2);//在表格1里面显示这个信息,在需要立即显示效果的时候用setModel
}else if(e.getActionCommand().equals("tianjia")) {
Tianjia tj=new Tianjia(this,"添加学生信息",true);
//里面的三个参数是固定的,true是只能对添加窗口操作,无法对最初界面操作,flase是任意的窗口都可以动
xsxx2=new Xsxx();//
bg1.setModel(xsxx2);//随时显示
}else if(e.getActionCommand().equals("xiugai")) {
int ii=this.bg1.getSelectedRow();
if(ii==-1) {
JOptionPane.showMessageDialog(this,"请选中要修改的行");
return;
}
new xiugai(this,"修改学生信息",true,xsxx2,ii);
xsxx2=new Xsxx();
bg1.setModel(xsxx2);
}else if(e.getActionCommand().equals("shanchu")) {
int ii=this.bg1.getSelectedRow();//ii用来保存鼠标点中的那一行
if(ii==-1) {
JOptionPane.showMessageDialog(this,"请选中需要删除的一行");//一个消息框
return;//回到按按钮之前的位置,等待下一次选中
}
String st=(String)xsxx2.getValueAt(ii,0);
//选中鼠标选中的那一行,就是ii,后面的0代表的是第0列,也就是真正意思上的第一行,因为只有主键是不重复的
//返回值是一个object类型。所以需要强制转换成string类型,
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
Statement sm=null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=xsglxt","sa","123456789h");
ps=ct.prepareStatement("delete from xuesheng where xuehao=?");
ps.setString(1, st);//?赋值选中那一行的学号
ps.executeUpdate();
}catch(Exception e4) {}
finally {
try {
if(ct!=null) ct.close();
if(rs!=null) rs.close();
}
catch(Exception e5) {}
}
xsxx2=new Xsxx();
bg1.setModel(xsxx2);
//随时显示删除的结果,就是随时更新当前界面
}
}
}
查找:
package xsglxt;
import java.sql.*;
import java.util.Vector;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class Xsxx extends AbstractTableModel{
//集合类
Vector ziduan,jilu;
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return this.ziduan.size();
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return this.jilu.size();
}
@Override
public Object getValueAt(int hang, int lie) {
// TODO Auto-generated method stub
return ((Vector)this.jilu.get(hang)).get(lie);
}
public Xsxx() {
this.sqlyi("select * from Xuesheng");
}
public Xsxx(String ss) {
this.sqlyi(ss);
}
public String getColumnName(int e) {
return (String)this.ziduan.get(e);
}
private void sqlyi(String sql) {
// TODO Auto-generated method stub
ziduan=new Vector();
ziduan.add("学号");
ziduan.add("姓名");
ziduan.add("性别");
ziduan.add("年龄");
ziduan.add("籍贯");
ziduan.add("所在院系");
jilu=new Vector();//记录必须从数据库中读
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=xsglxt","sa","123456789h");
ps=ct.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()) {//一行一行读,一个行六个字段,然后把一行添加到记录里面
Vector hang=new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
hang.add(rs.getInt(4));
hang.add(rs.getString(5));
hang.add(rs.getString(6));
jilu.add(hang);
}
}catch(Exception e1) {}
finally {
try {
if(ct!=null) ct.close();
if(rs!=null) rs.close();
}catch(Exception e2) {}
}
}
}
添加:
package xsglxt;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class Tianjia extends JDialog implements ActionListener{
//JDialog类里面有一些方法,可以让它从其他窗口里派生出其他窗口
JLabel bq1,bq2,bq3,bq4,bq5,bq6;
JTextField wbk1,wbk2,wbk3,wbk4,wbk5,wbk6;
JButton an1,an2;
JPanel mb1,mb2,mb3,mb4;
public Tianjia(Frame fck,String ckm,Boolean msck) {
super(fck,ckm,msck);
bq1=new JLabel(" 学号 ");
bq2=new JLabel(" 姓名 ");
bq3=new JLabel(" 性别 ");
bq4=new JLabel(" 年龄 ");
bq5=new JLabel(" 籍贯 ");
bq6=new JLabel(" 院系 ");
wbk1=new JTextField(5);
wbk2=new JTextField(5);
wbk3=new JTextField(5);
wbk4=new JTextField(5);
wbk5=new JTextField(5);
wbk6=new JTextField(5);
an1=new JButton("添加");
an1.addActionListener(this);
an1.setActionCommand("tianjia2");
an2=new JButton("取消");
an2.addActionListener(this);
an2.setActionCommand("quxiao");
mb1=new JPanel();
mb2=new JPanel();
mb3=new JPanel();
mb4=new JPanel();
mb1.setLayout(new GridLayout(6,1));
mb2.setLayout(new GridLayout(6,1));
mb1.add(bq1); mb1.add(bq2); mb1.add(bq3);
mb1.add(bq4); mb1.add(bq5); mb1.add(bq6);
mb2.add(wbk1); mb2.add(wbk2); mb2.add(wbk3);
mb2.add(wbk4); mb2.add(wbk5); mb2.add(wbk6);
mb3.add(an1); mb3.add(an2);
this.add(mb1,BorderLayout.WEST);
this.add(mb2);
this.add(mb3,BorderLayout.SOUTH);
this.add(mb4,BorderLayout.EAST);
this.setSize(370, 270);
this.setLocation(401,281);
this.setResizable(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("tianjia2")) {
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=xsglxt","sa","123456789h");
String ss= ("insert into Xuesheng values(?,?,?,?,?,?)");
ps=ct.prepareStatement(ss);
ps.setString(1, wbk1.getText());
ps.setString(2, wbk2.getText());
ps.setString(3, wbk3.getText());
ps.setString(4, wbk4.getText());
ps.setString(5, wbk5.getText());
ps.setString(6, wbk6.getText());
ps.executeUpdate();
}catch(Exception e3) {}
finally {
try {
if(rs!=null) rs.close();
if(ct!=null) ct.close();
}catch(Exception e4) {}
}
this.dispose();//添加完关闭窗口
}
else if(e.getActionCommand().equals("quxiao")) {
this.dispose();//关闭当前窗口
}
}
}
修改:
package xsglxt;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class xiugai extends JDialog implements ActionListener{
//JDialog类里面有一些方法,可以让它从其他窗口里派生出其他窗口
JLabel bq1,bq2,bq3,bq4,bq5,bq6;
JTextField wbk1,wbk2,wbk3,wbk4,wbk5,wbk6;
JButton an1,an2;
JPanel mb1,mb2,mb3,mb4;
Xsxx xsxx2;
public xiugai(Frame fck,String ckm,Boolean msck,Xsxx xsxx2,int hang) {
super(fck,ckm,msck);
bq1=new JLabel(" 学号 ");
bq2=new JLabel(" 姓名 ");
bq3=new JLabel(" 性别 ");
bq4=new JLabel(" 年龄 ");
bq5=new JLabel(" 籍贯 ");
bq6=new JLabel(" 院系 ");
wbk1=new JTextField(5);
wbk1.setText((String)xsxx2.getValueAt(hang, 0));
wbk1.setEditable(false);//学号不能改
wbk2=new JTextField(5);
wbk2.setText((String)xsxx2.getValueAt(hang, 1));
wbk3=new JTextField(5);
wbk3.setText((String)xsxx2.getValueAt(hang, 2));
wbk4=new JTextField(5);
wbk4.setText((String)xsxx2.getValueAt(hang, 3).toString());//整型的数字toString()
wbk5=new JTextField(5);
wbk5.setText((String)xsxx2.getValueAt(hang, 0));
wbk6=new JTextField(5);
wbk6.setText((String)xsxx2.getValueAt(hang, 0));
an1=new JButton("修改");
an1.addActionListener(this);
an1.setActionCommand("xiugai2");
an2=new JButton("取消");
an2.addActionListener(this);
an2.setActionCommand("quxiao");
mb1=new JPanel();
mb2=new JPanel();
mb3=new JPanel();
mb4=new JPanel();
mb1.setLayout(new GridLayout(6,1));
mb2.setLayout(new GridLayout(6,1));
mb1.add(bq1); mb1.add(bq2); mb1.add(bq3);
mb1.add(bq4); mb1.add(bq5); mb1.add(bq6);
mb2.add(wbk1); mb2.add(wbk2); mb2.add(wbk3);
mb2.add(wbk4); mb2.add(wbk5); mb2.add(wbk6);
mb3.add(an1); mb3.add(an2);
this.add(mb1,BorderLayout.WEST);
this.add(mb2);
this.add(mb3,BorderLayout.SOUTH);
this.add(mb4,BorderLayout.EAST);
this.setSize(370, 270);
this.setLocation(401,281);
this.setResizable(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("xiugai2")) {
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=xsglxt","sa","123456789h");
String ss= ("update xuesheng set xingming=?,xingbie=?,nianling=?,jiguan=?,yxmc=? where xuehao=?");
ps=ct.prepareStatement(ss);
ps.setString(1, wbk2.getText());//第一个问号指的是姓名,也就是第二个文本框
ps.setString(2, wbk3.getText());
ps.setString(3, wbk4.getText());
ps.setString(4, wbk5.getText());
ps.setString(5, wbk6.getText());
ps.setString(6, wbk1.getText());
ps.executeUpdate();
}catch(Exception e3) {}
finally {
try {
if(rs!=null) rs.close();
if(ct!=null) ct.close();
}catch(Exception e4) {}
}
this.dispose();//添加完关闭窗口
}
else if(e.getActionCommand().equals("quxiao")) {
this.dispose();//关闭当前窗口
}
}
}
运行结果:增删改查均可实现