学生信息的增删改查注意:此处用到的是access数据库。
运行后效果如图:代码如下:package example;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import java.sql.*;import java.util.Vector;class myrandom extends JFrame implements ActionListener{ //这个程序的数据是没有写入文件的JFrame f1,f2;JButton b1,b2,b3,b4,modify,direction;JLabel a1;JTextField t1,t2,t3,t4;JTable table;myrandom(){table=new JTable();f1=new JFrame("学生信息系统");f1.setVisible(true);//设置窗体可见a1=new JLabel("输入学号:");t1=new JTextField(100);t2=new JTextField(100);b1=new JButton("查姓名:");b2=new JButton("插入信息");b3=new JButton("查看数据");b4=new JButton("删除");t3=new JTextField(100);modify=new JButton("修改");direction=new JButton("操作说明");t4=new JTextField(100);f1.setLayout(new GridLayout(6,2));//设置窗体的分布为四行二列f1.add(a1);f1.add(t1);//加入窗体f1.add(b1);f1.add(t2);f1.add(b2);f1.add(b3);f1.add(b4);f1.add(t3);f1.add(modify);f1.add(t4);f1.add(direction);f1.setSize(200,200);//设置窗体大小b1.addActionListener(this);b2.addActionListener(this);//设置按钮事件b3.addActionListener(this);b4.addActionListener(this);modify.addActionListener(this);direction.addActionListener(this);}public void actionPerformed(ActionEvent e) {f1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体后释放资源,若不写这条语句,//则虽然关闭了窗体,但进程还在运行。
try{//这个try是在整个action中的,用于捕获建立连接异常Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");String dburl="jdbc:odbc:mydb"; //mydb是我建立的access 数据源Connection conn=DriverManager.getConnection(dburl);//这四条语句是用来在整个action事件中建立连接的Statement stml=conn.createStatement(); //也就不用在每一个button事件(b1,b2,b3,b4)中重复写这四条语句//以上四条语句也可以改写为下面这四条语句:// String dburl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\db1.mdb";// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// Connection conn = DriverManager.getConnection(dburl);// Statement stml = conn.createStatement();if(e.getSource()==b3){//查看数据(查看数据库中student表的所有信息f2=new JFrame("显示信息");f2.setVisible(true);//设置窗体可见f2.setSize(200,200);//设置窗体大小Vector rows = new Vector();//用于存储数据库中的行信息Vector columnHeads = new Vector(); //用于存储数据库中的列标题try{ResultSet rs=stml.executeQuery("select * from student");boolean moreRecords = rs.next(); // 定位到达第一条记录,这句话一定要写ResultSetMetaData rsmd = rs.getMetaData(); // 获得rs结果集中列属性信息for (int i = 1; i <= rsmd.getColumnCount(); ++i)columnHeads.addElement(rsmd.getColumnName(i)); // 获得列名(将列名存放至向量columnHeads)do{rows.addElement(getNextRow(rs, rsmd)); //获取下一行记录}while (rs.next()); // 利用循环获得所有记录JTable jTable = new JTable(rows, columnHeads); // 将获得的行列数据信息作为参数重新构造表格视图jTable.setSize(new Dimension(383, 81));JScrollPane scroller = new JScrollPane(jTable);// 创建带有滚动条的面板,并将表格视图加入f2.add(scroller, BorderLayout.CENTER); // 将面板重新加入溶器中f2.validate(); // 验证此容器及其所有子组件while(rs.next()){String ss=rs.getString("id");//显示输出结果String s2=rs.getString("name");System.out.println(ss+s2);}rs.close();stml.close();conn.close(); //使用完后要记得关闭所有连接}catch(Exception ee){System.out.println(ee);}}else if(e.getSource()==b2)//插入信息(在t1文本框中输入要插入的学号,{ //在t2文本框中输入要插入的姓名,然后点击插入信息try{stml.executeUpdate("insert into student values('"+t1.getText()+"','"+t2.getText()+"')");//excute的返回值是boolean型的,excuteUpdate的返回值是int型的,executeQuery 的返回值是ResultSet型的stml.close();conn.close();}catch(Exception e1){System.out.println(e1);}System.out.println("Insert successfully!");JOptionPane.showMessageDialog(f1,"插入成功!");}else if(e.getSource()==b1)//查姓名(在t1文本框中输入学号,{ //在t2文本框中显示相应的姓名t3.setText("");t4.setText("");try{System.out.println("hi");String mysql="select name from student where id='"+t1.getText()+"'";//ResultSet rs=stml.executeQuery("select name from student where id='"+t1.getText()+"'");ResultSet rs=stml.executeQuery(mysql);String sn="";while(rs.next()) //此处while语句用于逐条查询{sn=rs.getString("name");System.out.println("学号为:"+t1.getText()+" 姓名是:"+sn);}if(sn=="") //如果没有找到该学生的姓名JOptionPane.showMessageDialog(f1,"没有该学生!");elset2.setText(sn);rs.close();stml.close();conn.close();}catch(Exception ee){System.out.println(ee);}}else if(e.getSource()==b4) { //按学号删除记录(删除学号和姓名)try{ //在t3文本框中输入要删除的学号t1.setText("");t2.setText("");t4.setText("");System.out.println("hi");String yy="";String mmsql="select * from student where id='"+t3.getText()+"'";String mysql="delete from student where id='"+t3.getText()+"'";ResultSet rs=stml.executeQuery(mmsql);while(rs.next()){yy=rs.getString("name");}if(yy==""){JOptionPane.showMessageDialog(f1,"删除失败,没有该学生!");rs.close();}else{stml.executeUpdate(mysql);JOptionPane.showMessageDialog(f1,"删除成功!");}stml.close();conn.close();}catch(Exception ee){System.out.println(ee);}System.out.println("success to delete!");}else if(e.getSource()==modify){//修改姓名:在t1文本框中输入要修改的学号,try{ // 在t4文本框中输入修改后的名字//JOptionPane.showMessageDialog(f1,"请在输入学号后面输入修改前的学号,在修改后面输入修改后该学号的姓名!");t2.setText("");t3.setText("");String mm="";String mmsql="select * from student where id='"+t1.getText()+"'";String mysql="update student set name='"+t4.getText()+"' where id='"+t1.getText()+"'";ResultSet rs=stml.executeQuery(mmsql);while(rs.next()){mm=rs.getString("name");}if(mm==""){JOptionPane.showMessageDialog(f1,"修改失败,没有该学生!");rs.close();}else{stml.executeUpdate(mysql);JOptionPane.showMessageDialog(f1,"修改成功!");}stml.close();conn.close();}catch(Exception eee){System.out.println(eee);}System.out.println("Congratulations!modify success!");}else {try{JOptionPane.showMessageDialog(f1,"1若要修改:请在输入学号后面输入修改前的学号," +"\\\n"+"在修改后面输入修改后该学号的姓名,然后点击'修改';"+"\\\n "+"2若要删除,请在删除后面出入要删学生的学号,然后点击'删除';" +"\\\n"+"3若要插入信息,请在输入学号后面输入学号,在查姓名后面输入姓名,然后点击'插入信息';" +"\\\n"+" 4若要若要查询数据,直接点击'查看数据';" +"\\\n"+" 5输入学生的学号,再点击'查姓名'可以查找该学号学生的姓名。