• Java Web初试连接数据库完成学生信息录入


      题目要求:1登录账号:要求由6到12位字母、数字、下划线组成,只有字母可以开头;2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母、数字组成;3性别:要求用单选框或下拉框实现,选项只有“男”或“女”;4学号:要求八位数字组成,前四位为“2018”开头,输入自己学号;5 姓名:输入自己的姓名6 电子邮箱:要求判断正确格式xxxx@xxxx.xxxx7 点击“添加”按钮,将学生个人信息存储到数据库中;8 可以演示连接上数据库。

      思路:连接数据库;JSP设置网页(由于要求不高,设计不是很精致);判定格式,提示错误信息;信息导入数据库

      代码如下:

      package util        DBUtil.java

     1 package util;
     2 
     3 
     4 import java.sql.Connection;
     5 import java.sql.DriverManager;
     6 import java.sql.ResultSet;
     7 import java.sql.SQLException;
     8 import java.sql.Statement;
     9 
    10 
    11 
    12 public class DBUtil {
    13     //useSSL=false:避免连接时出现SSL问题
    14     public static String db_url = "jdbc:mysql://localhost:3306/exam?useSSL=false";
    15     public static String db_user = "root";//用户名
    16     public static String db_pass = "Inazuma";//密码
    17     
    18     public static Connection getConn () {
    19         Connection conn = null;
    20         
    21         try {
    22             Class.forName("com.mysql.jdbc.Driver");//加载JDBC驱动
    23             conn = DriverManager.getConnection(db_url, db_user, db_pass);
    24         } catch (Exception e) {
    25             e.printStackTrace();
    26         }
    27         
    28         return conn;
    29     }
    30     
    31     //关闭Connection和Statement对象
    32     public static void close (Statement state, Connection conn) {
    33         if (state != null) {
    34             try {
    35                 state.close();
    36             } catch (SQLException e) {
    37                 e.printStackTrace();
    38             }
    39         }
    40         
    41         if (conn != null) {
    42             try {
    43                 conn.close();
    44             } catch (SQLException e) {
    45                 e.printStackTrace();
    46             }
    47         }
    48     }
    49     //若调用ResultSet对象,执行下段close方法
    50     public static void close (ResultSet rs, Statement state, Connection conn) {
    51         if (rs != null) {
    52             try {
    53                 rs.close();
    54             } catch (SQLException e) {
    55                 e.printStackTrace();
    56             }
    57         }
    58         
    59         if (state != null) {
    60             try {
    61                 state.close();
    62             } catch (SQLException e) {
    63                 e.printStackTrace();
    64             }
    65         }
    66         
    67         if (conn != null) {
    68             try {
    69                 conn.close();
    70             } catch (SQLException e) {
    71                 e.printStackTrace();
    72             }
    73         }
    74     }
    75     
    76     
    77 }

    此段代码为JDBC驱动程序,用于连接数据库。

      package Servlet          ExamServlet.java

     1 package Servlet;
     2 import java.io.IOException;
     3 
     4 import javax.servlet.ServletException;
     5 import javax.servlet.annotation.WebServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 import javax.servlet.http.HttpServlet;
     9 
    10 
    11 import Dao.ExamDao;
    12 
    13 @WebServlet("/ExamServlet")
    14 public class ExamServlet  extends HttpServlet{
    15     private static final long serialVersionUID = 1L;
    16     ExamDao Dao=new ExamDao();
    17 
    18     //resp:HTTP协议
    19     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    20         req.setCharacterEncoding("utf-8");
    21         //获取网页中action里method参数
    22         String method = req.getParameter("method");
    23         //若相同执行其方法
    24         if ("add".equals(method)) {
    25             add(req, resp);
    26         }
    27     }
    28     //向数据库写入信息
    29     private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
    30         req.setCharacterEncoding("utf-8");
    31         String ZH=req.getParameter("username");
    32         String MM=req.getParameter("password");
    33         String XB=req.getParameter("sex");
    34         String XM=req.getParameter("pname");
    35         String XH=req.getParameter("number");
    36         String YX=req.getParameter("address");
    37         String XX=req.getParameter("school");
    38         String XI=req.getParameter("xi");
    39         String BJ=req.getParameter("class");
    40         String NF=req.getParameter("year");
    41         String SYD=req.getParameter("home");
    42         String BZ=req.getParameter("bz");
    43         int i = Dao.Judge(ZH, MM, XH, YX);  //给i赋值,若出现错误则用其判定执行的错误语句
    44         
    45         //执行成功
    46         if(Dao.add(ZH, MM, XB, XM, XH, YX, XX,XI,BJ,NF,SYD,BZ)) {
    47             req.setAttribute("message", "添加成功");
    48             req.getRequestDispatcher("Test.jsp").forward(req,resp);
    49         }
    50         //执行失败
    51         else {
    52             //用户名错误
    53             if(i == 1) {
    54                 req.setAttribute("message", "用户名错误");
    55             }
    56             //密码错误
    57             else if(i == 2) {
    58                 req.setAttribute("message", "密码错误");
    59             }
    60             //学号错误
    61             else if(i == 3) {
    62                 req.setAttribute("message", "学号错误");
    63             }
    64             //邮箱格式错误
    65             else if(i == 4) {
    66                 req.setAttribute("message", "邮箱格式错误");
    67             }
    68             //向jsp文件中传值
    69             req.getRequestDispatcher("Test.jsp").forward(req,resp);
    70         }
    71     }
    72 }

     此代码用于读取jsp制作的网页中,文本框输入的信息,并将其传给ExamDao类,实现对数据库的增加数据操作,同时向jsp文件传递req,resp,决定输出的提示信息。

      package Dao          ExamDao.java

      1 package Dao;
      2 
      3 import java.sql.Connection; 
      4 import java.sql.Statement;
      5 //调用DBUtil初始化Connection和Statement对象
      6 import util.DBUtil;
      7 public class ExamDao {
      8     public boolean add(String ZH,String MM,String XB,String XM,String XH,String YX,String XX,String XI,String BJ,String NF,String SYD,String BZ) {
      9         //insert into 后接表名,表名(表中头名)values后输入数据,数据见上方代码,其中String类等数据从Servlet传来。
     10         String sql="insert into student(username,password,sex,pname,number,address,school,xi,class,year,home,bz)"
     11                 + "values('"+ZH+"','"+MM+"','"+XB+"','"+XM+"','"+XH+"','"+YX+"','"+XX+"','"+XI+"','"+BJ+"','"+NF+"','"+SYD+"','"+BZ+"')";
     12         Connection conn = DBUtil.getConn();
     13         //驱动连接
     14         Statement state = null;
     15         boolean f=false;
     16         int a = 0;
     17         int temp = 0;
     18         ExamDao n= new ExamDao();
     19         
     20         try {
     21             temp = n.Judge(ZH, MM, XH, YX);
     22             if(temp == 0) {
     23                 state = conn.createStatement();
     24                 //每执行一条语句,a++
     25                 //executeUpdate:返回int,表示多少眺语句受到了影响
     26                 a=state.executeUpdate(sql);
     27             }
     28             else
     29                 a = 0;
     30         } catch (Exception e) {
     31             e.printStackTrace();
     32         } finally {
     33             DBUtil.close(state, conn);
     34         }
     35         
     36         if (a > 0) {
     37             //返回为真
     38             f = true;
     39         }
     40         //返回为假
     41         return f;
     42         
     43     }
     44     //根据题目要求判定格式
     45     public int Judge(String ZH,String MM,String XH, String YX) {
     46         //用户名格式:首元素为字母;长度6-12位;由字母,下划线,数字构成
     47         if(ZH!=null) {
     48             //正则表达式:字母,下划线,数字
     49             String rz = "^\\w+$";
     50             int s1 = ZH.length();
     51             String c = ZH.substring(0, 1);
     52             String nc = c.toLowerCase();
     53             char c1 = nc.charAt(0);
     54             //出错返回为1
     55             if(s1<6||s1>12) {
     56                 return 1;
     57             }
     58             else if(c1<'a'||c1>'z') {
     59                 return 1;
     60             }
     61             else if(!ZH.matches(rz)) {
     62                 return 1;
     63             }
     64         }
     65         //密码格式:不小于八位,由数字或字母组成
     66         if(MM!=null) {
     67             //正则表达式:字母,数字
     68             String rm = "^[a-z0-9A-Z]+$";
     69             int s2 = MM.length();
     70             //出错返回为2
     71             if(s2<8) {
     72                 return 2;
     73             }
     74             else if(!MM.matches(rm)) {
     75                 return 2;
     76             }
     77         }
     78         //学号格式:固定八位,全数字,前四位必须为“2018”
     79         if(XH!=null) {
     80             int s3 = XH.length();
     81             //出错返回3
     82             if(s3<8) {
     83                 return 3;
     84             }
     85             else {
     86                 //数字串的正则表达式
     87                 String rx = "[0-9]*";
     88                 String x = XH.substring(0,4);
     89                 boolean y = x.equals("2018");
     90                 if(s3!=8||!y) {
     91                     return 3;
     92                 }
     93                 else if(!XH.matches(rx)) {
     94                     return 3;
     95                 }
     96             }
     97         }
     98         //邮箱:标准格式
     99         if(YX!=null) {
    100             //邮箱格式的正则表达式
    101             String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
    102             //出错返回4
    103             if(!YX.matches(regex)) {
    104                 return 4;
    105             }
    106         }
    107         return 0;
    108     }
    109 }

    此代码用于执行增加数据操作,同时判断输入格式,返回不同的值,在ExamServlet文件中用i记录返回值,并以此判断是否能成功执行,以及错误时的提示错误信息。

      Test.jsp

     1 <!--UTF-8:避免中文变成乱码  -->
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <!DOCTYPE html>
     5 <html>
     6 <head>
     7 <meta charset="UTF-8">
     8 <title>添加学生信息</title>
     9 <!-- 设置格式:右对齐 -->
    10 <style>
    11         .a{
    12             width: 300px;
    13             height: 30px;
    14              
    15         }
    16         #b{
    17             width: 500px;
    18             border: 1px solid red;
    19             text-align: right;
    20         }
    21     </style>
    22 </head>
    23 <body>
    24 <!-- 文本及文本框 -->
    25 <div id="b">
    26 <form action="ExamServlet?method=add"  method="post" >
    27 登录账号:<input type="text"name="username"><br>
    28 登录密码:<input type="password"name="password"><br>
    29 性别:<select name="sex">
    30 <option value="男"></option>
    31 <option value="女"></option>
    32 </select><br>
    33 姓名:<input type="text"name="pname"><br>
    34 学号:<input type="text"name="number"><br>
    35 电子邮件:<input type="text"name="address"><br>
    36 所在学校:<input type="text"name="school"><br>
    37 所在系:<input type="text"name="xi"><br>
    38 所在班级:<input type="text"name="class"><br>
    39 入学年份(届):<input type="text"name="year"><br>
    40 生源地:<input type="text"name="home"><br>
    41 备注:<input type="text"name="bz"><br>
    42 <button type="submit">添加</button>
    43 </form>
    44 </div>
    45 </body>
    46 <!-- 输出提示信息 -->
    47 <%
    48          Object message = request.getAttribute("message");
    49          if(message!=null && !"".equals(message)){
    50      
    51     %>
    52          <script type="text/javascript">
    53               alert("<%=request.getAttribute("message")%>");
    54          </script>
    55     <%} %>
    56 </html>

    此代码用于形成网页。

    预览

    信息提示:

    数据库信息(含第一次添加成功的信息)应用软件:Navicat for MySQL

    错误反省:1.创建项目时,导入jar包过程中出现操作失误,导致创建好的项目没有成功连接数据库

         2.根据情况返回错误信息:由于我的代码是把提示信息写入ExamServlet文件,再传值,所以需要在Servlet文件中就要确定要传值形式,一开始用i作为标准写if语句,以防万一我将ExamDao中Judge方法复制了过去,所有return语句改为对i的赋值语句,但我并没有考虑到默认值为null的情况,示范的时候为了节省时间,是不会把所有信息都填上的,这就导致了有些为了取子串而定义的String类对象出现异常,同时导致了ExamDao中Judge方法出现错误,最后执行失败。经过多次尝试后,在对要求的信息格式进行判断之前,会先判定该值是否为空,为了使代码看着更加简洁,我在ExamServlet文件中导入Dao包,初始化ExamDao对象后调用Judge方法将返回值赋给i,问题解决。

  • 相关阅读:
    基于session做的权限控制
    spring有关jar包的作用
    Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法
    Android Handler机制(四)---Handler源码解析
    System.currentTimeMillis()与SystemClock.uptimeMillis()
    【转】博客美化(6)为你的博文自动添加目录
    Android Handler机制(三)----Looper源码解析
    Android Handler机制(二)---MessageQueue源码解析
    Android Handler机制(一)---Message源码分析
    关于Android Force Close 出现的原因 以及解决方法
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/11715994.html
Copyright © 2020-2023  润新知