java 使用JDBC构建简单的数据访问层实例详解

下面我来详细讲解如何使用Java JDBC构建简单的数据访问层实例。

1. JDBC概述

Java数据库连接(Java Database Connectivity,简称JDBC),是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,目前最新版是JDBC 4.3。

JDBC API提供了访问多种关系型数据库的标准方法,包括连接数据库、执行SQL语句、处理结果集等。使用JDBC时,需要导入Java SE中的jdbc.jar包。

2. JDBC实现步骤

使用JDBC实现数据访问层主要包括以下步骤:

  1. 加载JDBC驱动程序
  2. 获得数据库连接
  3. 创建Statement对象
  4. 执行SQL语句
  5. 处理结果集
  6. 释放资源

具体实现步骤如下:

//导入包
import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) {
        //1. 加载JDBC驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("JDBC driver loaded");
        } catch (ClassNotFoundException e) {
            System.out.println("Failed to load JDBC driver");
            e.printStackTrace();
        }

        Connection conn = null;
        Statement stmt = null;
        try {
            //2. 获得数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT%2B8", "root", "root");

            //3. 创建Statement对象
            stmt = conn.createStatement();

            //4. 执行SQL语句
            String sql = "SELECT * FROM user";
            ResultSet rs = stmt.executeQuery(sql);

            //5. 处理结果集
            while(rs.next()) {
                System.out.println(rs.getString("name") + " " + rs.getInt("age"));
            }

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6. 释放资源
            try {
                if(stmt != null) stmt.close();
                if(conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

上面的代码中,我们使用MySQL数据库作为示例,其他关系型数据库的使用方法基本相同。

3. 示例1

假设我们需要实现用户注册功能,包括插入用户名和密码到数据库中。代码如下:

//导入包
import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) {
        //1. 加载JDBC驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("JDBC driver loaded");
        } catch (ClassNotFoundException e) {
            System.out.println("Failed to load JDBC driver");
            e.printStackTrace();
        }

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            //2. 获得数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT%2B8", "root", "root");

            //3. 创建PreparedStatement对象
            String sql = "INSERT INTO user(name, password) VALUES(?,?)";
            pstmt = conn.prepareStatement(sql);

            //4. 设置参数
            pstmt.setString(1, "Tom");
            pstmt.setString(2, "123456");

            //5. 执行SQL语句
            int result = pstmt.executeUpdate();
            System.out.println("Insert count: " + result);

            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6. 释放资源
            try {
                if(pstmt != null) pstmt.close();
                if(conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

上面的代码中,我们使用PreparedStatement对象来避免SQL注入问题,还使用了连接池来提高性能。

4. 示例2

下面我们再来看一个示例,假设我们需要实现分页查询功能。代码如下:

//导入包
import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) {
        int page = 2;
        int pageSize = 10;

        //1. 加载JDBC驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("JDBC driver loaded");
        } catch (ClassNotFoundException e) {
            System.out.println("Failed to load JDBC driver");
            e.printStackTrace();
        }

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            //2. 获得数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT%2B8", "root", "root");

            //3. 创建PreparedStatement对象
            String sql = "SELECT * FROM user LIMIT ?,?";
            pstmt = conn.prepareStatement(sql);

            int start = (page - 1) * pageSize;
            pstmt.setInt(1, start);
            pstmt.setInt(2, pageSize);

            //4. 执行SQL语句
            rs = pstmt.executeQuery();

            //5. 处理结果集
            while(rs.next()) {
                System.out.println(rs.getString("name") + " " + rs.getInt("age"));
            }

            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6. 释放资源
            try {
                if(rs != null) rs.close();
                if(pstmt != null) pstmt.close();
                if(conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

上面的代码中,我们使用了LIMIT语句来实现分页查询,其中page和pageSize是用户传递的参数。

总结

以上就是使用Java JDBC构建简单的数据访问层实例的攻略,主要包括了JDBC概述、实现步骤以及两个示例。如有任何问题,欢迎留言讨论。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 使用JDBC构建简单的数据访问层实例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解Java中运算符及用法

    详解Java中运算符及用法 Java中运算符可以分为算术运算符、关系运算符、逻辑运算符、位运算符、三目运算符等类型。下面逐一介绍这些类型的运算符及其用法。 算术运算符 Java中的算术运算符包括加减乘除、取余等。 加减乘除运算符 运算符 描述 示例 + 加号:相加运算符 5+2=7 – 减号:相减运算符 5-2=3 * 乘号:相乘运算符 5*2=10 / 除…

    Java 2023年5月26日
    00
  • Spring Security如何实现升级密码加密方式详解

    Spring Security是一个基于Spring框架的安全性框架,可以为Web应用程序提供身份验证、授权、防止CSRF攻击等功能。密码加密方式是Spring Security保护用户密码的一种方式,可以有效防止外部攻击者获取用户密码信息。在安全性方面,密码加密方式的保护能力越强,用户密码的安全性也就越高。下面,就让我们来详细讲解Spring Securi…

    Java 2023年5月20日
    00
  • Java实现的执行python脚本工具类示例【使用jython.jar】

    Java实现的执行python脚本工具类示例【使用jython.jar】 如果我们需要在Java的项目中执行Python脚本,有多种方式可以实现,其中一种就是使用Jython。Jython是一个用Java语言实现的Python解释器,在Java项目中,使用Jython可以让我们无需安装Python解释器,即可使用Python的所有特性。 以下是Java实现的…

    Java 2023年5月24日
    00
  • java socket实现聊天室 java实现多人聊天功能

    下面为您详细讲解 Java Socket 实现聊天室的完整攻略。 一、概述 Java Socket 是 Java 语言提供的一种基于网络通信的 API,它可以实现两台或多台计算机之间的数据交换。聊天室是一种基于网络通信的应用程序,Java Socket 可以通过编写网络通信代码来实现聊天室功能。 二、实现步骤 1. 创建 Socket 服务器 首先需要创建一…

    Java 2023年5月24日
    00
  • Struts2 Result 返回JSON对象详解

    下面我为你详细讲解“Struts2 Result 返回JSON对象详解”的完整攻略。 什么是 JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,也易于计算机解析和生成。 JSON 是一种基于文本的格式,可用于在不同程序之间传递数据。JSON 格式类似于 XML,但是相比之下更加简洁和易于…

    Java 2023年5月20日
    00
  • java Scanner输入数字、字符串过程解析

    接下来我将为您提供关于Java中Scanner输入数字、字符串的详细描述。 Scanner类 Java中的Scanner类提供了一种可以解析基本数据类型和字符串的简便方法。Scanner可以从文件、输入流、文本字符串和其他源读取格式化的输入内容。我们可以使用Scanner进行数字和字符串输入处理。 以下是Scanner类的构造方法: Scanner(Inpu…

    Java 2023年5月27日
    00
  • JSP Session超时设置的实现方法

    JSP Session超时设置是指当用户在一段时间内没有活动,Session将被自动销毁。下面我将为你详细讲解JSP Session超时设置的实现方法: 步骤一:设置web.xml文件 在web.xml文件中设置Session超时时间,可以使用以下步骤: 在web.xml文件中加入以下代码: <session-config> <sessio…

    Java 2023年6月15日
    00
  • 深入浅出Java中重试机制的多种方式

    深入浅出Java中重试机制的多种方式 在开发中,有时会需要对某些操作进行多次尝试,以增加操作的稳定性和可靠性。这时,使用重试机制可以很好地解决这一问题。本文将详细介绍Java中重试机制的多种实现方式。 1. 基于while循环的重试机制 最简单的重试机制就是在while循环中执行某个操作,并在某些限定条件下进行多次尝试。例如以下示例代码: int count…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部