利用JDBC访问数据库

练习1、创建新闻系统数据库
练习2、实现管理员登录验证
练习3、显示新闻列表
练习4、显示新闻主题列表
练习5、添加新闻主题
练习6、实现发布新闻
新建查询
链接:https://pan.baidu.com/s/1kLz9dI9PreKYnOEVdNYgMA
提取码:qb5n
运行得到以下表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建项目DataSourceDemo
在这里插入图片描述
加MySQL数据库驱动程序jar包
在这里插入图片描述
INF子目录,在里面创建数据源配置文件context.xml
在这里插入图片描述
注意:数据库的密码
在src里创建net.cw.dbutil包,在里面创建ConnectionManager类
在这里插入图片描述

package net.xmh.dbutil;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * 功能:数据库连接管理器
 * 作者:xmh
 * 日期:2019年11月7日
 */
public class ConnectionManager {
    /**
     * 私有化构造方法,拒绝实例化
     */
    private ConnectionManager() {
    }

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

        try {
            // 初始化上下文
            Context ctx = new InitialContext();
            // 在数据库连接池莉查询获取数据源
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/news");
            // 通过数据源获取数据库连接
            conn = ds.getConnection();
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

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

    public static void main(String[] args) {
        Connection conn = getConnection();
        if (conn != null) {
            System.out.println("恭喜,数据库连接成功!");
        } else {
            System.out.println("遗憾,数据库连接失败!");
        }
    }
}


在web目录里修改首页文件index.jsp
在这里插入图片描述
在web目录里创建login.jsp页面,实现管理员登录
在这里插入图片描述

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

<html>
<head>
    <title>用户登录</title>
</head>
<body>
<h3 style="text-align: center">用户登录</h3>
<form action="do_login.jsp" method="post">
    <table border="1" cellpadding="10" style="margin: 0px auto">
        <tr>
            <td align="center">用户名</td>
            <td><input type="text" name="username"/></td>
        </tr>
        <tr>
            <td align="center">密&nbsp;码</td>
            <td><input type="password" name="password"/></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="登录"/>
                <input type="reset" value="重置"/>
            </td>
        </tr>
    </table>
</form>
<%
    String errMsg = (String) session.getAttribute("errMsg");
    if (errMsg != null) {
        out.println("<p style='text-align: center; color: red'>" + new String(errMsg.getBytes("ISO-8859-1"), "utf-8") + "</p>");
    }
%>
</body>
</html>


在web目录里创建do_login.jsp页面,验证登录
在这里插入图片描述

<%@ 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/news";
    final String USER = "root";
    final String PASSWORD = "123456";
    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();
    }
%>

在web目录里创建topic_list.jsp页面,显示新闻主题列表
在这里插入图片描述

<%@ page import="java.sql.Connection" %>
<%@ page import="net.xmh.dbutil.ConnectionManager" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>新闻栏目列表</title>
</head>
<body>
<%
    // 获取数据库连接
    Connection conn = ConnectionManager.getConnection();
    // 定义SQL字符串
    String strSQL = "select * from topic";
    // 创建语句对象
    Statement stmt = conn.createStatement();
    // 执行SQL查询,返回结果集
    ResultSet rs = stmt.executeQuery(strSQL);
    out.println("<table border='1' cellpadding='10'>" +
            "<tr><td width='50' align='center'><b>编号</b></td><td width='100' align='center'><b>栏目</b></td></tr>");
    // 遍历结果集,分行显示在页面
    while (rs.next()) {
        out.println("<tr><td align='center'>" + rs.getInt("tid") + "</td><td align='center'>" + rs.getString("tname") + "</td></tr>");
    }
    out.println("</table>");
%>
</body>
</html>

在web目录里创建news.jsp页面,显示新闻列表

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="net.xmh.dbutil.ConnectionManager" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
<html>
<head>
    <title>新闻列表</title>
</head>
<body>
<%
    // 获取数据库连接
    Connection conn = ConnectionManager.getConnection();
    // 定义SQL字符串
    String strSQL = "select * from news";
    // 创建语句对象
    Statement stmt = conn.createStatement();
    // 执行SQL查询,返回结果集
    ResultSet rs = stmt.executeQuery(strSQL);
    out.println("<table border='1' cellpadding='10'>" +
            "<tr><td width='50' align='center'><b>编号</b></td><td width='100' align='center'><b>标题</b></td>" +
            "<td width='100' align='center'><b>作者</b></td><td width='100' align='center'>" +
            "<b>评论</b></td><td width='100' align='center'><b>摘要</b></td></tr>");
    // 遍历结果集,分行显示在页面
    while (rs.next()) {
        out.println("<tr><td align='center'>" + rs.getInt("nid")
                +"</td><td align='center'>" + rs.getString("ntitle")
                +"</td><td align='center'>" + rs.getString("nauthor")
                +"</td><td align='center'>" + rs.getString("ncontent")
                +"</td><td align='center'>" + rs.getString("nsummary")
                + "</td></tr>");
    }
    out.println("</table>");
%>
</body>
</html>


启动服务器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值