java web 开发 第8章 JSP中使用数据库

这篇具有很好参考价值的文章主要介绍了java web 开发 第8章 JSP中使用数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

连接MySQL数据库

查询记录

更新、添加与删除记录

用结果集操作数据库中的表

预处理语句

事务

分页显示记录


连接MySQL数据库

在JSP中连接MySQL数据库的步骤如下:

1. 下载并安装MySQL数据库,启动MySQL服务。

2. 在MySQL中创建一个数据库和表,用于存储数据。可以使用MySQL自带的命令行工具或者图形化界面工具,例如phpMyAdmin等。

3. 在JSP中使用JDBC连接MySQL数据库,获取数据库连接对象。

4. 使用数据库连接对象创建Statement或者PreparedStatement对象,执行SQL语句。

5. 处理SQL执行结果,关闭数据库连接。

以下是一个简单的JSP连接MySQL数据库并查询数据的示例代码:
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    // 导入JDBC相关的类
    <%@ page import="java.sql.*" %>
    // 定义数据库连接信息
    String url = "jdbc:mysql://localhost:3306/test";
    String user = "root";
    String password = "123456";
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        // 加载MySQL驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        // 获取数据库连接
        conn = DriverManager.getConnection(url, user, password);
        // 创建Statement对象
        stmt = conn.createStatement();
        // 执行SQL查询语句
        String sql = "SELECT * FROM records";
        rs = stmt.executeQuery(sql);
        // 输出查询结果
        while (rs.next()) {
            out.println("id: " + rs.getInt("id") + "<br>");
            out.println("name: " + rs.getString("name") + "<br>");
            out.println("age: " + rs.getInt("age") + "<br>");
            out.println("<hr>");
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

在上面的示例中,我们首先定义了MySQL数据库的连接信息,包括数据库URL、用户名和密码。然后使用`Class.forName()`方法加载MySQL驱动程序,获取数据库连接对象,并使用`createStatement()`方法创建Statement对象,执行SQL查询语句,并使用`ResultSet`对象获取查询结果集,最后遍历结果集输出查询结果。最后,我们在`finally`代码块中关闭数据库连接。

需要注意的是,在实际开发中,我们应该将数据库连接信息配置在配置文件中,然后使用`Properties`对象读取配置文件中的信息,这样可以提高代码的可维护性和安全性。同时,我们也应该尽量避免在JSP页面中直接编写SQL语句,而是应该将数据库操作封装在Java类中,然后在JSP页面中调用这些Java类来执行数据库操作。

查询记录

在JSP中,我们可以使用`Statement`和`PreparedStatement`对象来执行SQL查询语句,从而实现查询数据库中的记录。

以下是一个简单的JSP使用`PreparedStatement`对象查询数据库中的记录的示例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
        // 获取数据库连接
        conn = getConnection();
        // 定义预处理语句
        String sql = "SELECT * FROM records WHERE age > ?";
        stmt = conn.prepareStatement(sql);
        // 设置参数
        stmt.setInt(1, 18);
        // 执行预处理语句
        rs = stmt.executeQuery();
        // 输出结果
        while (rs.next()) {
            out.println("id: " + rs.getInt("id") + "<br>");
            out.println("name: " + rs.getString("name") + "<br>");
            out.println("age: " + rs.getInt("age") + "<br>");
            out.println("<hr>");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

在上面的示例中,我们使用了一个名为`getConnection()`的方法来获取数据库连接,这个方法需要根据具体的数据库类型和配置来实现。另外,我们还使用了`PreparedStatement`对象来执行SQL查询语句,并使用`setInt()`方法将参数设置到占位符中。最后,我们使用`executeQuery()`方法执行SQL语句,并使用`ResultSet`对象获取查询结果集,然后使用`next()`方法遍历结果集,使用`getInt()`、`getString()`等方法获取具体的字段值。

需要注意的是,在使用`PreparedStatement`对象执行SQL语句时,我们应该尽量避免在JSP页面中直接编写SQL语句,而是应该将数据库操作封装在Java类中,然后在JSP页面中调用这些Java类来执行数据库操作。这样可以提高代码的可维护性和安全性。

更新、添加与删除记录

在JSP中,我们可以使用`Statement`和`PreparedStatement`对象来执行SQL语句,从而实现更新、添加和删除数据库中的记录。

以下是一个简单的JSP使用`PreparedStatement`对象添加一条记录的示例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    PreparedStatement stmt = null;
    try {
        // 获取数据库连接
        conn = getConnection();
        // 定义预处理语句
        String sql = "INSERT INTO records (name, age) VALUES (?, ?)";
        stmt = conn.prepareStatement(sql);
        // 设置参数
        stmt.setString(1, "Tom");
        stmt.setInt(2, 20);
        // 执行预处理语句
        int rows = stmt.executeUpdate();
        // 输出结果
        out.println(rows + " rows affected.");
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

在上面的示例中,我们使用了一个名为`getConnection()`的方法来获取数据库连接,这个方法需要根据具体的数据库类型和配置来实现。另外,我们还使用了`PreparedStatement`对象来执行SQL插入语句,并使用`setString()`和`setInt()`方法将参数设置到占位符中。最后,我们使用`executeUpdate()`方法执行SQL语句,并使用返回值获取受影响的行数。

类似地,我们可以使用`PreparedStatement`对象来执行SQL更新语句和SQL删除语句。以下是一个简单的JSP使用`PreparedStatement`对象更新一条记录的示例代码:
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    PreparedStatement stmt = null;
    try {
        // 获取数据库连接
        conn = getConnection();
        // 定义预处理语句
        String sql = "UPDATE records SET age = ? WHERE id = ?";
        stmt = conn.prepareStatement(sql);
        // 设置参数
        stmt.setInt(1, 30);
        stmt.setInt(2, 1);
        // 执行预处理语句
        int rows = stmt.executeUpdate();
        // 输出结果
        out.println(rows + " rows affected.");
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

以下是一个简单的JSP使用`PreparedStatement`对象删除一条记录的示例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    PreparedStatement stmt = null;
    try {
        // 获取数据库连接
        conn = getConnection();
        // 定义预处理语句
        String sql = "DELETE FROM records WHERE id = ?";
        stmt = conn.prepareStatement(sql);
        // 设置参数
        stmt.setInt(1, 1);
        // 执行预处理语句
        int rows = stmt.executeUpdate();
        // 输出结果
        out.println(rows + " rows affected.");
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

需要注意的是,在使用`PreparedStatement`对象执行SQL语句时,我们应该尽量避免在JSP页面中直接编写SQL语句,而是应该将数据库操作封装在Java类中,然后在JSP页面中调用这些Java类来执行数据库操作。这样可以提高代码的可维护性和安全性。

用结果集操作数据库中的表

在JSP中,我们可以使用`ResultSet`对象来操作数据库中的表,`ResultSet`对象表示一个结果集,它包含了一组查询结果的数据行。

以下是一个简单的JSP使用`ResultSet`对象操作数据库中的表的示例代码:
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        // 获取数据库连接
        conn = getConnection();
        // 创建Statement对象
        stmt = conn.createStatement();
        // 执行查询语句
        String sql = "SELECT * FROM records";
        rs = stmt.executeQuery(sql);
        // 处理查询结果
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            // 输出结果
            out.println("id=" + id + ", name=" + name + ", age=" + age + "<br>");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

在上面的示例中,我们使用了一个名为`getConnection()`的方法来获取数据库连接,这个方法需要根据具体的数据库类型和配置来实现。另外,我们还使用了`Statement`对象来执行SQL查询语句,并使用`executeQuery()`方法获取查询结果的`ResultSet`对象。然后我们使用`ResultSet`对象的`next()`方法逐行读取查询结果,并使用`getInt()`和`getString()`等方法获取每一行的数据。

需要注意的是,在使用`ResultSet`对象操作数据库时,我们应该尽量避免在JSP页面中直接编写SQL语句,而是应该将数据库操作封装在Java类中,然后在JSP页面中调用这些Java类来执行数据库操作。这样可以提高代码的可维护性和安全性。

预处理语句

JSP中可以使用预处理语句(PreparedStatement)来执行SQL语句,预处理语句可以有效地防止SQL注入攻击,并提高数据库操作的效率。

预处理语句通常包含一个带有占位符的SQL语句和一组参数,占位符使用`?`表示。在执行预处理语句时,我们需要将参数设置到占位符中,然后执行预处理语句。以下是一个简单的JSP预处理语句的示例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
        // 获取数据库连接
        conn = getConnection();
        // 定义预处理语句
        String sql = "SELECT * FROM records WHERE id = ?";
        stmt = conn.prepareStatement(sql);
        // 设置参数
        stmt.setInt(1, 1);
        // 执行预处理语句
        rs = stmt.executeQuery();
        while (rs.next()) {
            // 处理查询结果
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            // 输出结果
            out.println("id=" + id + ", name=" + name + ", age=" + age + "<br>");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
%>

在上面的示例中,我们使用了一个名为`getConnection()`的方法来获取数据库连接,这个方法需要根据具体的数据库类型和配置来实现。另外,我们还使用了`PreparedStatement`对象来执行SQL语句,并使用`setInt()`方法将参数设置到占位符中。

需要注意的是,预处理语句通常比普通的SQL语句执行速度更快,因为预处理语句可以将SQL语句编译一次,然后多次执行,而普通的SQL语句每次执行都需要重新编译。另外,预处理语句也可以有效地防止SQL注入攻击,因为预处理语句会自动将参数进行转义。

事务

JSP本身并不直接支持事务处理,事务处理通常是在数据库操作层面进行的。在JSP中,我们可以使用Java的事务处理机制来控制数据库操作的事务。

Java事务处理机制通常包括以下几个步骤:

1. 获取数据库连接,并将自动提交设置为false。

2. 开始事务,这通常是通过调用`Connection`对象的`setAutoCommit(false)`方法来实现的。

3. 执行一系列数据库操作,这些操作应该在同一个事务中进行。

4. 如果所有操作都成功,则提交事务,这通常是通过调用`Connection`对象的`commit()`方法来实现的。

5. 如果有任何一个操作失败,则回滚事务,这通常是通过调用`Connection`对象的`rollback()`方法来实现的。

以下是一个简单的JSP事务处理的示例代码:
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Connection conn = null;
    try {
        // 获取数据库连接,并将自动提交设置为false
        conn = getConnection();
        conn.setAutoCommit(false);
        // 执行一系列数据库操作
        insertRecord(conn, record1);
        insertRecord(conn, record2);
        updateRecord(conn, record3);
        // 如果所有操作都成功,则提交事务
        conn.commit();
    } catch (SQLException e) {
        // 如果有任何一个操作失败,则回滚事务
        if (conn != null) {
            conn.rollback();
        }
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
        if (conn != null) {
            conn.close();
        }
    }
%>

在上面的示例中,我们使用了一个名为`getConnection()`的方法来获取数据库连接,这个方法需要根据具体的数据库类型和配置来实现。另外,我们还使用了`insertRecord()`和`updateRecord()`等方法来执行具体的数据库操作,这些方法也需要根据具体的业务逻辑来实现。

需要注意的是,在JSP中使用事务处理时,我们应该尽量避免在JSP页面中直接编写SQL语句,而是应该将数据库操作封装在Java类中,然后在JSP页面中调用这些Java类来执行数据库操作。这样可以提高代码的可维护性和安全性。

分页显示记录

在JSP中分页显示记录可以通过以下步骤实现:

1. 获取总记录数和每页显示的记录数。

2. 计算出总页数,即总记录数除以每页显示的记录数,如果有余数则总页数加1。

3. 根据当前页码和每页显示的记录数,计算出要显示的记录的起始位置。

4. 使用SQL语句查询要显示的记录,限制查询结果的起始位置和记录数。

5. 将查询结果显示在JSP页面上,可以使用JSTL标签库中的<c:forEach>标签遍历查询结果。

6. 在页面上显示分页导航条,包括上一页、下一页、首页和尾页等链接,可以使用JSTL标签库中的<c:if>标签和<c:url>标签生成链接。

以下是一个简单的JSP分页显示记录的示例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
    // 获取当前页码
    int page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
    // 每页显示的记录数
    int pageSize = 10;
    // 查询总记录数
    int total = 100;
    // 计算总页数
    int pageCount = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
    // 计算要显示的记录的起始位置
    int start = (page - 1) * pageSize;
    // 查询要显示的记录
    List<Record> records = queryRecords(start, pageSize);
%>
<table>
    <thead>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>日期</th>
        </tr>
    </thead>
    <tbody>
        <c:forEach var="record" items="${records}">
            <tr>
                <td><c:out value="${record.id}" /></td>
                <td><c:out value="${record.name}" /></td>
                <td><fmt:formatDate value="${record.date}" pattern="yyyy-MM-dd" /></td>
            </tr>
        </c:forEach>
    </tbody>
</table>
<div>
    <c:url var="prevUrl" value="/records.jsp">
        <c:param name="page" value="${page - 1}" />
    </c:url>
    <c:url var="nextUrl" value="/records.jsp">
        <c:param name="page" value="${page + 1}" />
    </c:url>
    <c:url var="firstUrl" value="/records.jsp">
        <c:param name="page" value="1" />
    </c:url>
    <c:url var="lastUrl" value="/records.jsp">
        <c:param name="page" value="${pageCount}" />
    </c:url>
    <c:if test="${page > 1}">
        <a href="<c:out value="${prevUrl}" />">上一页</a>
    </c:if>
    <c:if test="${page < pageCount}">
        <a href="<c:out value="${nextUrl}" />">下一页</a>
    </c:if>
    <a href="<c:out value="${firstUrl}" />">首页</a>
    <a href="<c:out value="${lastUrl}" />">尾页</a>
</div>

在上面的示例中,我们使用了一个名为`queryRecords(int start, int pageSize)`的方法来查询要显示的记录,这个方法需要根据具体的业务逻辑来实现。分页导航条使用了<c:url>标签来生成链接,<c:if>标签来判断是否显示链接。注意要在页面头部引入JSTL标签库,如下所示:
 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

另外,为了防止SQL注入攻击,我们应该将查询参数使用PreparedStatement来设置,而不是直接拼接SQL语句。例如:文章来源地址https://www.toymoban.com/news/detail-735654.html

String sql = "SELECT * FROM records LIMIT ?, ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, start);
stmt.setInt(2, pageSize);
ResultSet rs = stmt.executeQuery();

到了这里,关于java web 开发 第8章 JSP中使用数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jsp 新能源汽车论坛网Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点      JSP 新能源汽车论坛网是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java Web 新能源汽车论坛网 二

    2024年02月09日
    浏览(49)
  • jsp 网络社区便利店系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点      JSP 网络社区便利店系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 jsp 网络社区便利店系统M

    2024年02月12日
    浏览(51)
  • java 会员中心管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

    一、源码特点     JSP 会员中心管理系统 是一套完善的系统源码,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,以及相应配套的设计文档,系统主要采用B/S模式开发。     研究的基本内容是基于Web的会员中心管理系统,使用JSP作为页面开发工具。W

    2024年02月11日
    浏览(61)
  • java 宠物在线商城系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

    一、源码特点     java 宠物在线商城系统是一套完善的java web信息管理系统 servlet+dao+bean mvc模式,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java 宠物

    2024年02月20日
    浏览(45)
  • java 课程签到管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

    一、源码特点     java 课程签到管理系统是一套完善的java web信息管理系统 采用serlvet+dao+bean,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java 课程签

    2024年02月19日
    浏览(42)
  • 【JAVA】Eclipse+MYSQL数据库+JSP+基础Servlet开发JavaWeb学生信息管理系统

    目录 前言 一、搭建环境  二、功能实现、 1、   登陆界面 注册按钮 2、学生信息管理系统主界面 3、dao包  4、用户的信息展示,添加,删除,修改功能(只展示添加代码) 5、学生的信息展示,添加,删除,修改功能(只展示添加代码) 6、成绩的信息展示,添加,删除,修

    2024年02月05日
    浏览(65)
  • JSP在线小说系统用eclipse定制开发mysql数据库BS模式java编程jdbc

    一、源码特点      JSP 在线小说系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。 JSP在线小说系统用eclipse定制开发mysql数据库

    2024年02月12日
    浏览(47)
  • JSP网上手机商城系统 用eclipse定制开发mysql数据库BS模式java编程jdbc

    一、源码特点      JSP 网上手机商城系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。 JSP网上手机商城系统 用eclipse定

    2024年02月13日
    浏览(44)
  • JSP网上订餐管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

    一、源码特点      JSP 网上订餐管理系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。 JSP网上订餐管理系统用eclipse定

    2024年02月12日
    浏览(45)
  • JSP SSM 成果展示系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点      JSP SSM 冬奥建设成果展示系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的 源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为

    2024年02月09日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包