实验五 JSP中使用数据库


前言

一、实验目的:
1.掌握在JSP中使用JDBC连接数据库的步骤及方法。
2.掌握在Tomcat中使用数据库连接池,预编译语句连接数据库。
二、内容和主要步骤:
1.编写页面form.html完成用户ID,姓名,密码,住址的输入,姓名不为空,ID唯一提交给DBProcess.jsp;
2.编写JDBC工具类(名字自定)完成数据库的连接和释放;
3.编写JSP页面DBProcess.jsp,读取form.html中的参数信息,在该页面通过JDBC工具类连接数据库并使用预处理语句完成向用户表user中保存信息。
4在Tomcat中正确配置DBCP,使用数据库连接池,编写页面show.jsp显示用户表user中的所有信息
三、要求:
1. 完成上述任务,编写代码调试并使之运行正确;
2. 写出实验报告(在实验系统完成)

具体操作

form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>form2</title>
</head>
<body>
<form action="DBProcess.jsp" method="post">
    <input name="id" placeholder="请输入id" type="text"><br>
    <input name="username" placeholder="请输入用户名" type="text"><br>
    <input name="password" placeholder="请输入密码" type="password"><br>
    <input name="address" placeholder="请输入地址" type="text">
    <br>
    <input type="submit" value="注册">
</form>
</body>
</html>

JDBCUtils.java

package test5;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*JDBC工具类,使用Durid连接池*/
public class JDBCUtils {
    private static DataSource ds;

    static {
        try {
            //加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
            //初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*获取链接池对象*/
    public static DataSource getDataSourse() {
        return ds;
    }

    /*获取链接Connection对象*/
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    /*释放资源*/
    public static void close(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day14
# day14为创建的数据库,根据不同的数据库进行修改
username=root
password=5000
initialSize=5
maxActive=10
maxWait=3000

DBProcess.jsp

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="test5.JDBCUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>DBProcess</title>
</head>
<body>
<%
    //设置编码格式,防止乱码
    request.setCharacterEncoding("utf-8");
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    String id = request.getParameter("id");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String address = request.getParameter("address");
    Connection conn = null;
    PreparedStatement prstmt = null;
    try {
        //注册驱动,获取连接对象
        conn = JDBCUtils.getConnection();
        //开启事务
        conn.setAutoCommit(false);
        //定义sql
        String sql = "insert into user values (?,?,?,?)";

        //预编译sql,获取执行sql对象
        prstmt = conn.prepareStatement(sql);

        //给占位符赋值
        prstmt.setString(1, id);
        prstmt.setString(2, username);
        prstmt.setString(3, password);
        prstmt.setString(4, address);

        prstmt.executeUpdate();

        //提交事务
        conn.commit();

    } catch (SQLException e) {
        //事务回滚
        try {
            if (conn != null) {
                conn.rollback();
            }
        } catch (SQLException e2) {
            e2.printStackTrace();
        }
        e.printStackTrace();
    } finally {
        JDBCUtils.close(prstmt, conn);
    }
    response.sendRedirect("show.jsp");
%>
</body>
</html>

show.jsp

<%@ page import="java.sql.*" %>
<%@ page import="test5.JDBCUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>show</title>
</head>
<body>
<%
    //设置编码格式,防止乱码
    request.setCharacterEncoding("utf-8");
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    Connection conn = null;

    Statement stmt = null;

    ResultSet rs = null;
    try {
        //注册驱动,获取连接对象
        conn = JDBCUtils.getConnection();
        //创建执行sql对象
        stmt = conn.createStatement();
        //创建sql语句
        String sql = "select * from day14.user";
        //执行sql语句
        rs = stmt.executeQuery(sql);
        //处理结果
        while (rs.next()) {//游标向下移动一行,true下一行有数据,false下一行无数据
            String id = rs.getString("id");//第一列
            String username = rs.getString("username");//第二列
            String password = rs.getString("password");//第三列
            String address = rs.getString("address");//第四列
            response.getWriter().write("<h1>" + id + "<br>" + username + "<br>" + password + "<br>" + address +
                    "</h1>");
        }
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    } finally {
        JDBCUtils.close(rs, stmt, conn);
    }
%>
</body>
</html>

运行截图
请添加图片描述
请添加图片描述
请添加图片描述


总结

1.掌握在JSP中使用JDBC连接数据库的步骤及方法。
2.掌握在Tomcat中使用数据库连接池,预编译语句连接数据库。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky-stars

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值