Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作

转载来源:https://blog.csdn.net/Eastmount/article/details/45833663

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/45833663

        正如前面一篇文章的介绍,当使用Servlet提交表单和JSP数据库查询时,总是相互交叉着的处理,要么在JSP中通过<%…%>内嵌Java代码操作数据库,要么JSP中通过Post方法提交表单Form,在Java中通过Servlet获取请求/响应,再通过Java中out.println("<HTML>…")输出数据库中值。

        此篇文章主要讲述通过DAO和Java Bean操作数据库,把链接数据库、数据库操作、前端界面显示分模块化实现。参考前文:
        Java+MyEclipse+Tomcat
(一)配置过程及jsp网站开发入门

        Java+MyEclipse+Tomcat
(二)配置Servlet及简单实现表单提交

        Java+MyEclipse+Tomcat
(三)配置MySQL及查询数据显示在JSP网页中


        Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作
       DAO和Java Bean是对JDBC进行分层、模块化的最有效两个方法。DAO(数据库操作对象,Database
Access Object)是JDBC下常用模式,DAO出现之前,操作数据库的代码与业务代码都出现在Servlet或者JSP中,不利用业务代码的分离。DAO出现后,所有与数据库相关的操作全被拿到了DAO层实现,Servlet或JSP只操作Java Bean或者DAP层,而DAO层值操作数据库。
       下面直接上代码,希望文章对你有所帮助~文章部分参考Java Web王者归来。

        下载地址:http://download.csdn.net/detail/eastmount/8714395


一. 项目结构

       该项目的结构如下图所示:


        其中bean中Student.java是对应数据库学生表,主要包括setId()、getId()等操作;DAO中StudentDAO.java是对学生表的数据库增删改查操作;util中JDBCConnect.java主要是连接数据库MySQL的操作;student.jsp是显示数据的JSP前端界面。同时需要lib文件夹中加载mysql-connector-java.jar包。

二. 创建数据库

        打开MySQL,输入默认超级root用户的密码,然后数据库的操作如下代码:


 
 
  1. --创建数据库
  2. create database TestDao;
  3. --使用数据库
  4. use TestDao;
  5. --创建学生表
  6. create table student(
  7. stuid int,
  8. username varchar( 20),
  9. password varchar( 20)
  10. );
  11. --插入数据
  12. insert student(stuid,username, password)
  13. values ( "10001", "Eastmount", "111111");
  14. insert student(stuid,username, password)
  15. values ( "10002", "Yangxiuzhang", "123456");
  16. --显示表结构
  17. desc student;
  18. --查询表中数据
  19. select * from student;

        其中表结构和表中数据显示如下图:



三. Java代码

       1.在src下新建文件夹util,然后添加类JDBCConnect.java。代码如下:


 
 
  1. package util;
  2. import java.sql.*;
  3. import com.mysql.jdbc.Driver;
  4. public class JDBCConnect {
  5. //获取默认数据库连接
  6. public static Connection getConnection() throws SQLException {
  7. return getConnection( "TestDAO", "root", "123456"); //数据库名 默认用户 密码
  8. }
  9. //连接数据库 参数:数据库名 root登录名 密码
  10. public static Connection getConnection(String dbName, String userName,
  11. String password) throws SQLException {
  12. String url = "jdbc:mysql://localhost:3306/" + dbName
  13. + "?characterEncoding=utf-8";
  14. //连接MySQL"com.mysql.jdbc.Driver"
  15. DriverManager.registerDriver( new Driver());
  16. return DriverManager.getConnection(url, userName, password);
  17. }
  18. //设置 PreparedStatement 参数
  19. public static void setParams(PreparedStatement preStmt, Object... params)
  20. throws SQLException {
  21. if (params == null || params.length == 0)
  22. return;
  23. for ( int i = 1; i <= params.length; i++) {
  24. Object param = params[i - 1];
  25. if (param == null) {
  26. preStmt.setNull(i, Types.NULL);
  27. } else if (param instanceof Integer) {
  28. preStmt.setInt(i, (Integer) param);
  29. } else if (param instanceof String) {
  30. preStmt.setString(i, (String) param);
  31. } else if (param instanceof Double) {
  32. preStmt.setDouble(i, (Double) param);
  33. } else if (param instanceof Long) {
  34. preStmt.setDouble(i, (Long) param);
  35. } else if (param instanceof Timestamp) {
  36. preStmt.setTimestamp(i, (Timestamp) param);
  37. } else if (param instanceof Boolean) {
  38. preStmt.setBoolean(i, (Boolean) param);
  39. } else if (param instanceof Date) {
  40. preStmt.setDate(i, (Date) param);
  41. }
  42. }
  43. }
  44. //执行 SQL,返回影响的行数 异常处理
  45. public static int executeUpdate(String sql) throws SQLException {
  46. return executeUpdate(sql, new Object[] {});
  47. }
  48. //带参数执行SQL,返回影响的行数 异常处理
  49. public static int executeUpdate(String sql, Object... params)
  50. throws SQLException {
  51. Connection conn = null;
  52. PreparedStatement preStmt = null;
  53. try {
  54. conn = getConnection();
  55. preStmt = conn.prepareStatement(sql);
  56. setParams(preStmt, params);
  57. return preStmt.executeUpdate(); //执行SQL操作
  58. } finally {
  59. if (preStmt != null)
  60. preStmt.close();
  61. if (conn != null)
  62. conn.close();
  63. }
  64. }
  65. }

       其中主要是调用getConnection(url, userName, password); 方法进行连接数据库操作,我数据库的名称为TestDAO,默认的连接对象为root,密码为123456。同时定义两个函数执行无参数的SQL语句操作和有参数的SQL语句操作。

       2.在src下新建文件夹bean,然后添加类Student.java。代码如下:


 
 
  1. package bean;
  2. public class Student {
  3. private Integer id; //学号
  4. private String name; //姓名
  5. private String password; //密码
  6. public Integer getId() { return id; }
  7. public String getName() { return name; }
  8. public String getPassword() { return password; }
  9. public void setId(Integer id) { this.id = id; }
  10. public void setName(String name) { this.name = name; }
  11. public void setPassword(String pwd) { this.password = pwd; }
  12. }

        该Student中的变量及类型与数据库中一一对应,在通过get和set方法获取和设置其值。同样如果你的数据库中有老师、学校表,你只需要在bean文件夹下添加Teacher.java和School.java即可。

        3.在src下新建文件夹DAO,然后添加类StudentDAO.java。代码如下:


 
 
  1. package DAO;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import bean.Student;
  8. import util.JDBCConnect;
  9. public class StudentDAO {
  10. //插入学生
  11. public static int insert(Student stu) throws Exception {
  12. String sql = "INSERT INTO student (stuid,username,password) VALUES (?,?,?) ";
  13. return JDBCConnect.executeUpdate(sql, stu.getId(),stu.getName(),stu.getPassword());
  14. }
  15. //更新学生姓名
  16. public static int update(Student stu) throws Exception {
  17. String sql = "UPDATE student SET stuid = ? WHERE username = ? ";
  18. return JDBCConnect.executeUpdate(sql,stu.getId(),stu.getName());
  19. }
  20. //删除操作
  21. public static int delete(Integer id) throws Exception {
  22. String sql = "DELETE FROM student WHERE stuid = ? ";
  23. return JDBCConnect.executeUpdate(sql, id);
  24. }
  25. //查找记录 某学号
  26. public static Student find(Integer id) throws Exception {
  27. String sql = "SELECT * FROM student WHERE stuid = ? ";
  28. Connection conn = null;
  29. PreparedStatement preStmt = null;
  30. ResultSet rs = null;
  31. try {
  32. //链接数据库执行SQL语句
  33. conn = JDBCConnect.getConnection(); //连接默认数据库
  34. preStmt = conn.prepareStatement(sql);
  35. preStmt.setInt( 1, id);
  36. rs = preStmt.executeQuery();
  37. //获取查询结果
  38. if (rs.next()) {
  39. Student student = new Student();
  40. student.setId(rs.getInt( "stuid"));
  41. student.setName(rs.getString( "username"));
  42. return student;
  43. } else {
  44. return null;
  45. }
  46. } finally { //依次关闭 记录集 声明 连接对象
  47. if (rs != null)
  48. rs.close();
  49. if (preStmt != null)
  50. preStmt.close();
  51. if (conn != null)
  52. conn.close();
  53. }
  54. }
  55. //查询所有学生信息
  56. public static List<Student> listStudents() throws Exception {
  57. List<Student> list = new ArrayList<Student>();
  58. String sql = "SELECT * FROM student";
  59. Connection conn = null;
  60. PreparedStatement preStmt = null;
  61. ResultSet rs = null;
  62. try {
  63. conn = JDBCConnect.getConnection();
  64. preStmt = conn.prepareStatement(sql);
  65. rs = preStmt.executeQuery();
  66. while (rs.next()) {
  67. //设置数据库中表参数 否则报错java.sql.SQLException: Column 'id' not found.
  68. Student student = new Student();
  69. student.setId(rs.getInt( "stuid"));
  70. student.setName(rs.getString( "username"));
  71. student.setPassword(rs.getString( "password"));
  72. list.add(student);
  73. }
  74. } finally {
  75. if (rs != null)
  76. rs.close();
  77. if (preStmt != null)
  78. preStmt.close();
  79. if (conn != null)
  80. conn.close();
  81. }
  82. return list;
  83. }
  84. }
        通常DAO(Data Access Object)数据访问对象是负责与数据库连接,主要功能执行对数据表的CUDR操作。
        C(Create)操作:创建记录,执行insert into语句;
        U(Update)操作:业务表中对应的属性进行更新操作,执行update语句;
        D(Delete)操作:将DTO对象对应的记录删除,执行delete语句;
        R(Read)操作:读取表中数据,可以返回多个记录列表对应DTO对象多个List容器。
        最初同学建议弄这个,不敢接触担心很复杂,但用完后才知道它并不需要导入如何jar包、配置web.xml或安装什么软件,只需通过DAO接口实现DAO对象的CUDR操作。
        每个数据表都定义一个DAO接口或类实现,实现对此表的读写操作。换句话说,就是在域名.项目.模块.dao文件夹下创建个DAO类即可。
        例如“package com.neusoft.dao;”

 

四. Jsp代码

        然后是WebRoot文件夹下的jsp代码。其中index.jsp如下:


 
 
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <base href="<%=basePath%>">
  10. <title>My JSP 'index.jsp' starting page </title>
  11. <meta http-equiv="pragma" content="no-cache">
  12. <meta http-equiv="cache-control" content="no-cache">
  13. <meta http-equiv="expires" content="0">
  14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  15. <meta http-equiv="description" content="This is my page">
  16. <!--
  17. <link rel="stylesheet" type="text/css" href="styles.css">
  18. -->
  19. </head>
  20. <body>
  21. This is my JSP page. <br>
  22. <A href="student.jsp">JDBC操作 </A>
  23. </body>
  24. </html>

        然后点击JDBC操作跳转到student.jsp操作,代码如下:涉及EL和JSTL。


 
 
  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <jsp:directive.page import="DAO.StudentDAO"/>
  4. <jsp:directive.page import="java.util.List"/>
  5. <%
  6. List studentList = StudentDAO.listStudents();
  7. request.setAttribute("studentList", studentList);
  8. %>
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  10. <html>
  11. <head>
  12. <title>My JSP 'student.jsp' starting page </title>
  13. <meta http-equiv="pragma" content="no-cache">
  14. <meta http-equiv="cache-control" content="no-cache">
  15. <meta http-equiv="expires" content="0">
  16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  17. <meta http-equiv="description" content="This is my page">
  18. <style type="text/css">
  19. body, td, th, input { font-size: 12px; text-align:center; }
  20. </style>
  21. </head>
  22. <body>
  23. <form action="operateStudent.jsp" method=get>
  24. <table bgcolor="#CCCCCC" cellspacing=1 cellpadding=5 width=100%>
  25. <tr bgcolor=#DDDDDD>
  26. <th>选择 </th>
  27. <th>学号 </th>
  28. <th>姓名 </th>
  29. <th>密码 </th>
  30. <th>操作 </th>
  31. </tr>
  32. <c:forEach items="${studentList}" var="stu">
  33. <tr bgcolor="#FFFFFF">
  34. <td> <input type="checkbox" name="id" value="${stu.id}" /> </td>
  35. <td>${stu.id} </td>
  36. <td>${stu.name} </td>
  37. <td>${stu.password} </td>
  38. <td>
  39. <a href="addEmployee.jsp?action=edit&id=${stu.id}">修改 </a>
  40. <a href="addEmployee.jsp?action=del&id=${stu.id}"
  41. onclick= "return confirm('确定删除?')">删除 </a>
  42. </td>
  43. </tr>
  44. </c:forEach>
  45. </table>
  46. </form>
  47. </body>
  48. </html>

        文章运行结果如下图所示:


        最后总结下,文章主要讲述了如何通过DAO和Java Bean实现Java数据库操作、界面显示分离的操作;同样的道理,实现修改、删除、插入方法类似,后面可能会讲述。该方法主要是通过上一篇自己的体会,找到的解决办法。最后希望文章对你有所帮助,如果有错误或不足之处,还请海涵~
        最重要的一个问题,在这过程中你可能会遇到以下两个错误:(困扰我4小时)
        Servlet.service() for servlet [jsp] in context with path 
        javax.el.PropertyNotFoundException: Property 'id' not found on type bean.Student
        其解决方案参考:http://blog.csdn.net/eastmount/article/details/45835481
       (By:Eastmount 2015-5-19 凌晨2点   http://blog.csdn.net/eastmount/
        

转载来源:https://blog.csdn.net/Eastmount/article/details/45833663

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生成绩管理系统是一种用于记录和管理学生的成绩信息的系统。使用JSP、MyEclipse和MySQL来开发这样的系统,能够方便地实现登录界面和增删查改功能。 首先,通过JSP(JavaServer Pages)来设计登录界面,可以使用HTML和JSP标签来创建一个用户友好的登录页面。用户可以输入用户名和密码,系统会验证用户的身份并允许合法用户登录。 接着,通过MyEclipse(一种基于Eclipse的Java集成开发环境)来实现学生成绩管理系统的功能。可以使用Java语言来编写后端程序,通过MySQL(一种关系型数据库)来存储学生成绩信息。通过在MyEclipse中创建JSP页面和Java类来实现增删查改的功能,可以让用户方便地管理学生成绩信息。 增加功能可以通过JSP页面设计一个表单,用户可以填写学生成绩信息并提交。后端Java程序接收表单数据,将数据插入到MySQL中的成绩表中,实现成绩信息的添加功能。 删除功能可以通过JSP页面设计一个列表展示学生成绩信息,用户可以选择要删除的成绩信息并点击删除按钮。后端Java程序接收删除请求,通过MySQL执行删除操作实现成绩信息的删除功能。 查询功能可以通过JSP页面设计一个搜索框和查询按钮,用户可以输入学生姓名或其他关键字进行查询。后端Java程序接收查询请求,通过MySQL查询相关成绩信息并返回给用户,实现成绩信息的查询功能。 修改功能可以通过JSP页面设计一个表单,用户可以选择要修改的成绩信息并填写新的成绩。后端Java程序接收表单数据,通过MySQL更新相应成绩信息,实现成绩信息的修改功能。 综合利用JSP、MyEclipse和MySQL的优势,能够轻松设计出一个方便实用的学生成绩管理系统,提高学生信息管理的效率和便利性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值