目录

  • 1 教学PPT
    • 1.1 第1次课
    • 1.2 第2次课
    • 1.3 第3次课
    • 1.4 第4次课
    • 1.5 第5次课
    • 1.6 第6次课
    • 1.7 第7次课
    • 1.8 第8次课
    • 1.9 第9次课
    • 1.10 第10次课
    • 1.11 第11次课
    • 1.12 第12次课
    • 1.13 第13次课
    • 1.14 第14次课
    • 1.15 第15次课
    • 1.16 第16次课
    • 1.17 第17次课
    • 1.18 第18次课
    • 1.19 第19次课
    • 1.20 第20次课
    • 1.21 第21次课
    • 1.22 第22次课
    • 1.23 第23次课
    • 1.24 第24次课
    • 1.25 第25次课
    • 1.26 第26次课
    • 1.27 第27次课
    • 1.28 第28次课
    • 1.29 第29次课
    • 1.30 第30次课
    • 1.31 第31次课
    • 1.32 第32次课
    • 1.33 第33次课
    • 1.34 第34次课
    • 1.35 第35次课
    • 1.36 第36次课
    • 1.37 第37次课
    • 1.38 第38次课
    • 1.39 第39次课
    • 1.40 第40次课
    • 1.41 第41次课
    • 1.42 第42次课
    • 1.43 第43次课
    • 1.44 第44次课
    • 1.45 第45次课
    • 1.46 第46次课
    • 1.47 第47次课
  • 2 HTML与CSS
    • 2.1 HTML基础知识
      • 2.1.1 教学视频
      • 2.1.2 随堂测验
    • 2.2 HTML基本标签
      • 2.2.1 教学视频
      • 2.2.2 随堂测验
    • 2.3 CSS样式表
      • 2.3.1 教学视频
      • 2.3.2 随堂测验
    • 2.4 CSS常用属性
      • 2.4.1 教学视频
      • 2.4.2 随堂测验
    • 2.5 CSS定位
      • 2.5.1 教学视频
      • 2.5.2 随堂测验
    • 2.6 HTML表格
      • 2.6.1 教学视频
      • 2.6.2 随堂测验
    • 2.7 HTML表单
      • 2.7.1 教学视频
      • 2.7.2 随堂测验
    • 2.8 综合案例——美化注册页面
      • 2.8.1 教学视频
      • 2.8.2 随堂测验
    • 2.9 综合案例——文字滚动屏
      • 2.9.1 教学视频
      • 2.9.2 随堂测验
    • 2.10 单元作业
  • 3 Java Web概述
    • 3.1 Java Web应用简介
      • 3.1.1 教学视频
      • 3.1.2 随堂测验
    • 3.2 开发工具下载安装与环境变量配置
      • 3.2.1 教学视频
      • 3.2.2 随堂测验
    • 3.3 应用程序的开发与部署
      • 3.3.1 教学视频
      • 3.3.2 随堂测验
    • 3.4 单元作业
    • 3.5 综合性作业
    • 3.6 实战素材
  • 4 JSP基础
    • 4.1 动态网页和JSP简介
      • 4.1.1 教学视频
      • 4.1.2 随堂测验
    • 4.2 JSP基本元素
      • 4.2.1 教学视频
      • 4.2.2 随堂测验
    • 4.3 JSP指令元素——page指令
      • 4.3.1 教学视频
      • 4.3.2 随堂测验
    • 4.4 JSP指令元素——include指令
      • 4.4.1 教学视频
      • 4.4.2 随堂测验
    • 4.5 JSP动作元素
      • 4.5.1 教学视频
      • 4.5.2 随堂测验
    • 4.6 综合案例——图书集合的输出
      • 4.6.1 教学视频
      • 4.6.2 随堂测验
    • 4.7 单元作业
    • 4.8 综合性作业
    • 4.9 实战素材
  • 5 JSP内置对象
    • 5.1 JSP内置对象简介
      • 5.1.1 教学视频
      • 5.1.2 随堂测验
    • 5.2 request对象
      • 5.2.1 教学视频
      • 5.2.2 随堂测验
    • 5.3 response对象
      • 5.3.1 教学视频
      • 5.3.2 随堂测验
    • 5.4 session对象
      • 5.4.1 教学视频
      • 5.4.2 随堂测验
    • 5.5 application对象
      • 5.5.1 教学视频
      • 5.5.2 随堂测验
    • 5.6 pageContext对象
      • 5.6.1 教学视频
      • 5.6.2 随堂测验
    • 5.7 综合案例——打造简单购物车
      • 5.7.1 教学视频
      • 5.7.2 随堂测验
    • 5.8 综合案例——网上答题及自动评测系统
      • 5.8.1 教学视频
      • 5.8.2 随堂测验
    • 5.9 单元作业
    • 5.10 实战素材
  • 6 Servlet基础
    • 6.1 Servlet及其生命周期
      • 6.1.1 教学视频
      • 6.1.2 随堂测验
    • 6.2 Servlet创建、配置与运行
      • 6.2.1 教学视频
      • 6.2.2 随堂测验
    • 6.3 Servlet常用对象及其方法
      • 6.3.1 教学视频
      • 6.3.2 随堂测验
    • 6.4 Servlet数据共享
      • 6.4.1 教学视频
      • 6.4.2 随堂测验
    • 6.5 请求转发与重定向
      • 6.5.1 教学视频
      • 6.5.2 随堂测验
    • 6.6 汉字乱码解决方案
      • 6.6.1 教学视频
      • 6.6.2 随堂测验
    • 6.7 Java Web常用开发模式
      • 6.7.1 教学视频
      • 6.7.2 随堂测验
    • 6.8 综合案例——实现复数运算
      • 6.8.1 教学视频
      • 6.8.2 随堂测验
    • 6.9 单元作业
    • 6.10 综合性作业
    • 6.11 实战素材
  • 7 会话跟踪技术
    • 7.1 会话跟踪技术
      • 7.1.1 教学视频
      • 7.1.2 随堂测验
    • 7.2 Cookie创建及使用
      • 7.2.1 教学视频
      • 7.2.2 随堂测验
    • 7.3 HttpSession创建及使用
      • 7.3.1 教学视频
      • 7.3.2 随堂测验
      • 7.3.3 技术拓展
    • 7.4 ServletConfig对象
      • 7.4.1 教学视频
      • 7.4.2 随堂测验
    • 7.5 ServletContext对象
      • 7.5.1 教学视频
      • 7.5.2 随堂测验
      • 7.5.3 技术拓展
    • 7.6 综合案例——基于数据库的购书
      • 7.6.1 教学视频
      • 7.6.2 随堂测验
    • 7.7 综合案例——用户注销
      • 7.7.1 教学课件
      • 7.7.2 教学视频
      • 7.7.3 随堂测验
    • 7.8 单元作业
    • 7.9 综合性作业
    • 7.10 实战素材
  • 8 EL表达式
    • 8.1 EL及其运算符
      • 8.1.1 教学视频
      • 8.1.2 随堂测验
    • 8.2 EL请求参数对象
      • 8.2.1 教学视频
      • 8.2.2 随堂测验
    • 8.3 EL作用域对象
      • 8.3.1 教学视频
      • 8.3.2 随堂测验
    • 8.4 EL初始化参数对象
      • 8.4.1 教学视频
      • 8.4.2 随堂测验
    • 8.5 EL的pageContext对象
      • 8.5.1 教学视频
      • 8.5.2 随堂测验
    • 8.6 EL对JavaBean的访问
      • 8.6.1 教学视频
      • 8.6.2 随堂测验
    • 8.7 EL对集合对象的访问
      • 8.7.1 教学视频
      • 8.7.2 随堂测验
    • 8.8 单元作业
    • 8.9 综合性作业
    • 8.10 实战素材
  • 9 JSTL标签库
    • 9.1 JSTL简介与部署
      • 9.1.1 教学视频
      • 9.1.2 随堂测验
    • 9.2 核心标签库——通用标签
      • 9.2.1 教学视频
      • 9.2.2 随堂测验
    • 9.3 核心标签库——条件标签
      • 9.3.1 教学视频
      • 9.3.2 随堂测验
    • 9.4 核心标签库——迭代标签
      • 9.4.1 教学视频
      • 9.4.2 随堂测验
    • 9.5 核心标签库——URL标签
      • 9.5.1 教学视频
      • 9.5.2 随堂测验
    • 9.6 SQL标签库
      • 9.6.1 教学视频
      • 9.6.2 随堂测验
    • 9.7 综合案例——使用JSTL浏览书库信息
      • 9.7.1 教学视频
      • 9.7.2 随堂测验
    • 9.8 单元作业
    • 9.9 综合性作业
    • 9.10 实战素材
  • 10 JavaBean技术
    • 10.1 JavaBean的设计
      • 10.1.1 教学视频
      • 10.1.2 随堂测验
    • 10.2 JSP中使用JavaBean
      • 10.2.1 教学视频
        • 10.2.1.1 获取JavaBean实例对象
        • 10.2.1.2 获取JavaBean的属性值
        • 10.2.1.3 设置JavaBean的属性值
      • 10.2.2 随堂测验
    • 10.3 共享JavaBean的创建与使用
      • 10.3.1 教学视频
      • 10.3.2 随堂测验
      • 10.3.3 技术拓展
    • 10.4 综合案例——使用JavaBean封装信息并输出
      • 10.4.1 教学视频
      • 10.4.2 教学课件
      • 10.4.3 随堂测验
    • 10.5 数据库访问JavaBean的设计——工具类JDBCUtil创建
      • 10.5.1 教学视频
      • 10.5.2 教学课件
      • 10.5.3 随堂测验
      • 10.5.4 技术拓展
    • 10.6 数据库访问JavaBean的设计——UserDAO设计
      • 10.6.1 教学视频
      • 10.6.2 教学课件
      • 10.6.3 随堂测验
    • 10.7 数据库访问JavaBean的设计——DAO工厂类的设计
      • 10.7.1 教学视频
      • 10.7.2 教学课件
      • 10.7.3 随堂测验
    • 10.8 综合案例——图书信息的查询
      • 10.8.1 教学视频
      • 10.8.2 教学课件
      • 10.8.3 随堂测验
    • 10.9 单元作业
    • 10.10 综合性作业
    • 10.11 实战素材
  • 11 JDBC数据库访问技术
    • 11.1 MySQL数据库安装及使用
      • 11.1.1 教学视频
      • 11.1.2 教学课件
      • 11.1.3 随堂测验
    • 11.2 JDBC简介
      • 11.2.1 教学视频
      • 11.2.2 教学课件
      • 11.2.3 随堂测验
    • 11.3 JDBC访问数据库的步骤
      • 11.3.1 教学视频
      • 11.3.2 随堂测验
    • 11.4 综合案例——实现查询操作
      • 11.4.1 教学视频
      • 11.4.2 随堂测验
    • 11.5 综合案例——实现更新操作
      • 11.5.1 教学视频
      • 11.5.2 随堂测验
    • 11.6 数据源和连接池技术
      • 11.6.1 教学视频
      • 11.6.2 随堂测验
    • 11.7 单元作业
    • 11.8 综合性作业
    • 11.9 实战素材
  • 12 题库
    • 12.1 题库一
    • 12.2 题库二
    • 12.3 题库三
    • 12.4 题库四
    • 12.5 题库五
    • 12.6 题库六
  • 13 成果展示
    • 13.1 购书系统
      • 13.1.1 功能模块
      • 13.1.2 实战项目
    • 13.2 学生身体体质检测系统
      • 13.2.1 功能模块
      • 13.2.2 实战项目
    • 13.3 商品管理系统
      • 13.3.1 功能模块
      • 13.3.2 实战项目
数据库访问JavaBean的设计——工具类JDBCUtil创建

1. 案例需求

【案例描述】

数据库操作在一个Web应用程序中的后台处理中占有很大的比重,本例设计一组JavaBean封装数据库的基本操作,供上层模块调用,提高程序的复用性和可移植性。

【案例分析】

假设操作的数据库名是jdbc,表格是user (id, name, password, birthday, salary),封装的基本操作是记录的添加、修改、查询全部、按userid查找用户、按userid删除用户。


2. 案例设计

关键技术点:1) Java web应用中访问资源文件的方式

                    2) JDBCUtil工具类封装数据库资料的开关释放

                    3) User这个VO对象与数据库表的对应关系

该案例需要设计以下组件:

(1)数据库jdbc及其数据库表user。

(2)在资源包中建立属性文件mysql.properties,存放数据库的基本信息,这样做的好处是数据库信息发生变化时只需要修改该文件,不用重新编译代码。

(3)建立一个获取连接和释放资源的工具类JDBCUtil.java。

(4)建立VO的定义类User.java实现记录信息对象化,体现面向对象程序设计思想。


3. Code Example

User.java示例代码

package cn.edu.wfu.cs.web.domain;

import java.util.Date;

public class User {
    
    //define Bean properties
    private String id;
    private String name;
    private String password;
    private Date birthday;
    private float salary;
    
    //define default constructors
    public User() {
        super();
    }
    
    //define setters and getters
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }    
    
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public float getSalary() {
        return salary;
    }
    public void setSalary(float salary) {
        this.salary = salary;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((birthday == null) ? 0 : birthday.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result
                + ((password == null) ? 0 : password.hashCode());
        result = prime * result + Float.floatToIntBits(salary);
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (birthday == null) {
            if (other.birthday != null)
                return false;
        } else if (!birthday.equals(other.birthday))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (password == null) {
            if (other.password != null)
                return false;
        } else if (!password.equals(other.password))
            return false;
        if (Float.floatToIntBits(salary) != Float.floatToIntBits(other.salary))
            return false;
        return true;
    }
}


JDBCUti.java示例代码

package cn.edu.wfu.cs.web.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
 *
 * @author Huihui Zhang
 *
 * JDBC工具类设计: 1) 工具类通常禁止继承, i.e., final + private constructor()
 *                2) 常用的设计模式: 单例模式, static类模式
 *
 */

public final class JDBCUtil {
    // define dbAccess properties
    private static String dbDriver;
    private static String dbURL;
    private static String dbUser;
    private static String password;
    private static Properties prop = new Properties();

    static {// 数据库驱动只需注册一次 register driver only once,故而 只需在类加载时对数据库驱动信息进行一次性初始化
        try {
            //通过ClassLoader访问资源文件, 注意资源目录的格式不带根"/"
            prop.load(JDBCUtil.class.getClassLoader().getResourceAsStream(
                    "cn/edu/wfu/cs/resource/mysql.properties"));//数据库的驱动信息通过配置文件的形式提供, 解耦对特定DB引擎的硬编码
            //initialize db properties
            dbDriver = prop.getProperty("dbDriver");
            dbURL= prop.getProperty("dbURL");
            dbUser = prop.getProperty("dbUser");
            password = prop.getProperty("password");
            //register dbDriver
            Class.forName(dbDriver);            
        } catch (IOException e) {
            throw new ExceptionInInitializerError(e);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    //define private default constructor
    private JDBCUtil() {//禁止外部创建实例
        super();
    }
    
    //get db connection
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(dbURL, dbUser, password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    
    /**
     *
     * @param rs
     * @param prest
     * @param conn
     *
     * Note: 1)数据库资源释放的顺序: RresultSet ---> PreparedStatement ---> Connection
     *           2)数据库资源释放过程中的异常处理一定要确保不会影响后继资源的释放
     *       
     *       
     */
    public static void freeDBResources(ResultSet rs, PreparedStatement prest, Connection conn) {
        try {
            if (null != rs) {//数据库资源释放的顺序: RresultSet ---> PreparedStatement ---> Connection
                rs.close();                
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {// 数据库资源释放过程中的异常捕获一定要确保不会影响后继资源的释放
            try {
                if (null != prest) {
                    prest.close();                    
                }                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    if (null != conn) {
                        conn.close();                        
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}