zoukankan      html  css  js  c++  java
  • javaweb连接数据库并完成增删改查

    一.连接数据库

    1、mysql数据库的安装和配置

      在网上找到了篇关于mysql的安装详细说明,供读者自己学习

      https://www.jb51.net/article/23876.htm

    2、mysql的基本操作

      找到了篇介绍MySQL的基本操作的文章,简单易懂,可以很快的学会

      http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#d22

    3、创建数据库表

      建议大家下载一些MySQL的可视化工具如SQLyog,navicat等相应的教程都可以在网上找到,就不在此和大家一一说明,在此以SQLyog为例。

      打开SQLyog软件,打开该软件后,会弹出以下画面,点击继续。

      

      进入链接配置界面,点击上方的New…按钮,输入链接名称创建一个链接

      

      

      之后在配置界面输入链接密码。此密码就是在安装mysql时设置的密码。

      

      

      输入密码后,点击连接,如果信息无误,则进入主界面。如下所示

      

      

      创建数据库,在左侧现实数据库的区域,点击右键,选择“创建数据库”

      

      

      输入数据库名称,字符编码选择UTF-8,然后点击创建,则在左侧现实出来了刚刚创建的数据库。

      

    4、下载数据库对应的jar包并导入

      在网上下载JDBC驱动然后导入,使用JDBC需要在工程中导入对应的jar包。数据库与JDBC包的对应关系可以参考各种数据库对应的jar包、驱动类名和URL格式。在Eclipse下的导入方法:

      在工程的图标上右击,选择”Properties”,在”Java Bulid Path”中选择”Add External JARs…”,选择下载并解压后获得的jar包。
      

         如果对MySQL进行操作,这时下面的import就不会报错了:

       

    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.PreparedStatement;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    以上三句导入语句可用import java.sql.*代替

    二.实现增删改查

     1、准备工作

      1:test01文件夹(里面有所需的页面资源),我完成的是在里面添加增删改查操作

         2:myeclipse(版本没什么要求)  eclipse也行 

         3:数据库 MySQL

         4:需要了解到的知识点:

                                            servlet

                                            EL与JSTL表达式

                                          项目的基本框架搭建(javaweb经典三层框架)

         5:在myeclipse中建立对应的包结构

          

    2、项目的基本框架搭建

     所谓三层框架分别为表述层(WEB层)、业务逻辑层()、数据访问层()。

        web层(action):包含JSP和Servlet等与web相关的内容,负责与浏览器的响应和请求;

        业务层(service):只关心业务逻辑;

        数据层(dao):封装了对数据库的访问细节,数据操作类;
        关系:web层依赖业务层    业务层依赖数据层(这个关系很重要)

    ps:除了以上三层框架是我们在写一个javaweb项目必须的外,还需要一个实体类(entity)。

    3、实现数据库的连接

      需要在MySQL中创建所需数据库,并将表建好。

      

      

      在dao下新建一个DBConn类用来处理对数据进行连接。 这是MySQL的连接方式

       

    package dao;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DBUtil {
        //eshop为数据库名称,db_user为数据库用户名db_password为数据库密码
        public static String db_url = "jdbc:mysql://localhost:3306/eshop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT";
        public static String db_user = "数据库用户名";
        public static String db_password = "数据库密码";
    
        public static Connection getConn() {
            Connection conn = null;
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                conn = DriverManager.getConnection(db_url, db_user, db_password);
                System.out.println("连接成功");
            } catch (Exception e) {
                System.out.println("连接失败");
                e.printStackTrace();
            }
            return conn;
        }
        
        public static void close(Statement state, Connection conn) {
            if(state!=null) {
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();    
                }
            }    
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        
        public static void close(ResultSet rs, Statement state, Connection conn) {
            if(rs!=null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(state!=null) {
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    4、建立实体类

     在entity包下创建School实体类(实体类中的对象对应数据库表中的字段数据)

    package entity;
    
    public class School{
        private String classname;
        private String classteacher;
        private String classplace;
        
        public String getclassname() {
            return classname;
        }
        public void setclassname(String classname) {
            this.classname=classname;
        }
        
        public String getclassteacher() {
            return classteacher;
        }
        public void setclassteacher(String classteacher) {
            this.classteacher=classteacher;
        }
        
        public String getclassplace() {
            return classplace;
        }
        public void setclassplace(String classplace) {
            this.classplace=classplace;
        }
    }

    5、实现增删改查方法

    创建方法类,这里有两种方法

    1:在dao包中创建一个SchoolDao接口,里面写增删改查的方法,再在dao中创建SchoolDaoImpl类来实现接口,并实现之中的方法。

    SchoolDao接口:

    package dao;
    
    import java.util.List;
    
    import entity.School;
    
    public interface SchoolDao {
        public boolean add(School school) ;
        public List<School>select();
        public boolean update(String classname,String classteacher,String classplace);
        public boolean delete(String classname);
        public List<School>selectclassname(String classname);
    
    }

    SchoolDaoImpl类(包含增删改查操作):

    package dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    import entity.School;
    
    public class SchoolDaoImpl implements SchoolDao{
        Connection conn=(Connection)DBUtil.getConn();
        @Override
    public boolean add(School school) {
        
        boolean flag=false;
        
        try {
            String sql="insert into school values('"+school.getclassname()+"','"+school.getclassteacher()+"','"+school.getclassplace()+"')";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            int i = pstmt.executeUpdate();
            pstmt.close();
            conn.close();
            if(i>0) {
                flag = true;
            }
    
        }catch(SQLException e) {
            e.printStackTrace();
        }
        return flag;    
    }
        @Override
    public List<School> select(){
        List<School> list = new ArrayList<School>();
        try {
            String sql="select * from school";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()) {
                School school=new School();
                school.setclassname(rs.getString("classname"));
                school.setclassteacher(rs.getString("classteacher"));
                school.setclassplace(rs.getString("classplace"));
                list.add(school);
            }
            rs.close();
            pstmt.close();
            conn.close();
    
        }catch(SQLException e) {
            e.printStackTrace();
        }
        
        return list;
    }
        @Override
    public List<School>selectclassname(String classname){
        List<School> list = new ArrayList<School>();
        try {
            String sql="select * from school where classname=?";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,classname );
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()) {
                School school=new School();
                school.setclassname(rs.getString("classname"));
                school.setclassteacher(rs.getString("classteacher"));
                school.setclassplace(rs.getString("classplace"));
                list.add(school);
            }
            rs.close();
            pstmt.close();
            conn.close();
        }catch(SQLException e) {
            e.printStackTrace();
        }
        return list;
        
    }
    
    
    
        @Override
    public boolean delete(String classname) {
    boolean flag=false;
    try {
        String sql="delete from school where classname='"+classname+"'";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        int i = pstmt.executeUpdate();
        pstmt.close();
        conn.close();
        if(i>0) flag = true;
    }catch(SQLException e) {
        System.out.println("删除失败");    
        e.printStackTrace();
    }
    
    return flag;
    
    }
        public boolean update(String classname,String classteacher,String classplace) {
            
                boolean flag=false;
                try {
                    String sql="update school set classteacher='"+classteacher+"',classplace='"+classplace+"' where classname='"+classname+"'";
                    PreparedStatement pstmt = conn.prepareStatement(sql);
                    int i = pstmt.executeUpdate();
                    pstmt.close();
                    conn.close();
                    if(i>0)flag = true;
                }catch(SQLException e) {
                    e.printStackTrace();
                }
    
                return flag;
                
        }
    
    }

    2:在service包中创建StudentService类,在dao包中创建StudentDao类来实现StudentService类中的方法。(具体操作以后更新)

    6、实现servelet和对应jsp页面

    Servlet有两种方式创建,一种手工创建。另一种程序自动生成。前者自己创建java类,实现Servlet具体内容,然后需要去WEB_INF下的web.xml去配置servlet  . 而后者则直接由程序替我们配置好了Servlet

    1:增

      创建SchoolAddServlet

      

    package SchoolAddServlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import dao.SchoolDao;
    import dao.SchoolDaoImpl;
    import entity.School;
    
    
    @WebServlet("/SchoolAddServlet")
    public class SchoolAddServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
         
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            
            String classname=request.getParameter("classname");
            String classteacher=request.getParameter("classteacher");
            String classplace=request.getParameter("classplace");
            School Subject =new School();
            Subject.setclassname(classname);
            Subject.setclassteacher(classteacher);
            Subject.setclassplace(classplace);
            
            SchoolDao sd = new SchoolDaoImpl();
            try{
                sd.add(Subject);
                response.sendRedirect(request.getContextPath() + "/school.jsp");
    
            }catch(Exception e){
                System.out.println("添加失败");
                e.printStackTrace();
            }
            
        }
    
    
    }

      schooladd.jsp页面部分

      

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <div id="addSubjectForm" align="center">
    <form action="SchoolAddServlet" method="post">
    <tr>
        <td>课程名称:</td>
        <td><input type="text" name="classname" size="20"></td>
        </tr>
        <tr>
        <td>任课老师:</td>
        <td><input type="text" name="classteacher" size="20"></td>
        </tr>
        <tr>
        <td>上课地点:</td>
        <td><input type="text" name="classplace" size="20"></td>
        </tr>
    <tr>
                          <td colspan="2"><div align="center">
                            <input type="submit" value="录入">    
                        </div>
                    </td>
                      </tr>
                      </form>
                      </div>
                      
    </body>
    </html>
    action=“SchoolAddServlet”为SubjectAddServlet在web.xml中的URL目录,即在Servlet中的主类名称
    当在servlet中完成的操作需要获取页面表单等的数据时,需要在页面中指向对应的servlet。

    2、删

      创建SchoolDeleteServlet类

      

    package SchoolDeleteServlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import dao.SchoolDao;
    import dao.SchoolDaoImpl;
    import entity.School;
    
    
    @WebServlet("/SchoolDelete")
    public class SchoolDelete extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
     
        
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            
            String classname = request.getParameter("classname");
            /*String classteacher=request.getParameter("classteacher");
            String classplace=request.getParameter("classplace");*/
            School school=new School();
            school.setclassname(classname);
            /*school.setclassteacher(classteacher);
            school.setclassplace(classplace);
            */
            SchoolDao sd = new SchoolDaoImpl();
            try {
                sd.delete(classname);
                response.sendRedirect(request.getContextPath() + "/school.jsp");
            }catch(Exception e) {
                System.out.println("删除失败");
                e.printStackTrace();
            }
    
    }
    }

      schooldelete.jsp页面

      

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <div id="addSubjectForm" align="center">
    <form action="SchoolDelete" method="post">
    <tr>
        <td>课程名称:</td>
        <td><input type="text" name="classname" size="20"></td>
        </tr>
        <tr>
        <td>任课老师:</td>
        <td><input type="text" name="classteacher" size="20"></td>
        </tr>
        <tr>
        <td>上课地点:</td>
        <td><input type="text" name="classplace" size="20"></td>
        </tr>
    <tr>
                          <td colspan="2"><div align="center">
                            <input type="submit" value="删除">    
                        </div>
                    </td>
                      </tr>
                      </form>
                      </div>
    </body>
    </html>

    3、改

      创建SchoolUpdate

      

    package SchoolUpdate;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import dao.SchoolDao;
    import dao.SchoolDaoImpl;
    import entity.School;
    
    
    @WebServlet("/SchoolUpdate")
    public class SchoolUpdate extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            String classname=request.getParameter("classname");
            String classteacher=request.getParameter("classteacher");
            String classplace=request.getParameter("classplace");
            
            
            SchoolDao sd = new SchoolDaoImpl();
            try{
                sd.update(classname,classteacher,classplace);
                response.sendRedirect(request.getContextPath() + "/school.jsp");
    
            }catch(Exception e){
                System.out.println("更新失败");
                e.printStackTrace();
            }
            
        }
    
    }

      schoolupdate.jsp页面

      

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <div id="addSubjectForm" align="center">
    <form action="SchoolUpdate" method="post">
    <tr>
        <td>课程名称:</td>
        <td><input type="text" name="classname" size="20"></td>
        </tr>
        <tr>
        <td>任课老师:</td>
        <td><input type="text" name="classteacher" size="20"></td>
        </tr>
        <tr>
        <td>上课地点:</td>
        <td><input type="text" name="classplace" size="20"></td>
        </tr>
    <tr>
                          <td colspan="2"><div align="center">
                            <input type="submit" value="更改">    
                        </div>
                    </td>
                      </tr>
                      </form>
                      </div>
    </body>
    </html>

    4、查

      这里需要完成两个查询(查询返回列表;查询返回列表详细)

      查询返回列表:

      SchoolSelect类

      

    package SchoolSelect;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import dao.SchoolDao;
    import dao.SchoolDaoImpl;
    import entity.School;
    
    
    @WebServlet("/SchoolSelect")
    public class SchoolSelect extends HttpServlet {
        private static final long serialVersionUID = 1L;
      
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
    
            SchoolDao sd = new SchoolDaoImpl();
            List<School> list = sd.select();
            request.setAttribute("list", list);
            request.getRequestDispatcher("/schoolselect.jsp").forward(request, response);
    
        
            
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    
    }

    注意:当不需要页面的参数时,页面由servlet引出

    转发(request.getRequestDispatcher().forward();)和重定向(response.sendRedirect();)区别:

    (1).重定向的执行过程:Web服务器向浏览器发送一个http响应--》浏览器接受此响应后再发送一个新的http请求到服务器--》服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意URL,不能共享request范围内的数据。
    (2).重定向是在客户端发挥作用,通过新的地址实现页面转向。
    (3).重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。
    (4).转发过程:Web服务器调用内部方法在容器内部完成请求和转发动作--》将目标资源发送给浏览器,它只能在同一个Web应用中使用,可以共享request范围内的数据。
    (5).转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递。
    (6).转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

      

      schoolselect.jsp页面

      

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <
    <div id="manageSubject" align="center"><!--查看试题-->
                <table width="95%" cellspacing="10">
                      <tr align="center">
                        <td>课程名称</td>
                        <td><input type="text" name="classname" size="20"></td>
                        <td>任课老师</td>
                        <td><input type="text" name="classname" size="20"></td>
                        <td>上课地点</td>
                        <td><input type="text" name="classname" size="20"></td>
                             </tr>
                      
                           
                          
                        <c:forEach var="u" items="${list }">
                            <tr align="center">
                                <td>${u.classname}</td>
                                <td><a href="SchoolSelectclassname?subjectID=${u.classname }">查看</a></td>
                            </tr>
                        </c:forEach>
                     
                </table>
            </div>
    
    </body>
    </html>

    注意:

    这里的顺序是,先访问的是SubjectListServlet,在转发到此页面,此页面的查看和删除又通过对应的servlet来实现对应的功能。

      查询返回列表详细:

      创建Schoolselectclassname

      

    package SchoolSelect;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import dao.SchoolDao;
    import dao.SchoolDaoImpl;
    import entity.School;
    
    /**
     * Servlet implementation class SchoolSelectclassname
     */
    @WebServlet("/SchoolSelectclassname")
    public class SchoolSelectclassname extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            
            SchoolDao sd = new SchoolDaoImpl();
            List<School> list = sd.selectclassname(request.getParameter("classname"));
            request.setAttribute("list", list);
            request.getRequestDispatcher("/schoolshow.jsp").forward(request, response);
    
    
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
            
        }
    
    
    }

    注意:

    这个查询方法需要通过限制条件classname来查询,不然显示出来的是所有的数据

      schoolshow.jsp页面

      

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <div id="schoolshow" align="center"><!--显示试题-->
                <table border="0" cellspacing="10" cellpadding="0">
                      <c:forEach var="u" items="${list }">
                      <tr>
                        <td>课程名称:</td>
                        <td>${u.classname }</td>
                    </tr>
                      <tr>
                        <td>任课老师:</td>
                        <td>${u.classteacher }</td>
                      </tr>
                      <tr>
                        <td>上课地点:</td>
                        <td>${u.classplace }</td>
                      </tr>
                       
                      </c:forEach>
                </table>
                </div>
    
    </body>
    </html>

    注意:

    页面同样运用的是EL和jstl表达式

    school.jsp主页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <div id="addSubjectForm" align="center">
                    <form action="SubjectAddServlet" method="post">
                    <tr>
                    <td>课程基本信息管理系统 </td></tr>
                    <ul>
                    <li><a href="http://localhost:8080/School/schooladd.jsp">课程信息录入 </a></li>
                    <li><a href="http://localhost:8080/School/schoolupdate.jsp">课程信息修改  </a></li>
                    <li><a href="http://localhost:8080/School/schooldelete.jsp">删除课程信息  </a></li>
                    <li><a href="http://localhost:8080/School/schoolselect.jsp">查询课程信息  </a></li>
                    </ul>
                    </form>
    </body>
    </html>

      

      

  • 相关阅读:
    LinkedHashMap、HashMap和TreeMap的比较使用
    RocketMQ之Namesrv
    mysql创建、删除、查看索引
    java8 JVM堆内存(heap) 新生代 老年代 元空间垃圾回收详解
    Java中GCRoots包括哪些
    单例模式双重校验锁
    内存屏障
    LockSupport的用法及原理
    HashSet,TreeSet和LinkedHashSet的区别
    Windows常用网络命令技巧汇总
  • 原文地址:https://www.cnblogs.com/quyangzhangsiyuan/p/10090502.html
Copyright © 2011-2022 走看看