• 使用原生 JDBC 编程与 Java Web 技术实现 用户注册 和 用户登录


    原生JDBC(Java Database Connectivity)是Java平台上用于与关系型数据库进行交互的一种标准API。它允许Java应用程序连接到数据库、执行SQL查询、检索和更新数据等。下面是原生JDBC的详细介绍:

    1. JDBC架构:

    JDBC的核心架构由两个主要部分组成:

    • JDBC API: 这是一组Java类和接口,用于与数据库进行交互。主要包括java.sqljavax.sql包中的类和接口。java.sql包包含了用于管理数据库连接、执行SQL语句和处理结果集的核心类和接口。

    • JDBC驱动程序: JDBC驱动程序是与特定数据库管理系统(如MySQL、Oracle、SQL Server等)相关的库,它实现了JDBC API中的接口。每个数据库都需要对应的JDBC驱动程序来与Java应用程序进行通信。

    2. JDBC基本用法:

    使用JDBC与数据库交互的基本步骤如下:

    • 加载驱动程序: 在使用JDBC之前,需要加载适当的数据库驱动程序。这通常通过Class.forName()方法来实现。例如:

    Class.forName("com.mysql.cj.jdbc.Driver");
    

    建立数据库连接: 使用DriverManager.getConnection()方法来建立与数据库的连接。这将返回一个Connection对象,表示与数据库的连接。

    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
    

    创建Statement对象: 使用Connection对象的createStatement()方法创建一个Statement对象,用于执行SQL语句。

    Statement statement = connection.createStatement();
    

    执行SQL查询: 使用Statement对象的executeQuery()方法来执行SELECT查询,或使用executeUpdate()方法来执行INSERT、UPDATE、DELETE等操作.

    ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
    

    处理结果集: 使用ResultSet对象来处理查询结果。可以使用next()方法逐行遍历结果集,并使用getXXX()方法获取数据。例如:

    1. while (resultSet.next()) {
    2. int id = resultSet.getInt("id");
    3. String username = resultSet.getString("username");
    4. // 处理数据
    5. }

    关闭资源: 在完成数据库操作后,务必关闭连接、Statement和ResultSet等资源,以释放数据库资源。

    1. resultSet.close();
    2. statement.close();
    3. connection.close();

    3. 数据源和连接池:

    在实际应用中,通常会使用连接池来管理数据库连接,以提高性能和资源利用率。常见的Java连接池包括Apache DBCP、C3P0和HikariCP等。连接池可以有效地管理连接的创建和释放,以减少连接的开销。

    4. 事务管理:

    JDBC允许你通过commit()rollback()方法来管理事务。事务是一系列数据库操作的逻辑单元,要么全部成功执行,要么全部失败回滚。可以使用setAutoCommit(false)来禁用自动提交,在事务中执行多个SQL语句,最后根据成功或失败来手动提交或回滚事务。

    5. 预编译语句:

    JDBC允许使用预编译语句(PreparedStatement)来执行带有参数的SQL查询。这可以提高性能,并防止SQL注入攻击。例如:

     
    
    1. String sql = "SELECT * FROM users WHERE username = ?";
    2. PreparedStatement preparedStatement = connection.prepareStatement(sql);
    3. preparedStatement.setString(1, "john");
    4. ResultSet resultSet = preparedStatement.executeQuery();

    6. 批处理操作:

    JDBC支持批处理操作,允许一次性执行多个SQL语句,这可以提高效率。可以使用addBatch()方法将多个SQL语句添加到批处理中,然后使用executeBatch()方法执行它们。

    7. 错误处理:

    在使用JDBC时,要注意处理数据库操作可能抛出的异常。通常使用try-catch块来捕获并处理异常。

    8. 异步操作:

    JDBC 4.2及更高版本支持异步操作,允许在不阻塞主线程的情况下执行数据库操作。这可以提高应用程序的响应性能。

    总之,原生JDBC是与数据库进行交互的基本工具,它提供了灵活性和控制权,但需要开发人员手动管理连接、事务和资源释放。在实际应用中,也可以考虑使用ORM框架(如Hibernate、JPA)来简化数据库交互。

    用户注册和用户登录是一个常见的Web应用程序功能。要实现这两个功能,你需要使用原生JDBC编程来与数据库交互,并结合Java Web技术来创建用户界面和处理用户请求。

    下面是一个简单的示例,演示如何使用JDBC和Java Web技术创建一个简单的用户注册和登录功能。这个示例使用Servlet和JSP来处理Web请求和呈现页面,使用MySQL作为数据库存储用户信息。

    用户注册和用户登录是Web应用程序的常见功能之一,通常需要与数据库进行交互以存储和验证用户信息。以下是使用原生JDBC编程和Java Web技术(Servlet和JSP)实现用户注册和登录的详细步骤:

    步骤1:创建数据库表

    首先,创建一个数据库表来存储用户信息。在这个示例中,我们将使用MySQL数据库。可以使用如下SQL语句创建一个名为 users 的表,用于存储用户名和密码:

    1. CREATE DATABASE user_db;
    2. USE user_db;
    3. CREATE TABLE users (
    4. id INT AUTO_INCREMENT PRIMARY KEY,
    5. username VARCHAR(255) NOT NULL,
    6. password VARCHAR(255) NOT NULL
    7. );

    这个表包含三个字段:id(自增主键)、username(用户名)和password(密码)。

    步骤2:创建Java Web项目

    创建一个Java Web项目,包括Servlet和JSP文件。你可以使用Eclipse、IntelliJ IDEA或其他Java Web开发工具来创建项目。项目结构通常如下:

    1. - src
    2. - com
    3. - myapp
    4. - User.java (用户实体类)
    5. - RegisterServlet.java (处理用户注册请求的Servlet)
    6. - LoginServlet.java (处理用户登录请求的Servlet)
    7. - WebContent
    8. - WEB-INF
    9. - web.xml (Web应用程序配置文件)
    10. - register.jsp (用户注册页面)
    11. - login.jsp (用户登录页面)
    12. - welcome.jsp (登录成功后的欢迎页面)

    步骤3:实现用户实体类

    创建一个用户实体类 User.java,用于表示用户信息。这个类应该包括用户名和密码的属性以及相应的构造函数和getter方法。

    1. package com.myapp;
    2. public class User {
    3. private String username;
    4. private String password;
    5. public User(String username, String password) {
    6. this.username = username;
    7. this.password = password;
    8. }
    9. public String getUsername() {
    10. return username;
    11. }
    12. public String getPassword() {
    13. return password;
    14. }
    15. }

    步骤4:实现用户注册和登录的Servlet

    步骤4:实现用户注册和登录的Servlet

    在Java Web项目中,创建两个Servlet来处理用户注册和登录请求。

    RegisterServlet.java

    这个Servlet用于处理用户注册请求。它接收用户输入的用户名和密码,然后将它们插入到数据库表中。

    1. package com.myapp;
    2. import java.io.IOException;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.PreparedStatement;
    6. import javax.servlet.ServletException;
    7. import javax.servlet.annotation.WebServlet;
    8. import javax.servlet.http.HttpServlet;
    9. import javax.servlet.http.HttpServletRequest;
    10. import javax.servlet.http.HttpServletResponse;
    11. @WebServlet("/register")
    12. public class RegisterServlet extends HttpServlet {
    13. private static final long serialVersionUID = 1L;
    14. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    15. throws ServletException, IOException {
    16. String username = request.getParameter("username");
    17. String password = request.getParameter("password");
    18. try {
    19. // 获取数据库连接
    20. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_db", "username", "password");
    21. // 创建SQL语句
    22. String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
    23. // 创建PreparedStatement并设置参数
    24. PreparedStatement statement = conn.prepareStatement(sql);
    25. statement.setString(1, username);
    26. statement.setString(2, password);
    27. // 执行SQL语句
    28. statement.executeUpdate();
    29. // 关闭数据库连接
    30. statement.close();
    31. conn.close();
    32. } catch (Exception e) {
    33. e.printStackTrace();
    34. }
    35. response.sendRedirect("login.jsp"); // 注册成功后重定向到登录页面
    36. }
    37. }

    LoginServlet.java

    这个Servlet用于处理用户登录请求。它接收用户输入的用户名和密码,并在数据库中查找匹配的记录。

    1. package com.myapp;
    2. import java.io.IOException;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.PreparedStatement;
    6. import java.sql.ResultSet;
    7. import javax.servlet.ServletException;
    8. import javax.servlet.annotation.WebServlet;
    9. import javax.servlet.http.HttpServlet;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. import javax.servlet.http.HttpSession;
    13. @WebServlet("/login")
    14. public class LoginServlet extends HttpServlet {
    15. private static final long serialVersionUID = 1L;
    16. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    17. throws ServletException, IOException {
    18. String username = request.getParameter("username");
    19. String password = request.getParameter("password");
    20. try {
    21. // 获取数据库连接
    22. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_db", "username", "password");
    23. // 创建SQL查询语句
    24. String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
    25. // 创建PreparedStatement并设置参数
    26. PreparedStatement statement = conn.prepareStatement(sql);
    27. statement.setString(1, username);
    28. statement.setString(2, password);
    29. // 执行查询
    30. ResultSet resultSet = statement.executeQuery();
    31. if (resultSet.next()) {
    32. // 用户名和密码匹配,允许登录
    33. User user = new User(username, password);
    34. HttpSession session = request.getSession();
    35. session.setAttribute("user", user); // 将用户信息存储在Session中
    36. response.sendRedirect("welcome.jsp"); // 登录成功后重定向到欢迎页面
    37. } else {
    38. response.sendRedirect("login.jsp?error=true"); // 登录失败,显示错误消息
    39. }
    40. resultSet.close();
    41. statement.close();
    42. conn.close();
    43. } catch (Exception e) {
    44. e.printStackTrace();
    45. }
    46. }
    47. }

    LoginServlet.java

    这个Servlet用于处理用户登录请求。它接收用户输入的用户名和密码,并在数据库中查找匹配的记录。

    1. package com.myapp;
    2. import java.io.IOException;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.PreparedStatement;
    6. import java.sql.ResultSet;
    7. import javax.servlet.ServletException;
    8. import javax.servlet.annotation.WebServlet;
    9. import javax.servlet.http.HttpServlet;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. import javax.servlet.http.HttpSession;
    13. @WebServlet("/login")
    14. public class LoginServlet extends HttpServlet {
    15. private static final long serialVersionUID = 1L;
    16. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    17. throws ServletException, IOException {
    18. String username = request.getParameter("username");
    19. String password = request.getParameter("password");
    20. try {
    21. // 获取数据库连接
    22. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_db", "username", "password");
    23. // 创建SQL查询语句
    24. String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
    25. // 创建PreparedStatement并设置参数
    26. PreparedStatement statement = conn.prepareStatement(sql);
    27. statement.setString(1, username);
    28. statement.setString(2, password);
    29. // 执行查询
    30. ResultSet resultSet = statement.executeQuery();
    31. if (resultSet.next()) {
    32. // 用户名和密码匹配,允许登录
    33. User user = new User(username, password);
    34. HttpSession session = request.getSession();
    35. session.setAttribute("user", user); // 将用户信息存储在Session中
    36. response.sendRedirect("welcome.jsp"); // 登录成功后重定向到欢迎页面
    37. } else {
    38. response.sendRedirect("login.jsp?error=true"); // 登录失败,显示错误消息
    39. }
    40. resultSet.close();
    41. statement.close();
    42. conn.close();
    43. } catch (Exception e) {
    44. e.printStackTrace();
    45. }
    46. }
    47. }

    步骤5:创建用户注册和登录页面

    创建用户注册页面 register.jsp 和用户登录页面 login.jsp。这些JSP页面用于接收用户输入,并将数据发送到相应的Servlet进行处理。

    register.jsp

    1. User Registration
    2. User Registration

    3. "register" method="post">
    4. "text" id="username" name="username" required>
    5. "password" id="password" name="password" required>
    6. "submit" value="Register">

    login.jsp

    1. User Login
    2. User Login

    3. "login" method="post">
    4. "text" id="username" name="username" required>

  • 相关阅读:
    人工智能基础_机器学习046_OVR模型多分类器的使用_逻辑回归OVR建模与概率预测---人工智能工作笔记0086
    【OpenCV】生成透明的PNG图像
    东航携手抖音生活服务开启机票首播,推出国内、国际超值机票次卡
    docker 命令
    Drecom 的《Eternal Crypt - Wizardry BC -》加入 The Sandbox 啦!
    无线图传模块选型参考
    Vue3 源码阅读(12):组件化 —— KeepAlive
    《Head First HTML5 javascript》第2章 数据存储 知识点总结
    2021 年的 Flutter 状态管理:如何选择?
    spring1:spring简介
  • 原文地址:https://blog.csdn.net/qq_57747969/article/details/132656450