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