(一)主界面的设计
创建一个类StuManage,该类主要提供给用户一个界面,可以使用户很好的操作学生信息管理系统。该主界面主要实现了界面的美化,为用户提供各种按钮,实现各种监听事件,具体步骤如下代码。
package com.test2;
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class Test3 extends JFrame implements ActionListener {
//定义一些控件
JPane1 jp1,jp2;
JLabel jl1;
JButton jb1,jb2,jb3,jb4;
JTable jt;
JScrollpane jsp;
JTextField jtf;
StuModel sm;
ublic static void main(String[] args){
Text3 text=new Test3();}
public Test3 (){
jp1=new JPane1();
jtf=new JTextField(10);
jb1=new JButton("查询");
jb1.addactionListener(this);
jl1=new JLabel("请输入名字");
//把各个空间加入到jpl
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jbl);
jp2=new JPane1 ();
jp2=new JButton("添加");
jb2.addActionListener( this);
jp3=new JButton("修改");
jb3.addActionListener( this); jp4=new JButton("删除");
jb2.addActionListener( this);
//把各个按钮加入到jp2
jp2.add(jb2); jp2.add(jb3); jp2.add(jb4);
//创建一个数据模型对象
sm=new StuModel(); String[] paras={"1"};
sm.queryStu("select * from stu where 1=?",paras);
//初始化JTable
jt=new JTable(sm)
//初始化jsp JScrollPane
jsp=new JScrollpane(jt);
//把jsp放入到jframe
this.add(jsp);
this.add(jp1,"North");
this.add(jp2,"South");
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT ON CLOSE );
this.setVisible(true);}
public void actionPerformed(ActionEvent arg0){
//判断是哪个按钮被点击
if(arg0.getSource()==jb1){
System.out.println("用户希望查询");
//因为把对表的数据封装到stuModel中,我们就可以比较简单的完成查询
String name=this.jtf.getText().trim();
//写一个sql语句
String sql="select * fromstu where stuName=?";
String paras[]={name};
//构建新的数据模型类,并更新
StuModel sm=new StuModel();
sm.queryStu(sql,paras);
//更新JTable
jt.setModel(sm); }
//当用户点击添加
else if (arg0.getSource()==jb2)
{StuAddDialog sa =new stuAddDialog(this,"添加学校"true);
//重新再获得新的数据模型
//构建新的数据模型,并更新
sm=new StuModel();
String [] paras2={"1"};
sm.queryStu("select * from stu where 1=?",paras2);
//更新JTable
jt.setModel(sm);
} else if(arg.getSource()==jb3){
//用户希望修改
int rowNum=this.jt.getSelectedRow();
if (rowNum==-1) {
//提示
JOptionPane.showMessageDialog(this,"请选择一行");
return ; }
//显示修改对话框
new StuUpdDialog(this,"修改学生",true,sm,rowNum);
// 构建新的数据模型,并更新
sm=new StuModel();
String [] paras2={"1"};
sm.queryStu("select * from stu where 1=?",paras2);
// 更新JTable
jt.setModel(sm) }
else if(arg.getSource()==jb4){
//说明用户希望删除记录1、得到该学生的id
//getSelectedRow会返回用户中的行如果该用户一行都没有,就返回-1
int rowNum=this.jt.getSelectedRow();
if (rowNum==-1){
//提示
JOptionPane.showMessageDialog(this,"请选择一行");
return ;}
//得到学生编号
String stuId=(String)sm.getValueAt(rowNum,0);
//创建一个aql语句
String sql="delete from stu where stuid=?";
String[]paras={stuId};
StuModel temp=new StuModel();
temp.updStu(aql,paras);
//更新数据模型
// 构建新的数据模型,并更新
sm=new StuModel();
String [] paras2={"1"};
sm.queryStu("select * from stu where 1=?",paras2);
// 更新JTable
jt.setModel(sm);}}
(二) 数据模型设计
创建一个SqlHelper类,数据模型是把所有对表的操作都封装到里面,有很高的代码使用性,比如说具体代码如下。
/ / 这是一个对数据库进行操作的类(SqlHelper)
package com.test2;
//@author Administrator
public class SqlHelper {
// 定义操作数据库需要的东西
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
String url="jdbc:microsoft:sqlserver://127.0.0.1;1433;databaseName=spdb1";
String user="sa";
String passwd="";
String dirver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//关闭数据库资源
public void close ()
{
// 关闭
try {
if(rs!=null) rs.close();
if(ps!=null) rs.close();
if(ct!=null) rs.close();
}catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet queryExecute(string sql)
{
try {
// 1加载驱动
Class.forName(dirver);
//2得到连接
ct=DriverManager.getConnection(url,user,passwd);
//3创建ps
ps=ct.prepareStatement(sql);
rs=ps.executeQuery();
}catch (Exception e){
e.printStackTrace();
}finally{
//关闭资源
}
return rs;
//查询数据库操作
public ResultSet queryExectue(String aql,String []paras)
{
try {
// 1加载驱动
Class.forName(dirver);
//2得到连接
ct=DriverManager.getConnection(url,user,passwd);
//3创建ps
ps=ct.prepareStatement(sql);
//给ps的问号赋值
for (int i=0;i
{
ps.setString(i+1,paras[i]);
}
rs=ps.executeQuery();
}catch (Exception e){
e.printStackTrace();
}finally{
//关闭资源
}return rs;}
//把增删改合在一起
public boolean updExecute(String sql,String []paras)
{
boolean b=true;
try {
//1加载驱动
Class.forName(dirver);
//2得到连接
ct=DriverManager.getConnection(url,user,passwd);
//3创建ps
ps=ct.prepareStatement(sql);
//给ps的问号赋值
for (int i=0;i
{ ps.setString(i+1,paras[i]); }
//4执行操作
if(ps.executeUpdate()!=1)
{ b=false; }
} catch (Exception e) {
b=false;
e.printStackTrace();
} finally { this.close() ; }
return b;}}
(三)建立学生表模型
创建一个类Stumodel,该类主要是建立学生表的模型,使其界面清晰。上下都是控件,中间是学生表。
代码如下:
//这是我的一个stu表的模型
package com.test1;
import java.util.Vector;
import javax.swing.table.*;;
public class StuModel extends AbstractTableModel{
// rowData用来存放行数据columnNames存放列名
Vector rowData,columnNames;
//添加学生(增,删,改)
public boollean updStu(String sql,String []paras){
//创建SqlHelper
SqlHelper SqlHelper=new SqlHelper();
return SqlHelper.updExecute(sql,paras); }
//查询的本质就是初始化
public void queryStu(String sql,String []paras){
SqlHelper SqlHelper=null;
// 中间
columnNames=new Vector();
// 设置列名
columnNames.add("学号"); columnNames.add("姓名");
columnNames.add("性别"); columnNames.add("年龄");
columnNames.add("籍贯"); columnNames.add("系别");
rowData=new Vector(); try {
SqlHelper=new SqlHelper();
ResultSet rs=sqlHelper.queryExectue(sql,paras);
while (rs.next()){
// rowdata 可以存放多行
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
rowData.add(hang); }
} catch (Exception e) {
e.printStackTrace();
} finally {
SqlHelper.close();}
//得到共有多少列
public int getRowCount() {
// TODO Auto-generated method stub
return this.columnNames.size();}
//得到共有多少行
public int getColumnCount() {
// TODO Auto-generated method stub
return this.rowData.size();}
//得到某行名列的数据
public Object getValueAt(int row, int column) {
// TODO Auto-generated method stub
return ((Vector)this.rowData.get(row)).get(column); }
@Override
public String getColumnName(int arg0) {
// TODO Auto-generated method stub
return (string)this.columnNames.get(arg0);}}
(四)学生表信息添加
创建类StuAddDialog,代码如下:
package com.test2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JDialog;
public class StuAddDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
JLable jl1,jl2,jl3,jl4,jl5,jl6; JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6; JPanel jp1,jp2,jp3;
//owne 它的父窗口
//rtitle窗口名
//model指定是模式窗口,还是非模式的窗口
public StuAddDialog(frame owner,string title,boolean model){
super(owner,title,model);
jl1=new JLable("学号"); jl2=new JLable("姓名");
jl3=new JLable("性别"); jl4=new JLable("年龄");
jl5=new JLable("籍贯"); jl6=new JLable("系别");
jtf1=new JTextField(); jtf2=new JTextField();
jtf3=new JTextField(); jtf4=new JTextField();
jtf5=new JTextField(); jtf6=new JTextField();
jb1=new JButton("添加");
//注册监听
jb1.addActionListener(this); jb2=new JButton("取消");
jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel();
//设置布局
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,250);
this.setDefaultCloseOperation(JFrame.EXIT ON CLOSE );
this.setVisible(true); }
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb1) {
//希望添加
StuModel temp=new StuModel();
String sql="insert into stu values(?,?,?,?,?,?)";
String[] paras={jtf1.getText(),jtf2.getText(),jtf3.getText(),
jtf4.getText(),jtf5.getText(),jtf6.getText() };
}if(!temp.updStu(sql,paras)){
JOptionPane.showMessageDialog(this,"添加失败");}
//关闭对话框
this.dispose() ;}}
(五)学生表的修改
代码如下:
//修改学生表
package com.test2;
import java.awt.event.ActionEvent;
import java.awt.event. ActionListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JDialog;
public class StuUpdDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
JLable jl1,jl2,jl3,jl4,jl5,jl6;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JPanel jp1,jp2,jp3;
//owne 它的父窗口
//rtitle窗口名
//model指定是模式窗口,还是非模式的窗口
public StuUpdDialog(frame owner,string title,boolean model,StuModel sm,int rowNums){
super(owner,title,model);
jl1=new JLable("学号"); jl2=new JLable("姓名");
jl3=new JLable("性别"); jl4=new JLable("年龄");
jl5=new JLable("籍贯"); jl6=new JLable("系别");
jtf1=new JTextField();
//初始化数据
jtf1.setText((String)sm.getValueAt( rowNums,0) );
//让jtf1不能修改
jtf1.setEditable(false);
jtf2=new JTextField();
jtf2.setText((String)sm.getValueAt( rowNums,1) );
jtf3=new JTextField();
jtf3.setText((String)sm.getValueAt( rowNums,2) );
jtf4=new JTextField();
jtf4.setText(sm.getValueAt( rowNums,3).toString());
jtf5=new JTextField();
jtf5.setText((String)sm.getValueAt( rowNums,4) );
jtf6=new JTextField();
jtf6.setText((String)sm.getValueAt( rowNums,5) );
jb1=new JButton("修改");
//注册监听
jb1.addActionListener(this); jb2=new JButton("取消");
jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel();
//设置布局
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,250);
this.setDefaultCloseOperation(JFrame.EXIT ON CLOSE );
this.setVisible(true);}
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb1){
//做一个sql
//与编译语句对象
String str ="update stu set stuName=?,stuSex=?,stuAge=?," +
"stuJg=?,stuDept=? where stuId=?";
String []paras={jtf2.getText(),jtf3.getText(),jtf4.getText(),
jtf5.getText(),jtf6.getText(),jtf1.getText()};
StuModel temp=new StuModel();
temp.updStu(str,paras);
this.dispose();
}
}
}
本文来源:https://www.2haoxitong.net/k/doc/f30eea6d27d3240c8447ef81.html
文档为doc格式