jtahstu的博客

root@jtahstu.com   Github   英文博客  

最新碎语:以后没事写写小的知识点吧

您的位置:jtahstu的博客 >笔记> 大三下软件项目开发实训第六天 - JDBC再封装和Servlet

大三下软件项目开发实训第六天 - JDBC再封装和Servlet

一、JDBC再封装

JDBC笔记

物流管理系统
姓名:汤晓春
目标:物流管理系统
           jdbc,servlet
=================jdbc封装===========
问题1:就是rs不能够遍历订单信息
问题2:query方法和update方法中的代码重复。
目标:让query方法可以实现,用户使用任何一           张表都能够遍历。
         query方法以后会作为,通用的查询方法。
1、如何解决上述问题?
     原则:重构---在原来的基础之上,根据用户的需求将物体完善。
                抽象出共同的部分------方法
                抽象出不同的部分------参数
               pulic int add(int a,int b){//形参,1,2,---实参
                  //猴子:人在看到猴子的时候,肯定是具体的猴子---铁丝猴
                }
              相加:共同部分
              参数:int a,int b
 抽象出一个通用的增删改方法---update(sql);
2、query方法和update方法的区别?
     query方法有返回值,update方法没有返回值。
     query方法对数据本身不具备破坏性,而update方法具备破坏性。
案例:
需求:买家用电器
步骤:
       去国美买
       挑选产品
       买
       使用---电饭煲煮饭,空调制冷,微波炉加热===每个电器共同部分在query中执行,不同分部分在每个电器自身中执行吧。
       断电
query中情况:
   while(rs.next()){}       
问题1:就是rs不能够遍历订单信息
解决方案:利用继承中的方法重写。
问题3:集合不通用----解决方案----------使用泛型
            案例:看猴子------金丝猴,铁丝猴
            =====具体(对象)的东西抽象---不具体
(类)
           List<猴子> list=new ArrayList<猴子>();
      注意了:程序中的猴子就是泛型。具体-----泛化----一般(泛型)
         List<E> list=new ArrayList<E>();
        E的注意点:第一:在使用到E之前,必须让E具体化。
                            泛型也是类型(int,float)---你给什么,他就是什么?
总结:update(String sql){}
query(String sql){}
问题1:集合不同用-----泛型
        List<E>list=new ArrayList<E>;
问题2:rs不通用。
             利用继承中的方法重写功能。将rs放在对象独有的dao,子dao。

UserInfo.java

/**
 * Project Name: Java
 * Package Name: com.train.bean
 * File Name: UserInfo.java
 * Created on: 2016年5月30日 下午2:40:55
 * Author: jtahstu  Email:root@jtahstu.com
 * Copyright (c) 2016, www.jtahstu.com , All Rights Reserved.
 */
package com.train.bean;
public class UserInfo {
 private String xue;
 private String name;
 private String sex;
 private String ban;
 public String getXue() {
  return xue;
 }
 public void setXue(String xue) {
  this.xue = xue;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public String getBan() {
  return ban;
 }
 public void setBan(String ban) {
  this.ban = ban;
 }
 public UserInfo(String xue, String name, String sex, String ban) {
  super();
  this.xue = xue;
  this.name = name;
  this.sex = sex;
  this.ban = ban;
 }
 public UserInfo() {
  super();
  // TODO Auto-generated constructor stub
 }
}

BaseDAO.java

/**
 * Project Name: Java
 * Package Name: com.train.dao
 * File Name: BaseDAO.java
 * Created on: 2016年5月30日 下午2:44:43
 * Author: jtahstu  Email:root@jtahstu.com
 * Copyright (c) 2016, www.jtahstu.com , All Rights Reserved.
 */
package com.train.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class BaseDAO<E> {
 private static final String DRIVER = "com.mysql.jdbc.Driver";
 private static final String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
 private static final String USER = "jtahstu";
 private static final String PWD = "jtahstu";
 private Connection conn = null;
 private Statement stat = null;
 public ResultSet rs = null;
 static {
  try {
   Class.forName(DRIVER);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public void getConn() {
  try {
   conn = DriverManager.getConnection(URL, USER, PWD);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public void getStat() {
  try {
   stat = conn.createStatement();
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
 }
 public void getClose() {
  try {
   if (stat != null) {
    stat.close();
    stat = null;
   }
   if (conn != null) {
    conn.close();
    conn = null;
   }
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
 }
 public void rs2list(List<E> list) {
 }
 public void update(String sql) {
  getConn();
  getStat();
  try {
   stat.executeUpdate(sql);
   System.out.println("更新语句执行成功");
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
 }
 public List<E> query(String sql) {
  List<E> list = new ArrayList<E>();
  getConn();
  getStat();
  try {
   rs = stat.executeQuery(sql);
   rs2list(list);
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
  return list;
 }
}

UserInfoDAO.java

/**
 * Project Name: Java
 * Package Name: com.train.dao
 * File Name: UserInfoDAO.java
 * Created on: 2016年5月30日 下午3:02:52
 * Author: jtahstu  Email:root@jtahstu.com
 * Copyright (c) 2016, www.jtahstu.com , All Rights Reserved.
 */
package com.train.dao;
import java.sql.SQLException;
import java.util.List;
import com.train.bean.UserInfo;
public class UserInfoDAO extends BaseDAO<UserInfo> {
 public List<UserInfo> redUserInfo(String sql) {
  return super.query(sql);
 }
 public void delUserInfo(String id) {
  String sql = "delete from userinfo where 学号='" + id + "'";
  super.update(sql);
 }
 public void insertUserInfo(UserInfo user) {
  String sql = "insert into stulist(学号,姓名,性别,行政班) values('"
    + user.getXue() + "','" + user.getName() + "','"
    + user.getSex() + "','" + user.getBan() + "'";
  super.update(sql);
 }
 public void updUserInfo(UserInfo user) {
  String sql = "update stulist set 姓名='" + user.getName() + "',性别='"
    + user.getSex() + "',行政班='" + user.getBan() + "' where 学号='"
    + user.getXue() + "'";
  super.update(sql);
 }
 public void rs2list(List<UserInfo> list) {
  try {
   while (rs.next()) {
    String xue = rs.getString("学号");
    String name = rs.getString("姓名");
    String sex = rs.getString("性别");
    String ban = rs.getString("行政班");
    UserInfo user = new UserInfo(xue, name, sex, ban);
    list.add(user);
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

DAOTest.java

/**
 * Project Name: Java
 * Package Name: com.train.test
 * File Name: DAOTest.java
 * Created on: 2016年5月30日 下午3:15:45
 * Author: jtahstu  Email:root@jtahstu.com
 * Copyright (c) 2016, www.jtahstu.com , All Rights Reserved.
 */
package com.train.test;
import java.util.List;
import com.train.bean.UserInfo;
import com.train.dao.UserInfoDAO;
public class DAOTest {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String sql = "select * from stulist where 行政班 like '计算机13_'";
  List<UserInfo> list = new UserInfoDAO().redUserInfo(sql);
  for (int i = 0; i < list.size(); i++) {
   System.out.println(list.get(i).getXue() + "\t"
     + list.get(i).getName());
  }
 }
}

二、Servlet

笔记

回顾:
   jdbc再次封装。
   原则:重构的原则:抽象出共同的部分------方法
                     抽象出不同的部分-----参数
public void query(String sql){
List<UserInfo> list=new ArrayList<UserInfo>();
//加载驱动
Class.forName();
//连接数据库
Connection conn=DriverManager.getConnection(url,username,userpwd);
//创建命令执行对象
Statement stmt=conn.createStatement();
//执行命令
query中有rs返回
while(rs.next()){
}
update中没有rs返回。
//释放资源
if(conn!=null){
  conn.close();
  conn=null;
}
}
问题1:rs不通用
解决方案:创建子类继承父类,方法重写的特性。
问题2:list不通用。
解决方案:引入了泛型。
          泛化过程,猴子(抽象,泛型)---泛化---金丝猴(具体)
getConn();getStmt();closeRec();static{}
public List<E> query(String sql){
 getConn();
 getStmt();
 ResultSet rs=stmt.exequery(sql);
 rs2list();
 closeRec();
}
public void rs2list(List<E> list){
}
public class UserInfoDAO extends BaseDAO<UserInfo>{
  public void rs2list(List<UserInfo> list){
     while(rs.next()){
      }
}
}
上面技术:javaSE范畴。
===================================================
思考:目前为止,数据都是现实在控制台中。
用户需要的:将数据显示在界面上,同时你得提供一个按钮给用户。
重点:将UserInfoDAO中的数据与界面(浏览器)进行交互。
技术范畴是属于javaEE范畴----浏览器。
1、上面是服务器?
   Tomcat服务器-----apache开源基金会--IBM,SUN,ORACLE。。。。。。
    功能:接受来在于WEB客户端的而请求和发送响应。
        javase中是基于事件触发。javaee中是基于请求.javaee中服务器给用户
    发送数据的行为就叫响应.
    案例;打开百度:谁是世界上最帅的男人.百度一下.
   如何使用服务器呢?
   第一步:开发一个项目
   第二步:配置服务器
  第三步:将项目加载到服务器中。
   第四步:启动服务器
   第五步:访问项目http://127.0.0.1:8080/wuliu/index.jsp
                  http://baidu.com/--dns域名解析。
2、实现U色InfoDAO中的数据和界面的交互
    Tomcat服务器中接受请求的工具名称技术叫----servlet技术。
    第一步:用户如何发送请求
     form表单就是用来发送请求的工具。   
     用户发送add.do请求先到web.xml文件,找到对应的servlet
        会访问servlet中的doGet方法和doPost()方法。
    请求有类型:get请求--快,数据大小有限。post请求---可以传送大文件。
    得到用户请求中携带的数据。
    request.setAttribute存值
    request.getAttribute取值
总结:<a href="show.do"></a>
      web.xml
      ShowServlet.java
      doPost{
        //得到集合
        //将集合放在转发中
       //转发
}
show.jsp
 List<UserInfo> list=(List<UserInfo>)request.getAttribute("list1");

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8" />
  <title>A new page</title>
  <link rel="stylesheet" type="text/css" href="public/bootstrap.min.css" />
  <style type="text/css">
  </style>
 </head>
 <body>
  <div>
   <div class="container">
    <form action="action.do" method="post" class="form">
   ID:<input type="text" name="id"/>
   <br>
    姓名:<input type="text" name="name" />
    <br> 性别:
    <input type="radio" name="sex" value="1" />男
    <input type="radio" name="sex" value="0" />女
    <br /> E-mail:
    <input type="email" name="email" />
    <br />
    <input type="submit" name="submit" id="submit" value="提交" />
   </form>
   </div>
  </div>
 </body>
</html>

Action.java即action.do

package com.train.servlet;
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 com.train.bean.UserInfo;
import com.train.dao.UserInfoDAO;
/**
 * Servlet implementation class Login
 */
@WebServlet("/action.do")
public class Action extends HttpServlet {
 private static final long serialVersionUID = 1L;
 /**
  * @see HttpServlet#HttpServlet()
  */
 public Action() {
  super();
  // TODO Auto-generated constructor stub
 }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  request.setCharacterEncoding("utf-8");
  String id = request.getParameter("id");
  String name = request.getParameter("name");
  String sex = request.getParameter("sex");
  String email = request.getParameter("email");
  UserInfo user = new UserInfo(id, name, sex, email);
  new UserInfoDAO().insertUserInfo(user);
 }
}

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8" />
  <title>A new page</title>
  <link rel="stylesheet" type="text/css" href=""/>
  <style type="text/css">
  </style>
 </head>
 <body>
  <a href="show.do">显示数据</a>
 </body>
</html>

show.jsp

<%@page import="com.train.bean.UserInfo"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>JSP Page</title>
  <link rel="stylesheet" type="text/css" href="public/bootstrap.min.css" />
  <style type="text/css">
   table {
    border-collapse: collapse;
   }
  </style>
 </head>
 <body>
  <%
       //得到转发中的数据
       List<UserInfo> list=(List<UserInfo>)request.getAttribute("list");
     %>
  <div class="container" style="padding-top:50px">
   <table border="1" class="table table-bordered">
    <tr>
     <th>ID</th>
     <th>Name</th>
     <th>Sex</th>
     <th>E-mail</th>
    </tr>
    <%
    for(int i=0;i<list.size();i++){
   %>
    <tr>
     <td>
      <%=list.get(i).getId() %>
     </td>
     <td>
      <%=list.get(i).getName() %>
     </td>
     <td>
      <%=list.get(i).getSex() %>
     </td>
     <td>
      <%=list.get(i).getEmail() %>
     </td>
    </tr>
    <%}%>
   </table>
  </div>
 </body>
</html>

showData.java

package com.train.servlet;
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 com.train.bean.UserInfo;
import com.train.dao.UserInfoDAO;
/**
 * Servlet implementation class showData
 */
@WebServlet("/show.do")
public class showData extends HttpServlet {
 private static final long serialVersionUID = 1L;
 /**
  * @see HttpServlet#HttpServlet()
  */
 public showData() {
  super();
  // TODO Auto-generated constructor stub
 }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doPost(request, response);
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  // 解决响应乱码情况
  response.setContentType("text/html;charset=utf-8");
  String sql = "select * from train";
  List<UserInfo> list = new UserInfoDAO().redUserInfo(sql);
  // setAttribute能够转发的数据交给信封。
  request.setAttribute("list", list);
  // 转发---信息在传递的过程中,没有发生变化。
  // 转发给谁,谁就能得到,否则得不到。
  request.getRequestDispatcher("show.jsp").forward(request, response);
 }
}

---

本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,欢迎转载,演绎或用于商业目的。

---

二维码加载中...

扫一扫移动端访问O(∩_∩)O

发表评论

48 + 18 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交
正在加载中……