pilihuo1986 pilihuo1986
关注数: 11 粉丝数: 13 发帖数: 28 关注贴吧数: 11
《Easy Java学习组》java se之数据库操作(学生管理系统二) /** * 功能:一个简单的mini学生管理系统,已经实现对数据库的增删改查(属于model1) * 作者:云飞扬 * 时间:2013.08.29 */ package com.cary; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; public class Stu3 extends JFrame implements ActionListener{ //定义一些控件 JPanel jp1,jp2; JLabel jl1; JTextField jtf; JButton jb1,jb2,jb3,jb4; JTable jt; JScrollPane jsp; StuModel sm; String stuId=null; PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; public static void main(String[] args) { // TODO Auto-generated method stub Stu3 stu3=new Stu3(); } public Stu3() { //初始化控件 jp1=new JPanel(); jp2=new JPanel(); jl1=new JLabel("请输入名字"); jtf=new JTextField(10); jb1=new JButton("查询"); jb1.addActionListener(this); jb1.setActionCommand("select"); jb2=new JButton("添加"); jb2.addActionListener(this); jb2.setActionCommand("insert"); jb3=new JButton("修改"); jb3.addActionListener(this); jb3.setActionCommand("update"); jb4=new JButton("删除"); jb4.addActionListener(this); jb4.setActionCommand("delete"); //添加控件 //北部布局 jp1.add(jl1); jp1.add(jtf); jp1.add(jb1); //创建一个数据模型对象 sm=new StuModel(); //把行列数据放入jtable jt=new JTable(sm); jsp=new JScrollPane(jt); this.add(jp1,BorderLayout.NORTH); this.add(jsp); this.setSize(400, 300); this.setLocation(200, 200); this.setTitle("学生管理系统"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); //南部布局 jp2.add(jb2); jp2.add(jb3); jp2.add(jb4); this.add(jp2,BorderLayout.SOUTH); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand().equals("select")) { //System.out.println("用户想要查询"); String name=this.jtf.getText().trim(); String sql="select * from stus where stuName='"+name+"'"; //更新数据 sm=new StuModel(sql); jt.setModel(sm); } //添加学生信息按钮 else if(e.getActionCommand().equals("insert")) { InsertDialog id=new InsertDialog(this, "添加学生信息", true); //更新数据 sm=new StuModel(); jt.setModel(sm); } //修改学生信息 else if(e.getActionCommand().equals("update")) { //System.out.println("用户想要修改数据"); //从jtable中选中并取出一行 int rowNum=this.jt.getSelectedRow(); //如果一行都没选中,则返回-1 if(rowNum==-1) { //提示用户 JOptionPane.showMessageDialog(this, "请选择一行"); return; } new UpdateDialog(this,"修改学生信息",true,sm,rowNum); //更新数据 sm=new StuModel(); jt.setModel(sm); } //删除数据按钮 else if(e.getActionCommand().equals("delete")) { //System.out.println("用户想要删除"); //从jtable中选中并取出一行 int rowNum=this.jt.getSelectedRow(); //如果一行都没选中,则返回-1 if(rowNum==-1) { //提示用户 JOptionPane.showMessageDialog(this, "请选择一行"); return; } //得到学生的id号并转为Sting //sm=new StuModel(); stuId=(String)sm.getValueAt(rowNum,0); try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=mytest","sa","sa"); ps=ct.prepareStatement("delete from stus where stuId=?"); ps.setString(1, stuId); ps.executeUpdate(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally{ try { if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(ct!=null) ct.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } sm=new StuModel(); jt.setModel(sm); } } } ----------------------------------黄金分割线------------------------------------- /** * 这是一个操作数据库表的类 * */ package com.cary; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; import javax.swing.table.AbstractTableModel; public class StuModel extends AbstractTableModel { Vector rowData, columnNames; PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; public void init(String sql) { if(sql.equals("")) { sql="select * from stus"; } //中间布局 //存放列名 columnNames=new Vector(); columnNames.add("学号"); columnNames.add("姓名"); columnNames.add("性别"); columnNames.add("年龄"); columnNames.add("籍贯"); columnNames.add("系别"); rowData =new Vector(); try { //加载驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //得到连接 ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=mytest","sa","sa"); 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)); rowData.add(hang); } } catch (Exception e) { e.printStackTrace(); // TODO: handle exception }finally{ try { if(rs!=null) { rs.close(); } if(ps!=null) { ps.close(); } if(ct!=null) { ct.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //构造函数,通过传递的sql语句获得数据模型 public StuModel(String sql) { this.init(sql); } //构造函数,用于初始化操作数据库的变量 public StuModel() { this.init(""); } @Override public int getRowCount() { // TODO Auto-generated method stub return rowData.size(); } @Override public int getColumnCount() { // TODO Auto-generated method stub return columnNames.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return ((Vector)this.rowData.get(rowIndex)).get(columnIndex); } @Override public String getColumnName(int column) { // TODO Auto-generated method stub return (String)this.columnNames.get(column); } } ----------------------------------黄金分割线------------------------------------- /** * 添加学生信息类 */ package com.cary; import javax.swing.*; import org.omg.CORBA.PUBLIC_MEMBER; import java.awt.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class InsertDialog extends JDialog implements ActionListener{ //定义一些所需要的的控件 JLabel jl1,jl2,jl3,jl4,jl5,jl6; JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6; JPanel jp1,jp2,jp3; JButton jb1,jb2; PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; //构造方法 public InsertDialog(Frame owner, String title, boolean modal) { super(owner, title, modal); //初始化控件 jl1=new JLabel("学号"); jl2=new JLabel("姓名"); jl3=new JLabel("性别"); jl4=new JLabel("年龄"); jl5=new JLabel("籍贯"); jl6=new JLabel("系别"); jtf1=new JTextField(10); jtf2=new JTextField(10); jtf3=new JTextField(10); jtf4=new JTextField(10); jtf5=new JTextField(10); jtf6=new JTextField(10); jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); jb1=new JButton("添加"); jb1.addActionListener(this); jb1.setActionCommand("tianjia"); jb2=new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); //设置布局 jp1.setLayout(new GridLayout(6,1)); jp2.setLayout(new GridLayout(6,1)); //添加控件 jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp2.add(jtf1); jp2.add(jtf2); jp2.add(jtf3); jp2.add(jtf4); jp2.add(jtf5); jp2.add(jtf6); jp3.add(jb1); jp3.add(jb2); //设置布局并显示窗体 this.add(jp1,BorderLayout.WEST); this.add(jp2,BorderLayout.CENTER); this.add(jp3,BorderLayout.SOUTH); this.setSize(300, 200); //this.setTitle("添加学生"); //this.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand().equals("tianjia")) { //System.out.println("用户要添加信息"); try { //加载驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //得到连接 ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=mytest","sa","sa"); String sql="insert into stus values(?,?,?,?,?,?)"; ps=ct.prepareStatement(sql); //给参数赋值 ps.setString(1, jtf1.getText()); ps.setString(2, jtf2.getText()); ps.setString(3, jtf3.getText()); ps.setString(4, jtf4.getText()); ps.setString(5, jtf5.getText()); ps.setString(6, jtf6.getText()); ps.executeUpdate(); //关闭对话框 this.dispose(); } catch (Exception e1){ // TODO Auto-generated catch block e1.printStackTrace(); }finally{ //关闭资源 try { if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(ct!=null) ct.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }else if(e.getActionCommand().equals("quxiao")) { this.dispose(); } } } ----------------------------------黄金分割线------------------------------------- /** * 修改学生信息类 */ package com.cary; import javax.swing.*; import org.omg.CORBA.PUBLIC_MEMBER; import java.awt.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UpdateDialog extends JDialog implements ActionListener{ //定义一些所需要的的控件 JLabel jl1,jl2,jl3,jl4,jl5,jl6; JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6; JPanel jp1,jp2,jp3; JButton jb1,jb2; PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; //构造方法 public UpdateDialog(Frame owner, String title, boolean modal,StuModel sm,int RowNum) { super(owner, title, modal); //初始化控件 jl1=new JLabel("学号"); jl2=new JLabel("姓名"); jl3=new JLabel("性别"); jl4=new JLabel("年龄"); jl5=new JLabel("籍贯"); jl6=new JLabel("系别"); jtf1=new JTextField(10); jtf1.setText(sm.getValueAt(RowNum, 0).toString()); jtf1.setEditable(false); jtf2=new JTextField(10); jtf2.setText(sm.getValueAt(RowNum, 1).toString()); jtf3=new JTextField(10); jtf3.setText(sm.getValueAt(RowNum, 2).toString()); jtf4=new JTextField(10); jtf4.setText(sm.getValueAt(RowNum, 3).toString()); jtf5=new JTextField(10); jtf5.setText(sm.getValueAt(RowNum, 4).toString()); jtf6=new JTextField(10); jtf6.setText(sm.getValueAt(RowNum, 5).toString()); jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); jb1=new JButton("修改"); jb1.addActionListener(this); jb1.setActionCommand("xiugai"); jb2=new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); //设置布局 jp1.setLayout(new GridLayout(6,1)); jp2.setLayout(new GridLayout(6,1)); //添加控件 jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp2.add(jtf1); jp2.add(jtf2); jp2.add(jtf3); jp2.add(jtf4); jp2.add(jtf5); jp2.add(jtf6); jp3.add(jb1); jp3.add(jb2); //设置布局并显示窗体 this.add(jp1,BorderLayout.WEST); this.add(jp2,BorderLayout.CENTER); this.add(jp3,BorderLayout.SOUTH); this.setSize(300, 200); //this.setTitle("添加学生"); //this.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand().equals("xiugai")) { //System.out.println("用户要添加信息"); try { //加载驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //得到连接 ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=mytest","sa","sa"); String sql="update stus set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?"; ps=ct.prepareStatement(sql); //给参数赋值j ps.setString(1, jtf2.getText()); ps.setString(2, jtf3.getText()); ps.setString(3, jtf4.getText()); ps.setString(4, jtf5.getText()); ps.setString(5, jtf6.getText()); ps.setString(6, jtf1.getText()); ps.executeUpdate(); //关闭对话框 this.dispose(); } catch (Exception e1){ // TODO Auto-generated catch block e1.printStackTrace(); }finally{ //关闭资源 try { if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(ct!=null) ct.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }else if(e.getActionCommand().equals("quxiao")) { this.dispose(); } } } ----------------------------------黄金分割线------------------------------------- 未完,待续改进版......
1 下一页