Java Web学习笔记06:利用JDBC访问数据库

文章目录

一、JDBC相关知识回顾

1、JDBC概述

2、JDBC API

二、创建数据库与表

三、实例演示——用户登录

1、创建Web项目LoginDemo01

2、在WEB-INF里创建lib目录,添加数据库驱动jar包

3、在web目录里创建首页文件index.jsp

4、在web目录里创建登录页面login.jsp

5、在web目录里创建登录处理页面do_login.jsp

6、在web目录里创建登录成功页面success.jsp

7、启动tomcat服务器,查看运行效果

(1)登录成功的情况

(2)登录失败的情况

改进版1:创建一个数据库连接管理类ConnectionManager

1、在src里创建net.hw.dbutil包,在里面创建ConnectionManager类

2、修改登录处理页面do_login.jsp

3、启动服务器,查看效果

改进版2:引入模型层,创建UserDao

1、在src里创建net.hw.bean包,在里面创建User实体类

2、在src里创建net.hw.dao包,在里面创建UserDao接口

3、在net.hw.dao下创建impl子包,在里面创建UserDaoImpl实现类

4、修改登录处理页面do_log.jsp(控制层)

5、重启服务器,查看效果

改进版3:用Servlet取代登录处理页面do_login.jsp

1、在src里创建net.hw.servlet包,在里面创建LoginServlet类

2、在LoginServlet注解里添加url映射

3、编写doGet()方法代码,调用doPost()方法

4、编写doPost()方法,进行业务逻辑处理,实现页面跳转

5、修改登录页面login.jsp

6、重启服务器,查看运行效果

三、课后练习

练习1、创建新闻系统数据库

练习2、实现管理员登录验证

练习3、显示新闻列表

练习4、显示新闻主题列表

练习5、添加新闻主题

练习6、实现发布新闻

引申学习:前端采用Bootstrap框架

1、在web目录里添加bootstrap

2、在web目录里创建scripts子目录,添加jquery框架

3、在web目录里创建images子目录,添加一张图片background.jpg

4、修改登录页面login.jsp

5、启动服务器,查看运行效果


一、JDBC相关知识回顾

1、JDBC概述

JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

Java Web学习笔记06:利用JDBC访问数据库_第1张图片

Java Web学习笔记06:利用JDBC访问数据库_第2张图片

2、JDBC API

JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果。

Java Web学习笔记06:利用JDBC访问数据库_第3张图片

Java Web学习笔记06:利用JDBC访问数据库_第4张图片

二、创建数据库与表

Java Web学习笔记06:利用JDBC访问数据库_第5张图片

Java Web学习笔记06:利用JDBC访问数据库_第6张图片

三、实例演示——用户登录

1、创建Web项目LoginDemo01

Java Web学习笔记06:利用JDBC访问数据库_第7张图片

2、在WEB-INF里创建lib目录,添加数据库驱动jar包

Java Web学习笔记06:利用JDBC访问数据库_第8张图片

作为库添加到项目:

Java Web学习笔记06:利用JDBC访问数据库_第9张图片

Java Web学习笔记06:利用JDBC访问数据库_第10张图片

3、在web目录里创建首页文件index.jsp

Java Web学习笔记06:利用JDBC访问数据库_第11张图片

4、在web目录里创建登录页面login.jsp

Java Web学习笔记06:利用JDBC访问数据库_第12张图片

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>



    用户登录


用户登录

用户名
密 码
<% String errMsg = (String) session.getAttribute("errMsg"); if (errMsg != null) { out.println("

" + new String(errMsg.getBytes("ISO-8859-1"), "utf-8") + "

"); } %>

5、在web目录里创建登录处理页面do_login.jsp

Java Web学习笔记06:利用JDBC访问数据库_第13张图片

<%@ page import="java.sql.*" %>
<%@ page import="java.net.URLEncoder" %>

<%
    // 设置请求对象字符编码
    request.setCharacterEncoding("utf-8");
    // 获取表单提交的数据
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    // 设置连接数据库的参数值
    final String DRIVER = "com.mysql.jdbc.Driver";
    final String URL = "jdbc:mysql://localhost:3306/hwdb";
    final String USER = "root";
    final String PASSWORD = "root";

    try {
        // 安装数据库驱动程序
        Class.forName(DRIVER);
        // 获取数据库连接
        Connection conn = DriverManager.getConnection(URL + "?useUnicode=true&characterEncoding=utf8", USER, PASSWORD);
        // 定义SQL字符串
        String strSQL = "select * from t_user where username = ? and password = ?";
        // 创建预备语句对象
        PreparedStatement pstmt = conn.prepareStatement(strSQL);
        // 设置占位符的值
        pstmt.setString(1, username);
        pstmt.setString(2, password);
        // 执行SQL查询,返回结果集
        ResultSet rs = pstmt.executeQuery();
        // 判断结果集是否有记录
        if (rs.next()) {
            // 清除session里可能存在的属性值
            if (session.getAttribute("errMsg") != null) {
                session.removeAttribute("errMsg");
            }
            // 采用重定向,跳转到登录成功页面
            response.sendRedirect("success.jsp?username=" + URLEncoder.encode(username, "utf-8"));        
        } else {
            // 设置session属性值
            session.setAttribute("errMsg", "用户名或密码错误,请重新登录");
            // 采用重定向,跳转到登录页面
            response.sendRedirect("login.jsp");
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } 
%>

6、在web目录里创建登录成功页面success.jsp

Java Web学习笔记06:利用JDBC访问数据库_第14张图片

7、启动tomcat服务器,查看运行效果

Java Web学习笔记06:利用JDBC访问数据库_第15张图片

(1)登录成功的情况

Java Web学习笔记06:利用JDBC访问数据库_第16张图片

Java Web学习笔记06:利用JDBC访问数据库_第17张图片

(2)登录失败的情况

Java Web学习笔记06:利用JDBC访问数据库_第18张图片

Java Web学习笔记06:利用JDBC访问数据库_第19张图片


改进版1:创建一个数据库连接管理类ConnectionManager


1、在src里创建net.hw.dbutil包,在里面创建ConnectionManager类

Java Web学习笔记06:利用JDBC访问数据库_第20张图片

package net.hw.dbutil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 功能:数据库连接管理类
 * 作者:华卫
 * 日期:2019年10月9日
 */
public class ConnectionManager {
    // 定义连接数据库的参数值
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/hwdb";
    private static final String USER = "root";
    private static final String PASSWORD = "1";

    /**
     * 私有化构造方法,拒绝实例化
     */
    private ConnectionManager() {
    }

    /**
     * 获取数据库连接静态方法
     * 
     * @return 数据库连接
     */
    public static Connection getConnection() {
        // 声明数据库连接
        Connection conn = null;

        try {
            // 安装数据库驱动程序
            Class.forName(DRIVER);
            // 获取数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 返回数据库连接
        return conn;
    }

    /**
     * 关闭数据库连接静态方法
     * 
     * @param conn 数据库连接
     */
    public static void closeConn(Connection conn) {
        if (conn != null) {
            try {
                if (!conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

2、修改登录处理页面do_login.jsp

Java Web学习笔记06:利用JDBC访问数据库_第21张图片

3、启动服务器,查看效果

Java Web学习笔记06:利用JDBC访问数据库_第22张图片


改进版2:引入模型层,创建UserDao


1、在src里创建net.hw.bean包,在里面创建User实体类

Java Web学习笔记06:利用JDBC访问数据库_第23张图片

package net.hw.bean;

/**
 * 功能:用户实体类
 * 作者:华卫
 * 日期:2019年10月9日
 */
public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2、在src里创建net.hw.dao包,在里面创建UserDao接口

Java Web学习笔记06:利用JDBC访问数据库_第24张图片

Java Web学习笔记06:利用JDBC访问数据库_第25张图片

3、在net.hw.dao下创建impl子包,在里面创建UserDaoImpl实现类

Java Web学习笔记06:利用JDBC访问数据库_第26张图片

package net.hw.dao.impl;

import net.hw.bean.User;
import net.hw.dao.UserDao;
import net.hw.dbutil.ConnectionManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 功能:用户数据访问接口实现类
 * 作者:华卫
 * 日期:2019年10月9日
 */
public class UserDaoImpl implements UserDao {
    /**
     * 登录方法
     *
     * @param username
     * @param password
     * @return true - 登录成功;false - 登录失败
     */
    @Override
    public boolean login(String username, String password) {
        // 声明标志变量
        boolean flag = false;
        // 声明数据库连接
        Connection conn = null;

        try {
            // 获取数据库连接
            conn = ConnectionManager.getConnection();
            // 定义SQL字符串
            String strSQL = "select * from t_user where username = ? and password = ?";
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设置占位符的值
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            // 执行SQL查询,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 判断结果集里是否有记录
            if (rs.next()) {
                flag = true;
            } else {
                flag = false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConn(conn);
        }

        // 返回标志变量
        return flag;
    }

    /**
     * 插入方法
     *
     * @param user
     * @return 插入记录数
     */
    @Override
    public int insert(User user) {
        // 声明插入记录数变量
        int count = 0;
        // 声明数据库连接
        Connection conn = null;

        try {
            // 获取数据库连接
            conn = ConnectionManager.getConnection();
            // 定义SQL字符串
            String strSQL = "insert into t_user (username, password) values (?, ?)";
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设置占位符的值
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            // 执行SQL更新,返回更新记录数
            count = pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConn(conn);
        }

        // 返回插入记录数
        return count;
    }
}

4、修改登录处理页面do_log.jsp(控制层)

<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.sql.*" %>
<%@ page import="net.hw.dbutil.ConnectionManager" %>
<%@ page import="net.hw.dao.UserDao" %>
<%@ page import="net.hw.dao.impl.UserDaoImpl" %>
<%
    // 设置请求对象字符编码
    request.setCharacterEncoding("utf-8");

    // 获取表单提交的数据
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    
    // 创建用户数据访问对象
    UserDao userDao = new UserDaoImpl();    

    // 判断登录是否成功
    if (userDao.login(username, password)) {
        // 清除session里可能存在的errMsg属性
        if (session.getAttribute("errMsg") != null) {
            session.removeAttribute("errMsg");
        }
        // 采用重定向,跳转到登录成功页面
        response.sendRedirect("success.jsp?username=" + URLEncoder.encode(username, "utf-8"));
    } else {
        // 设置session里的errMsg属性
        session.setAttribute("errMsg", "用户名或密码错误,请重新登录");
        // 采用重定向,跳转到登录页面
        response.sendRedirect("login.jsp");
    }
%>

5、重启服务器,查看效果

Java Web学习笔记06:利用JDBC访问数据库_第27张图片


改进版3:用Servlet取代登录处理页面do_login.jsp


1、在src里创建net.hw.servlet包,在里面创建LoginServlet类

Java Web学习笔记06:利用JDBC访问数据库_第28张图片

Java Web学习笔记06:利用JDBC访问数据库_第29张图片

Java Web学习笔记06:利用JDBC访问数据库_第30张图片

2、在LoginServlet注解里添加url映射

Java Web学习笔记06:利用JDBC访问数据库_第31张图片

3、编写doGet()方法代码,调用doPost()方法

Java Web学习笔记06:利用JDBC访问数据库_第32张图片

4、编写doPost()方法,进行业务逻辑处理,实现页面跳转

Java Web学习笔记06:利用JDBC访问数据库_第33张图片

5、修改登录页面login.jsp

Java Web学习笔记06:利用JDBC访问数据库_第34张图片

6、重启服务器,查看运行效果

Java Web学习笔记06:利用JDBC访问数据库_第35张图片

程序能够成长运行,但是有一个小问题:登录失败时的提示信息出现乱码。大家思考一下,如何解决?

Java Web学习笔记06:利用JDBC访问数据库_第36张图片

解决方法:修改login.jsp,直接输出errMsg。

Java Web学习笔记06:利用JDBC访问数据库_第37张图片

Java Web学习笔记06:利用JDBC访问数据库_第38张图片

说明:do_login.jsp里的session属性errMsg的值传递到login.jsp页面,传递过程中采用的编码是iso-8859-1,因此,在login.jsp页面显示就是乱码,需要用new String(errMsg.getBytes("iso-8859-1"), "utf-8"))来处理一下才行。但是LoginServlet里的session属性errMsg的值传递到login.jsp页面,传递过程中采用的编码是utf-8,因此,在login.jsp页面可以直接显示中文不出现乱码。

项目下载链接:https://pan.baidu.com/s/1kRC7OZyXTXF4ejepfNXgvw 提取码:pboa 

三、课后练习

练习1、创建新闻系统数据库

需求说明:

  • 创建新闻发布系统数据库
  • 新闻栏目表
  • 用户表
  • 评论表
  • 新闻表

Java Web学习笔记06:利用JDBC访问数据库_第39张图片

Java Web学习笔记06:利用JDBC访问数据库_第40张图片

Java Web学习笔记06:利用JDBC访问数据库_第41张图片

Java Web学习笔记06:利用JDBC访问数据库_第42张图片

Java Web学习笔记06:利用JDBC访问数据库_第43张图片

数据库脚本news.sql链接:https://pan.baidu.com/s/1G7DpcfdVHeJF9VQN4-_i2Q 提取码:al3c 

练习2、实现管理员登录验证

需求说明:

  • 管理员登录页面
  • 用户名、密码文本框
  • 使用JavaScript进行表单非空验证
  • 业务处理页面
  • 获取登录页面表单数据
  • 访问数据库查询用户名和密码是否正确
  • 根据查询结果跳转到成功或失败页面

练习3、显示新闻列表

需求说明:

  • 管理员登录后,显示新闻列表
  • 使用集合保存新闻

练习4、显示新闻主题列表

需求说明:

  • 将新闻主题以列表方式显示
  • 显示新闻主题的名称

练习5、添加新闻主题

需求说明:

  • 新闻主题添加页面
  • 主题名称
  • 业务处理页面
  • 获取主题名称
  • 将主题保存到数据库中
  • 保存成功后返回主题列表

练习6、实现发布新闻

需求说明:

  • 实现新闻的发布
  • 将发布内容保存到数据库中
  • 图片上传功能暂不实现

引申学习:前端采用Bootstrap框架


1、在web目录里添加bootstrap

Java Web学习笔记06:利用JDBC访问数据库_第44张图片

2、在web目录里创建scripts子目录,添加jquery框架

Java Web学习笔记06:利用JDBC访问数据库_第45张图片

3、在web目录里创建images子目录,添加一张图片background.jpg

Java Web学习笔记06:利用JDBC访问数据库_第46张图片

4、修改登录页面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>



    用户登录
    
    
    
    
    
    
    


用户登录


<% String errMsg = (String) session.getAttribute("errMsg"); if (errMsg != null) { out.println("

" + new String(errMsg.getBytes("ISO-8859-1"), "utf-8") + "

"); } %>

5、启动服务器,查看运行效果

Java Web学习笔记06:利用JDBC访问数据库_第47张图片

你可能感兴趣的:(Java,Web开发)