《2022年2022年工资管理系统》由会员分享,可在线阅读,更多相关《2022年2022年工资管理系统(26页珍藏版)》请在金锄头文库上搜索。
1、数据库课程设计 -工资管理系统1 工资管理系统一、实验设计目的掌握数据库的基本操作,并能运用JAVA开发简单的数据库管理系统。二、实验设计要求熟悉 java 开发环境;掌握数据库的基本操作; 熟悉 java 环境中数据库开发的基本方法和编程特点,掌握JAVA通过 ODBC 连接数据库的语法,能通过JAVA程序对数据库进行增加、 删除、修改等基本操作, 能对数据库进行各种条件的查询; 完成对系统的编程和调试; 可以采用自己所熟悉的数据库来进行系统的开发,如 SQLSERVER 2000、ACCESS、MYSQL 等数据库,要求在报告中给出详细的数据库设计文档。三、实验设计内容通过对实验设计课题的
2、分析, 设计出了具体的一个简单管理系统员工工资管理。系统的设计包含了数据库的设计、系统界面的设计和对系统数据库操作的设计。在开发工具上,使用的是NetBeans6.9。在数 据库 运用的 是 ACCESS 数据库 。 在与 数据 库 的连 接 中, 运用 的 是ODBC-JDBC 的桥连来实现数据库的连接操作。数据库中建立了“考勤”表,“职工”表、 “数据库用户”表、“职务”表和“工资”表。其中“考勤”表记录了员工在一个月工作的情况, 其中 check-attend表记录了员工在一个月工作的情况,包括上班几天和缺勤几天; 在“职工”表中记录的是员工的基本信息,包括了姓名、性别、职工号、部门和职
3、务等信息;在“数据库用户”表中,登记了管理员的帐号和密码;“职务”表记录了企业员工的类型和在这个类型的工种下的基本工资; “工资”表则记录的是一个员工在一个月里的具体工资的情况,包括了基本工资、奖金和扣除工资。在界面的实现和对数据库的操作中,实现了管理员登陆。 登陆后, 进入到操名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统2 作界面,实现了对员工数据库的基本信息的修改,增加一个员工的信息, 对
4、员工工作情况的登记,一个月份全部员工工资的查询以及全员的基本信息的查看。E-R 图如下:四、系统的详细设计1、登陆界面的详细设计在登陆上,管理员登陆后,有最大的权限。界面的布局如下图:部门管理职工职称姓 名 性别等 . 工号工资各种工资类别,比 如 该 加 的 和该扣的职称(它作为员工的属性,但是本身也是一个实体)职称名基本工资名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统3 图 4-1 其中以
5、管理员身份登陆的具体实现的主要代码如下:首先是建立了一个 Land的类,并让此类继承了 JFrame。在本类中的主要方法如下介绍。Land (String s)此方法实现了对界面的大体布局,具体代码如下:LandFrame(String s) super(s); setLayout(null); setBounds(100, 100, 500, 400); jLabel1 = new JLabel(用户名 :); jLabel2 = new JLabel(密码:); jbtn = new JButton(登陆); jbtn.addActionListener(new ActionListene
6、r() public void actionPerformed(ActionEvent e) test_manage(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统4 ); jbtn1 = new JButton(退出); jbtn1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent
7、 e) dispose(); ); jtf1 = new JTextField(10); jpwf = new JPasswordField(10); jpwf.setEchoChar(*); jLabel1.setBounds(155, 150, 50, 30); jLabel2.setBounds(155, 190, 50, 30); jtf1.setBounds(210, 150, 100, 25); jpwf.setBounds(210, 190, 100, 25); jbtn.setBounds(120, 250, 80, 40); jbtn1.setBounds(290, 250,
8、 80, 40); Container con = getContentPane(); con.add(jLabel1); con.add(jtf1); con.add(jLabel2); con.add(jpwf); con.add(jbtn); con.add(jbtn1); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); getRootPane().setDefaultButton(jbtn); setVisible(true); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
9、 - - 名师精心整理 - - - - - - - 第 4 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统5 Test-manage() 实现的是对管理员输入帐号的判断,主要代码如下叙述:public void test_manage() String str1, str2; str1 = jtf1.getText(); str2 = new String(jpwf.getPassword(); Connection conn = null; Conn con = new Conn(); conn = con.GetConnectionData(); tr
10、y PreparedStatement psmt = conn .prepareStatement(select 密 码from 数据 库 用 户where 用户名 = + str1 + ); ResultSet res = psmt.executeQuery(); if (!res.next() JOptionPane.showMessageDialog(this, 查无此人 , 错误, JOptionPane.ERROR_MESSAGE); else String pwd = res.getString(1); System.out.println(pwd); if (!(pwd.equa
11、ls(str2) JOptionPane.showMessageDialog(this, 密码 错误 , 错误, JOptionPane.ERROR_MESSAGE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统6 else loader1(); dispose(); psmt.close(); conn.close(); catch (Exception e) e.printStackTr
12、ace(); 2、操作界面的详细设计操作界面则是管理员登陆成功后,才能看到的界面。 在操作界面上的布局如下图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统7 图 4-31) 、在这个类中,没有多少的功能代码,其中只包含了query() 、count() 、lookover()三个方法。a、 query() 方法是实现了对员工整体工资在某月情况的查看,具体实现如下:public void que
13、ry() final JFrame jf = new JFrame(); JButton jbtn = new JButton(关闭); jbtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) jf.dispose(); ); jf.setBounds(100, 100, 700, 500); jf.setLayout(new BoxLayout(jf.getContentPane(), 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
14、- - - - - - 名师精心整理 - - - - - - - 第 7 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统8 BoxLayout.Y_AXIS); jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Container con = jf.getContentPane(); String str; str = String.valueOf(jCbsurchmonth.getSelectedItem(); Object name1 = 职工号 , 奖金 , 扣除工资 , 基本工资( 元),
15、实发工资 ( 元), 月份 ; Object b; Conn conn = new Conn(); try Connection con1 = conn.GetConnectionData(); Statement sql = con1 .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = sql .executeQuery(select 职工号 , 奖金, 扣除工资 , 基本工资, 实发工资 , 月份 + from 工资 where 月份 like + str
16、 + ); rs.last(); int num = rs.getRow(); b = new Objectnum6; int b_num = 0; rs.beforeFirst(); while (rs.next() String s_num = rs.getString(1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统9 String bonus = rs.getString(2);
17、String deduct = rs.getString(3); String s_basicsalary = rs.getString(4); String fact_salary = rs.getString(5); String month = rs.getString(6); bb_num0 = s_num; bb_num1 = (Object) bonus; bb_num2 = deduct; bb_num3 = s_basicsalary; bb_num4 = fact_salary; bb_num5 = month; b_num+; JTable table = new JTab
18、le(b, name1); con.add(new JScrollPane(table); con.add(jbtn); jf.setVisible(true); catch (Exception e) e.printStackTrace(); 得到的效果如下图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统10 图 4-4b、count() 方法则是对员工本月工作情况的结算,从界面上得到上班几
19、天和缺勤几天来计算出本月的具体工作。实现代码如下:public void count() String str1, str2, str3, str4; str1 = jTextFieldid.getText(); str2 = String.valueOf(jComboBoxmonth.getSelectedItem(); str3 = jTfworkday.getText(); str4 = jTfabsentday.getText(); Conn conn = new Conn(); try Connection con = conn.GetConnectionData(); Prepar
20、edStatement psmt = con 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统11 .prepareStatement(insert into 考勤values(?,?,?,?); psmt.setString(1, str1); psmt.setString(2, str3); psmt.setString(3, str4); psmt.setString(4, str2);
21、psmt.executeUpdate(); psmt = con .prepareStatement(select 职 务from 职工where 职工号 =?); psmt.setString(1, str1); ResultSet rs = psmt.executeQuery(); rs.next(); String post1 = rs.getString(1); psmt = con .prepareStatement(select 基 本 工 资from 职 务where 职务 like + post1 + ); ResultSet rs1 = psmt.executeQuery()
22、; rs1.next(); float bonus1 = Float.parseFloat(str3) * 20; float deduct1 = Float.parseFloat(str4) * 50; float basic_salary1 = rs1.getFloat(1); float fact_salary1 = basic_salary1 + bonus1 - deduct1; psmt = con .prepareStatement(insert into 工资values(?,?,?,?,?,?); psmt.setString(1, str1); 名师资料总结 - - -精品
23、资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统12 psmt.setFloat(2, bonus1); psmt.setFloat(3, deduct1); psmt.setFloat(4, basic_salary1); psmt.setFloat(5, fact_salary1); psmt.setString(6, str2); JOptionPane.showMessageDialog(this, 成功输入 ,
24、提示, JOptionPane.INFORMATION_MESSAGE); psmt.executeUpdate(); psmt.close(); con.close(); catch (Exception e) JOptionPane.showMessageDialog(this, 请输入正确的职工号, 错误, JOptionPane.INFORMATION_MESSAGE); c、lookover()方法既是查看全部员工信息情况,用 JTable 来显示所要查看的结果。此方法的具体实现如下:public void lookover() final JFrame jf = new JFram
25、e(); jf.setLayout(new BoxLayout(jf.getContentPane(), BoxLayout.Y_AXIS); JButton jbtn = new JButton(关闭); jbtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) jf.dispose(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 26 页 - -
26、 - - - - - - - 数据库课程设计 -工资管理系统13 ); jf.setBounds(100, 100, 700, 500); jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Container con1 = jf.getContentPane(); JTable table; Object a; Object name = 职工号 , 姓名, 性别, 职务, 部门 ; Conn conn = new Conn(); try Connection con = conn.GetConnectionData(); Statem
27、ent sql = con .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = sql .executeQuery(select 职工号 , 姓名 , 性别 , 职务 , 部门 from 职工); rs.last(); int number = rs.getRow(); a = new Objectnumber8; rs.beforeFirst(); int a_num = 0; while (rs.next() String num1 = rs.getStr
28、ing(1); String name1 = rs.getString(2); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统14 String sex1 = rs.getString(3); String post = rs.getString(4); String department = rs.getString(5); aa_num0 = num1; aa_num1 = name1;
29、aa_num2 = sex1; aa_num3 = post; aa_num4 = department; a_num+; table = new JTable(a, name); con1.add(new JScrollPane(table); con1.add(jbtn); jf.setVisible(true); catch (Exception e) e.printStackTrace(); 此方法操作后的结果如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共
30、 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统15 图4-62)、操作界面上其他按钮的实现。a、确定按钮的实现, 此按钮是通过单击调用了上面所描述的count() 方法来计算、记录员工的一个月的工作情况和工资。b、查询按钮则调用了 query() 方法,来查看某月的员工工资情况。c、更改基本工资按钮, 则是通过 new 一个S_change 类来对基本工资的情况进行更改。在 S_change 类的主要实现如下:publicclass S_change extends JFrame S_change(String s) super (s); setLayout(
31、null ); setBounds(200, 200, 300, 200); jLabel1 = new JLabel(请选择职位名称 :); jLabel2 = new JLabel(基本工资 (元):); jbtn = new JButton(提交); jbtn1 = new JButton(退出); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统16 jbtn1.addActionLis
32、tener(new ActionListener() publicvoid actionPerformed(ActionEvent e) dispose(); ); jcb = new JComboBox(); jcb.addItem(管理人员 ); ,jcb.addItem(销售人员 ); jtf = new JTextField(10); jLabel1.setBounds(30, 15, 110, 30); ,jbtn1.setBounds(160, 100, 60, 30); Container con = getContentPane(); con.add(jLabel1); ,co
33、n.add(jbtn1); jbtn.addActionListener(new ActionListener() publicvoid actionPerformed(ActionEvent e) change(); ); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setVisible(true ); / 实现对表的操作public void change() String str1, str3; float str2; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
34、 名师精心整理 - - - - - - - 第 16 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统17 str1 = (String) jcb.getSelectedItem(); str3 = jtf.getText(); if (str3.equals() JOptionPane.showMessageDialog(this, 请输入基本工资 , 提示, JOptionPane.INFORMATION_MESSAGE); else str2 = Float.parseFloat(str3); Conn conn = new Conn(); if (s
35、tr2 3000.00) JOptionPane.showMessageDialog(this, 输入的基本工资必须小于3000, 提示, JOptionPane.INFORMATION_MESSAGE); else try Connection con = conn.GetConnectionData(); PreparedStatement psmt = con .prepareStatement(update 职务 set 基本工资 =? + where 职务= + str1 + ); psmt.setFloat(1, str2); psmt.executeUpdate(); psmt
36、= con .prepareStatement(select 职工号 from 职工 + where 职务= + str1 + ); ResultSet rs = psmt.executeQuery(); rs.next(); String id = rs.getString(1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统18 psmt = con .prepareStatement(
37、update 工资 set 基本工资 =? + where 职工号 = + id + ); psmt.setFloat(1, str2); psmt.executeUpdate(); JOptionPane.showMessageDialog(this, 修改成功 , 提示, JOptionPane.INFORMATION_MESSAGE); dispose(); psmt.close(); con.close(); catch (Exception e) e.printStackTrace(); 所得的结果如下图:图4-7其中也做了对基本工资的最大值的判断,最大不能超过三千,如:str2 3
38、000.00成立册对数据表的操作失败。d、修改员工信息按钮,则是对“职工”表的数据进行更新。在设计中,通名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统19 过Alter 类来实现。主要功能代码在Alter 类中的 alter()方法。publicvoid alter() String e_num1, name1, password1, sex1, stafftype, department;
39、e_num1 = jtfid.getText().trim(); name1 = jtfname.getText(); password1 = jtfpassw.getText(); sex1 = (String) jcbsex.getSelectedItem(); stafftype = (String) jcbjob.getSelectedItem(); department = (String) jcbkeshi.getSelectedItem(); if (e_num1.equals() JOptionPane. showMessageDialog( this , 请输入员工号 , 提
40、示, JOptionPane. INFORMATION_MESSAGE); else Conn conn = new Conn(); try Connection con = conn.GetConnectionData(); PreparedStatement psmt1 = con .prepareStatement(select name,password,sex,post,department + from employee_info where e_num LIKE + e_num1 + ); ResultSet rs = psmt1.executeQuery(); boolean
41、bl = rs.next(); if (bl) if (name1.equals() name1 = rs.getString(1); , /非空的判断if (department.equals() department = rs.getString(6); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统20 psmt1.close(); con.close(); try Connection
42、 con1 = conn.GetConnectionData(); PreparedStatement psmt2 = con1 .prepareStatement(update employee_info set name=?,password=?,sex=?,post=?,+ department=? where e_num= + e_num1+ ); psmt2.setString(1, name1); ,psmt2.setString(5, department); psmt2.executeUpdate(); JOptionPane. showMessageDialog( this
43、, 修改成功 , 修改,JOptionPane.INFORMATION_MESSAGE); dispose(); psmt2.close(); con.close(); catch (Exception e) e.printStackTrace(); elseJOptionPane. showMessageDialog(this , 请输入正确的员工号, 错误,JOptionPane.ERROR_MESSAGE); catch (Exception e) e.printStackTrace(); 更改按钮的操作结果图如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
44、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统21 图4-8d、增加员工和删除员工,则 是对员工信 息的增加和 删除。增 加是通过Increase 类来实现的, 删除则是通过 Delete 类来实现。 在Increase 类中,除了一些在界面上布局的代码外,在主要功能实现的代码则是此类中的add方法。 Add方法的主要代码如下:public void add() try String str1, str2, str3, str4, str5; str1 = jtf
45、id.getText(); str2 = jtfname.getText(); str3 = (String) jcbsex.getSelectedItem(); str4 = (String) jcbjob.getSelectedItem(); str5 = (String)jcbkeshi.getSelectedItem(); /str8 = jtf8.getText(); if (str1.equals() | str2.equals() | str5.equals() JOptionPane.showMessageDialog(this, 请完整输入 , 错误, 名师资料总结 - -
46、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统22 JOptionPane.ERROR_MESSAGE); else Conn conn=new Conn(); Connection con = conn.GetConnectionData(); PreparedStatement psmt = con .prepareStatement(insert into 职工values(?,?,?,?,?); psmt.
47、setString(1, str1); psmt.setString(2, str2); psmt.setString(3, str3); psmt.setString(4, str4); psmt.setString(5, str5); psmt.executeUpdate(); JOptionPane.showMessageDialog(this, 添加成功! , 添加, JOptionPane.INFORMATION_MESSAGE); dispose(); psmt.close(); con.close(); catch (Exception e) JOptionPane.showMe
48、ssageDialog(this, 职工号重复 , 错误, JOptionPane.ERROR_MESSAGE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统23 而在Delete 类中,实现删除的主要功能的是delete()方法。其主要的功能代码如下:public void delete() String str; str = jtf.getText().trim(); Conn con
49、n = new Conn(); try Connection con = conn.GetConnectionData(); PreparedStatement psmt1 = con .prepareStatement(select 姓 名from 职工where 职工号 =?); psmt1.setString(1, str); ResultSet rs = psmt1.executeQuery(); if (rs.next() Connection con1 = conn.GetConnectionData(); PreparedStatement psmt = con1 .prepar
50、eStatement(delete from 工资 where 职工号=?); psmt.setString(1, str); psmt.executeUpdate(); psmt = con1 .prepareStatement(delete from 考勤 where 职工号=?); psmt.setString(1, str); psmt.executeUpdate(); psmt = con1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 26 页 - - -
51、 - - - - - - 数据库课程设计 -工资管理系统24 .prepareStatement(delete from 职工 where 职工号=?); psmt.setString(1, str); psmt.executeUpdate(); JOptionPane.showMessageDialog(this, 删除成功 , 删除, JOptionPane.INFORMATION_MESSAGE); psmt.close(); con.close(); else JOptionPane.showMessageDialog(this, 无此职工 , 错误, JOptionPane.ERRO
52、R_MESSAGE); catch (Exception e) e.printStackTrace(); 从上面的代码中可以看到, 在删除员工信息时, 同时也删除了工资、 考勤两个表中的信息。这两个方法的效果如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统25 图4-93、其他类的作用在整个系统运行中,对数据库的连接,是通过一个Conn类来实现,这样对在代码上节约了不少。 同时也比较方便,
53、 不用每次连接数据库的时候都去重复写一样的代码。 Conn类用一个 GetConnectionData() 方法来实现连接, 其主要代码如下:public Connection GetConnectionData() Connection conn = null ; try Class. forName(sun.jdbc.odbc.JdbcOdbcDriver); conn = DriverManager.getConnection (url); catch (Exception e) e.printStackTrace(); return conn; 五、实验设计的心得体会本次实验的设计,从
54、整体上对java 与数据库的开发进行实践。从自己的设计中,也体会到了不少。首先在数据库的设计中, 一开始就盲目的对数据库进行建表,结果正要对数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 26 页 - - - - - - - - - 数据库课程设计 -工资管理系统26 据库进行操作时,才发现所建数据库完全不能达到效果,而且很不方便。因此,在设计之前,一个对系统的整体构思和需求分析,十分的重要。其次在数据库的操作中, 运用的对数据库的连接放到一个类里,这样既减少了代码,也减少了重复的工作。 在访问数据库时用PreparedStatement 接口来访问, 而 PreparedStatement接口也继承 了 Statement ,同时感觉PreparedStatement比 Statement要方便的多。最后,在一个开发项目中,团体的合作尤为的重要。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 26 页 - - - - - - - - -