最近正在學java和數據庫,想起以前寫的學生管理系統,都是從網上下載,敷衍了事。閒來無事,也就自己寫了一個,不過功能實現的不是很多。
開發語言:java; 開發環境:Mysql, java; 開發工具:eclipse
開發此案例,首先得在電腦上有java開發環境和Mysql, java開發環境與Mysql的搭建,就不再敘述了,如果需要,請聯系我最下面的聯系方式:dingyelf@aliyun.com
此次系統比較簡易:數據庫中只有一個表:stu;功能:能夠對學生增加、刪除、修改。
開發步驟:
1.在數據庫中建表:
1 create table stu( 2 stuId String, 3 stuName String, 4 stuSex String, 5 stuAge int, 6 stuJG String, 7 stuDept Sring 8 );
2.java 代碼主要由四個類組成:
Test3包含主函數;StuModel用來刷新、呈現數據庫;StuAddDiag用來實現增添讀者功能;StuUpDiag是修改學生信息。具體代碼如下:
Test3.java:
1 import javax.swing.*;
2 import java.util.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 import java.sql.Connection;
6 import java.sql.Driver;
7 import java.sql.DriverManager;
8 import java.sql.PreparedStatement;
9 import java.sql.ResultSet;
10 import java.sql.Statement;
11
12 public class Test3 extends JFrame implements ActionListener {
13 //定義一些控件
14 JPanel jp1,jp2;
15 JLabel jl1,jl2;
16 JButton jb1,jb2,jb3,jb4;
17 JTable jt;
18 JScrollPane jsp;
19 JTextField jtf;
20 StuModel sm;
21 //定義連接數據庫的變量
22 Statement stat = null;
23 PreparedStatement ps;
24 Connection ct = null;
25 ResultSet rs = null;
26
27 public static void main(String[] args){
28 Test3 test3 = new Test3();
29 }
30 //構造函數
31 public Test3(){
32 jp1 = new JPanel();
33 jtf = new JTextField(10);
34 jb1 = new JButton("查詢");
35 jb1.addActionListener(this);
36 jl1 = new JLabel("請輸入名字:");
37
38 jp1.add(jl1);
39 jp1.add(jtf);
40 jp1.add(jb1);
41
42 jb2 = new JButton("添加");
43 jb2.addActionListener(this);
44 jb3 = new JButton("修改");
45 jb3.addActionListener(this);
46 jb4 = new JButton("刪除");
47 jb4.addActionListener(this);
48
49 jp2 = new JPanel();
50 jp2.add(jb2);
51 jp2.add(jb3);
52 jp2.add(jb4);
53
54 //創建模型對象
55 sm = new StuModel();
56
57
58 //初始化
59 jt = new JTable(sm);
60
61 jsp = new JScrollPane(jt);
62
63 //將jsp放入到jframe中
64 this.add(jsp);
65 this.add(jp1,"North");
66 this.add(jp2,"South");
67 this.setSize(600, 400);
68 //this.setLocation(300, 200);
69 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
70 this.setVisible(true);
71
73 }
75 public void actionPerformed(ActionEvent arg0) {
76 //判斷是哪個按鈕被點擊
77 if(arg0.getSource() == jb1){
78 System.out.println("用戶希望被查詢...");
79 //因為把對表的數據封裝到StuModel中,可以比較簡單的完成查詢
80 String name = this.jtf.getText().trim();
81 //寫一個sql語句
82 String sql = "select * from stu where stuName = '"+name+"' ";
83 //構建一個數據模型類,並更新
84 sm = new StuModel(sql);
85 //更新jtable
86 jt.setModel(sm);
87
88 }
89
90 //一、彈出添加界面
91 else if(arg0.getSource() == jb2){
92 System.out.println("添加...");
93 StuAddDiag sa = new StuAddDiag(this,"添加學生",true);
94
95 //重新再獲得新的數據模型,
96 sm = new StuModel();
97 jt.setModel(sm);
98 }else if(arg0.getSource() == jb4){
99 //二、刪除記錄
100 //1.得到學生的ID
101 int rowNum = this.jt.getSelectedRow();//getSelectedRow會返回給用戶點中的行
102 //如果該用戶一行都沒有選,就返回-1
103 if(rowNum == -1){
104 //提示
105 JOptionPane.showMessageDialog(this, "請選中一行");
106 return ;
107 }
108 //得到學術ID
109 String stuId = (String)sm.getValueAt(rowNum, 0);
110 System.out.println("Id: "+stuId);
111
112 //連接數據庫,完成刪除任務
113 try{
114 //1.加載驅動
115 Class.forName("com.mysql.jdbc.Driver");
116 //2.連接數據庫
117 String url = "jdbc:mysql://localhost:3306/spdb1";
118 String user = "root";
119 String passwd = "lfdy";
120
121 ct = DriverManager.getConnection(url, user, passwd);
122 System.out.println("連接成功");
123 ps = ct.prepareStatement("delete from stu where stuId = ?");
124 ps.setString(1,stuId);
125 ps.executeUpdate();
126
127 }catch(Exception e){
128 e.printStackTrace();
129 }finally{
130 try{
131 if(rs!= null){
132 rs.close();
133 rs = null;
134
135 }
136 if(ps!= null){
137 ps.close();
138 ps = null;
139 }
140 if(ct != null){
141 ct.close();
142 ct = null;
143 }
144 } catch(Exception e){
145 e.printStackTrace();
146 }
147 }
148 sm = new StuModel();
149 //更新jtable
150 jt.setModel(sm);
151 }else if(arg0.getSource() == jb3){
152 System.out.println("11111");
153 //三、用戶希望修改
154 int rowNum = this.jt.getSelectedRow();
155 if(rowNum == -1){
156 //提示
157 JOptionPane.showMessageDialog(this, "請選擇一行");
158 return ;
159 }
160 //顯示對話框
161 System.out.println( "12435");
162 StuUpDiag su = new StuUpDiag(this, "修改學術", true, sm, rowNum);
163 sm = new StuModel();
164 jt.setModel(sm);
165 }
166 }
167 }
StuModel.java:
1 /*
2 * 這是我的一個stu表的模型
3 * 可以把對學生表的操作全都封裝到這個類
4 */
5 package com.test2;
6
7 import java.sql.Connection;
8 import java.sql.DriverManager;
9 import java.sql.ResultSet;
10 import java.sql.Statement;
11 import java.util.Vector;
12 import javax.swing.table.*;
13
14 public class StuModel extends AbstractTableModel{
15
16 //rowData存放行數據,columnNames存放列名
17 Vector rowData,columnNames;
18
19 //定義連接數據庫的變量
20 Statement stat = null;
21 Connection ct = null;
22 ResultSet rs = null;
23
24 //初始化
25 public void init(String sql){
26 if(sql.equals("")){
27 sql = "select * from stu";
28 }
29 //中間
30 //設置列名
31 columnNames = new Vector();
32 columnNames.add("學號");
33 columnNames.add("名字");
34 columnNames.add("性別");
35 columnNames.add("年齡");
36 columnNames.add("籍貫");
37 columnNames.add("門派");
38
39 //rowData存放多行
40 rowData = new Vector();
41
42 try{
43 //1.加載驅動
44 Class.forName("com.mysql.jdbc.Driver");
45 System.out.println("加載成功");
46 //2.連接數據庫
47 //定義幾個常量
48 String url = "jdbc:mysql://localhost:3306/spdb1";
49 String user = "root";
50 String passwd = "lfdy";
51
52 ct = DriverManager.getConnection(url,user,passwd);
53 stat = ct.createStatement();//創建stat對象
54 rs = stat.executeQuery(sql);//查詢結果
55
56 while(rs.next()){
57 Vector hang = new Vector();
58 hang.add(rs.getString(1));
59 hang.add(rs.getString(2));
60 hang.add(rs.getString(3));
61 hang.add(rs.getInt(4));
62 hang.add(rs.getString(5));
63 hang.add(rs.getString(6));
64 //加入到rowData中
65 rowData.add(hang);
66
67 }
68
69 }catch(Exception e){
70 e.printStackTrace();
71 }finally{
72 try{
73 if(rs!=null){
74 rs.close();
75 rs = null;
76 }
77 if(stat != null){
78 stat.close();
79 stat = null;
80 }
81 if(ct != null){
82 ct.close();
83 ct = null;
84 }
85 }catch(Exception e){
86 e.printStackTrace();
87 }
88 }
89 }
90
91 //增加學生函數
92 public void addStu(String sql){
93 //根據用戶輸入的sql語句,完成添加任務
94
95
96
97 }
98
99 //第二個構造函數,通過傳遞的sql語句來獲得數據模型
100 public StuModel(String sql){
101 this.init(sql);
102 }
103
104 //構造函數,用於初始化我的數據模型(表)
105 public StuModel(){
106 this.init("");
107 }
108
109 //得到共有多少行
110 public int getRowCount() {
111 // TODO Auto-generated method stub
112 return this.rowData.size();
113 }
114
115 //得到共有多少列
116 public int getColumnCount() {
117 // TODO Auto-generated method stub
118 return this.columnNames.size();
119 }
120
121 //得到某行某列的數據
122 public Object getValueAt(int row, int column) {
123 // TODO Auto-generated method stub
124 return ((Vector)(this.rowData.get(row))).get(column);
125 }
126
127 //得到屬性名字
128 public String getColumnName(int column) {
129 // TODO Auto-generated method stub
130 return (String)this.columnNames.get(column);
131 }
132 }
StuAddDiag.java:
1 package com.test2;
2
3 import javax.swing.JDialog;
4 import javax.swing.*;
5 import java.awt.*;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.sql.Statement;
9 import java.sql.Connection;
10 import java.sql.DriverManager;
11 import java.sql.ResultSet;
12 import java.sql.*;
13
14 public class StuAddDiag extends JDialog implements ActionListener {
15 //定義我需要的swing組件
16 JLabel jl1,jl2,jl3,jl4,jl5,jl6;
17 JTextField jf1,jf2,jf3,jf4,jf5,jf6;
18 JPanel jp1,jp2,jp3;
19 JButton jb1,jb2;
20 //owner代筆父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口
21 public StuAddDiag(Frame owner,String title, boolean modal){
22 //調用父類方法
23 super(owner,title,modal);
24
25 jl1 = new JLabel("學號");
26 jl2 = new JLabel("名字");
27 jl3 = new JLabel("性別");
28 jl4 = new JLabel("年齡");
29 jl5 = new JLabel("籍貫");
30 jl6 = new JLabel("門派");
31
32 jf1 = new JTextField(10);
33 jf2 = new JTextField(10);
34 jf3 = new JTextField(10);
35 jf4 = new JTextField(10);
36 jf5 = new JTextField(10);
37 jf6 = new JTextField(10);
38
39 jb1 = new JButton("添加");
40 jb1.addActionListener(this);
41 jb2 = new JButton("取消");
42
43 jp1 = new JPanel();
44 jp2 = new JPanel();
45 jp3 = new JPanel();
46
47 //設置布局
48 jp1.setLayout(new GridLayout(6,1));
49 jp2.setLayout(new GridLayout(6,1));
50
51 jp3.add(jb1);
52 jp3.add(jb2);
53
54 jp1.add(jl1);
55 jp1.add(jl2);
56 jp1.add(jl3);
57 jp1.add(jl4);
58 jp1.add(jl5);
59 jp1.add(jl6);
60
61 jp2.add(jf1);
62 jp2.add(jf2);
63 jp2.add(jf3);
64 jp2.add(jf4);
65 jp2.add(jf5);
66 jp2.add(jf6);
67
68 this.add(jp1, BorderLayout.WEST);
69 this.add(jp2, BorderLayout.CENTER);
70 this.add(jp3, BorderLayout.SOUTH);
71
72 this.setSize(300,200);
73 this.setVisible(true);
74 }
75 @Override
76 public void actionPerformed(ActionEvent e) {
77 // TODO Auto-generated method stub
78 if(e.getSource() == jb1){
79 Connection ct = null;
80 PreparedStatement pstmt = null;
81 ResultSet rs = null;
82
83 try{
84 //1.加載驅動
85 Class.forName("com.mysql.jdbc.Driver");
86 System.out.println("加載成功");
87 //2.連接數據庫
88 //定義幾個常量
89 String url = "jdbc:mysql://localhost:3306/spdb1";
90 String user = "root";
91 String passwd = "lfdy";
92 ct = DriverManager.getConnection(url,user,passwd);
93
94 //與編譯語句對象
95
96 String strsql = "insert into stu values(?,?,?,?,?,?)";
97 pstmt = ct.prepareStatement(strsql);
98
99 //給對象賦值
100 pstmt.setString(1,jf1.getText());
101 pstmt.setString(2,jf2.getText());
102 pstmt.setString(3,jf3.getText());
103 pstmt.setString(4,jf4.getText());
104 pstmt.setString(5,jf5.getText());
105 pstmt.setString(6,jf6.getText());
106
107 pstmt.executeUpdate();
108
109 this.dispose();//關閉學生對話框
110
111 }catch(Exception arg1){
112 arg1.printStackTrace();
113 }finally{
114 try{
115 if(rs!=null){
116 rs.close();
117 rs = null;
118 }
119 if(pstmt != null){
120 pstmt.close();
121 pstmt = null;
122 }
123 if(ct != null){
124 ct.close();
125 ct = null;
126 }
127 }catch(Exception arg2){
128 arg2.printStackTrace();
129 }
130 }
131
132 }
133
134 }
135
136
137 }
StuUpDiag.java:
package com.test2;
/*
* 修改學生
*/
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.*;
public class StuUpDiag extends JDialog implements ActionListener {
//定義我需要的swing組件
JLabel jl1,jl2,jl3,jl4,jl5,jl6;
JTextField jf1,jf2,jf3,jf4,jf5,jf6;
JPanel jp1,jp2,jp3;
JButton jb1,jb2;
//owner代筆父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口
public StuUpDiag(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("門派");
jf1 = new JTextField(10);jf1.setText((sm.getValueAt(rowNum, 0)).toString());
jf2 = new JTextField(10);jf2.setText((String)sm.getValueAt(rowNum, 1));
jf3 = new JTextField(10);jf3.setText(sm.getValueAt(rowNum, 2).toString());
jf4 = new JTextField(10);jf4.setText((sm.getValueAt(rowNum, 3)).toString());
jf5 = new JTextField(10);jf5.setText((String)sm.getValueAt(rowNum, 4));
jf6 = new JTextField(10);jf6.setText((String)sm.getValueAt(rowNum, 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));
jp3.add(jb1);
jp3.add(jb2);
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);
jp2.add(jf1);
jp2.add(jf2);
jp2.add(jf3);
jp2.add(jf4);
jp2.add(jf5);
jp2.add(jf6);
this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.CENTER);
this.add(jp3, BorderLayout.SOUTH);
this.setSize(300,200);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == jb1){
Connection ct = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
//1.加載驅動
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加載成功");
//2.連接數據庫
//定義幾個常量
String url = "jdbc:mysql://localhost:3306/spdb1";
String user = "root";
String passwd = "lfdy";
ct = DriverManager.getConnection(url,user,passwd);
//與編譯語句對象
String strsql = "insert into stu values(?,?,?,?,?,?)";
pstmt = ct.prepareStatement(strsql);
//給對象賦值
pstmt.setString(1,jf1.getText());
pstmt.setString(2,jf2.getText());
pstmt.setString(3,jf3.getText());
pstmt.setString(4,jf4.getText());
pstmt.setString(5,jf5.getText());
pstmt.setString(6,jf6.getText());
pstmt.executeUpdate();
this.dispose();//關閉學生對話框
}catch(Exception arg1){
arg1.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs = null;
}
if(pstmt != null){
pstmt.close();
pstmt = null;
}
if(ct != null){
ct.close();
ct = null;
}
}catch(Exception arg2){
arg2.printStackTrace();
}
}
}
}
}
開發與測試結果:
1.系統主界面:

2.按名字查詢:

3.選中一行,刪除:

4.選中一行修改:

5.點擊添加按鈕,進行添加:

後續此系統將繼續完善,有疑問和技術交流的,可聯系本人:dingyelf@aliyun.com