Java原生操作JDBC连接以及原理详解

Java原生操作JDBC连接以及原理详解

JDBC(Java Database Connectivity,java数据连接)是java语言访问数据库的标准规范,使用JDBC可以方便地连接数据库、执行SQL语句、获取结果等。本文将介绍如何在Java中原生操作JDBC连接,并对JDBC连接的一些原理进行详细解释。

JDBC的工作原理

JDBC的工作原理主要是:使用JDBC驱动连接数据库,JDBC驱动会根据连接字符串连接数据库,并返回一个Connection对象,通过Connection对象可以对数据库进行操作,包括执行SQL语句、获取PreparedStatement、Statement、CallableStatement对象等。

JDBC驱动在连接数据库时会根据连接字符串中指定的数据库的类型和版本选择相应的操作方式,不同的数据库可能会需要不同的JDBC驱动。例如,连接MySQL需要使用MySQL Connector/J,而连接Oracle需要使用Oracle JDBC驱动程序等。

JDBC连接的操作步骤

下面将介绍使用JDBC连接数据库的操作步骤:

  1. 加载JDBC驱动程序

在使用JDBC API之前,需要先加载相应的JDBC驱动程序,可以通过Class.forName()或者DriverManager.registerDriver()方法来加载JDBC驱动程序。

    Class.forName("com.mysql.cj.jdbc.Driver");
  1. 建立数据库连接

连接数据库的方法是DriverManager.getConnection(),可以通过传入连接字符串、数据库用户名、密码来连接数据库。getConnection()方法返回一个Connection对象,表示连接到的数据库实例。

    String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
    String user = "root";
    String password = "root";
    Connection conn = DriverManager.getConnection(url, user, password);
  1. 创建Statement对象

创建Statement对象,用于执行SQL语句。Statement对象有三种类型:Statement(用于执行一般的SQL语句)、PreparedStatement(用于执行带参数的SQL语句)、CallableStatement(用于执行存储过程)。

    Statement stmt = conn.createStatement();
  1. 执行SQL语句

通过Statement对象的execute()、executeUpdate()、executeQuery()方法来执行SQL语句,这里分别对应执行任意SQL语句、执行INSERT、UPDATE、DELETE等SQL语句、执行SELECT语句的操作。

    // 执行INSERT语句
    String sql = "INSERT INTO user(id, name, age) VALUES(1, '张三', 18)";
    int rows = stmt.executeUpdate(sql);

    // 执行SELECT语句
    String sql = "SELECT * FROM user";
    ResultSet rs = stmt.executeQuery(sql);
  1. 关闭数据库连接

最后,使用Connection对象的close()方法关闭数据库连接,释放相关资源。

    conn.close();

示例1:使用JDBC连接MySQL数据库

下面是一个使用JDBC连接MySQL数据库的示例,首先在pom.xml文件中添加MySQL Connector/J的依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>

然后使用如下代码来执行SQL语句:

import java.sql.*;

public class App {

    public static void main(String[] args) throws Exception {
        // 加载JDBC驱动程序
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 建立数据库连接
        String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";
        Connection conn = DriverManager.getConnection(url, user, password);

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

        // 执行INSERT语句
        String sql = "INSERT INTO user(id, name, age) VALUES(1, '张三', 18)";
        int rows = stmt.executeUpdate(sql);
        System.out.printf("INSERT影响了%d行数据\n", rows);

        // 执行SELECT语句
        sql = "SELECT * FROM user";
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            System.out.printf("id=%d, name=%s, age=%d\n", id, name, age);
        }

        // 关闭数据库连接
        conn.close();
    }
}

示例2:使用JDBC连接SQLite数据库

下面是一个使用JDBC连接SQLite数据库的示例,首先需要在pom.xml文件中添加SQLite JDBC的依赖:

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.36.0.3</version>
</dependency>

然后使用如下代码来连接SQLite数据库:

import java.sql.*;

public class App {

    public static void main(String[] args) throws Exception {
        // 加载JDBC驱动程序
        Class.forName("org.sqlite.JDBC");

        // 建立数据库连接
        String dbfile = "test.db";
        Connection conn = DriverManager.getConnection("jdbc:sqlite:" + dbfile);

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

        // 执行CREATE TABLE语句
        String sql = "CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
        int rows = stmt.executeUpdate(sql);
        System.out.printf("CREATE TABLE影响了%d行数据\n", rows);

        // 执行INSERT语句
        sql = "INSERT INTO user(id, name, age) VALUES(1, '张三', 18)";
        rows = stmt.executeUpdate(sql);
        System.out.printf("INSERT影响了%d行数据\n", rows);

        // 执行SELECT语句
        sql = "SELECT * FROM user";
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            System.out.printf("id=%d, name=%s, age=%d\n", id, name, age);
        }

        // 关闭数据库连接
        conn.close();
    }
}

这里使用的是SQLite数据库,连接字符串的格式是"jdbc:sqlite:数据库文件路径"。需要注意的是,如果数据库文件不存在,会自动创建一个新的数据库文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java原生操作JDBC连接以及原理详解 - Python技术站

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

相关文章

  • java运行时数据区域和类结构详解

    关于“java运行时数据区域和类结构详解”的攻略,下面是详细讲解: Java运行时数据区域 Java虚拟机在执行Java程序时,会将它所管理的内存划分成不同的数据区域,分别用于存储不同类型的数据。主要分为以下几个部分: 程序计数器 程序计数器是一块较小的内存空间,它的作用是记录当前线程执行的字节码的位置。程序计数器一般不会出现OutOfMemoryError…

    Java 2023年5月26日
    00
  • Java实现实时监控目录下文件变化的方法

    Java实现实时监控目录下文件变化的方法可以通过使用Java 7或更高版本中的WatchService类来实现。下面是实现此方法的详细步骤。 第一步:创建WatchService对象 使用Java的标准库提供的WatchService类,可以监控文件系统中的更改。可以通过以下方式创建WatchService对象: WatchService watchServ…

    Java 2023年5月20日
    00
  • Java泛型与数据库应用实例详解

    Java泛型与数据库应用实例详解 什么是Java泛型? Java泛型是Java SE 5中引入的一项语言特性,它提供了一种编写泛化代码的方法,能够提高代码的通用性和复用性,从而提高了代码的可维护性和可扩展性。 Java泛型的语法 Java泛型使用尖括号<>来规定类型参数,语法格式如下: public class GenericClass<T…

    Java 2023年5月20日
    00
  • Java的对象包装器 & 自动装箱

    有时,需要将 int 这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer 类对应基本类型 int。通常,这些类被称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void 和 Boolean(前 6 个类派生于公共的父类…

    Java 2023年5月2日
    00
  • SpringBoot自动配置特点与原理详细分析

    一、SpringBoot自动配置特点与原理分析 自动配置原理 SpringBoot的自动配置背后的原理是,通过条件注解来根据已有的bean、属性和类路径等来做出判断,自动调整项目的配置。 自动配置特点 约定优于配置:SpringBoot的自动配置遵循约定优于配置的原则,框架尽量避免使用XML等外置文件进行配置,采用内置默认配置的方式进行配置。 基于条件注解:…

    Java 2023年5月15日
    00
  • Java 如何优雅的拷贝对象属性

    当我们需要在 Java 中将一个类的属性值赋值给另一个类时,常见的做法是手动逐个拷贝属性值。但是,这种方法在有大量属性需要拷贝时非常繁琐且容易出错。因此,我们需要一种更优雅的方式来完成对象属性的拷贝,下面是一种实现方式和示例说明。 使用 BeanUtils BeanUtils 是一款常用的 Java 工具包,其中提供了许多方便的工具方法,包括对象属性的复制和…

    Java 2023年5月26日
    00
  • 自定义feignClient的常见坑及解决

    下面是关于自定义FeignClient常见的坑点及解决方案的攻略。 什么是FeignClient Feign是一个轻量级HTTP客户端,它由Netflix公司开源,并且已有多个版本。FeignClient是Feign的核心概念之一,它可以让我们更便捷地使用HTTP服务。 自定义FeignClient的常见坑点 坑点一:自定义的FeignClient无法注入 …

    Java 2023年5月20日
    00
  • Java编程实现的二维数组转置功能示例

    下面我来详细讲解“Java编程实现的二维数组转置功能示例”的完整攻略。 什么是二维数组转置? 二维数组转置就是将原本按行存储的二维数组,按列存储重新排列的过程。例如,原先的二维数组表示为: 1 2 3 4 5 6 经过转置之后,变成了: 1 4 2 5 3 6 实现二维数组转置的方法 实现二维数组转置的方法有很多种,本篇文章主要介绍两种方式: 方法一:使用一…

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