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中八种单例创建方式 1. 饿汉式 饿汉式是最基本的实现方式,它在类加载的时候就创建了对象实例。 public class Singleton { private stati…

    Java 2023年5月26日
    00
  • Java中的StackOverflowError是什么?

    Java中的StackOverflowError是一种运行时异常,表示在程序运行中调用了过多的方法导致方法调用栈溢出。 在Java中,每个方法的调用会在堆栈中创建一个称为“栈帧”的内存区域,该区域用于存储方法调用的参数、局部变量和返回地址等信息。当程序调用嵌套方法时,每个方法的栈帧将被逐个压入栈中。当方法返回时,其栈帧将被弹出并释放以供下次使用。如果堆栈不能…

    Java 2023年4月27日
    00
  • Java Properties作为集合三个方法详解

    当我们使用Java进行编程时,经常需要使用配置文件来存储一些关键的配置信息,于是Java提供了一个名为Properties的类来处理这个问题。Properties是一个Map集合,其中的key和value都必须是字符串类型。下面将详细讲解Java Properties作为集合的三个常用方法:getProperty、setProperty和load。 getP…

    Java 2023年6月15日
    00
  • 如何解决通过spring-boot-maven-plugin package失败问题

    当使用 spring-boot-maven-plugin 插件对 Spring Boot 项目进行打包时,可能会遇到 “package 失败”的问题。可能的原因包括: 项目依赖引用出错 插件版本不兼容 操作系统不支持 Maven 版本问题 要解决这个问题,可以采用以下完整攻略: 1. 检查依赖 首先,检查项目依赖是否正确。可以通过以下两种方式进行检查: 使用…

    Java 2023年5月19日
    00
  • 之前很火给女朋友推送微信服务号消息是怎么做的?

    经过了几天的奋战,终于把微信服务号的模板消息给写完了。后端其实没花多少时间,因为之前已经有同学提过pull request了,我在这基础之上简单优化下就完事了,主要的时间都是花在前端上,对前端页面和参数的适配比较麻烦。 消息推送平台?推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。 https://gitee.com/zh…

    Java 2023年4月18日
    00
  • Java常用工具类汇总 附示例代码

    Java常用工具类汇总 附示例代码 在Java编程中,我们常常要使用一些工具类来方便我们进行开发。本文将会汇总一些Java常用的工具类,旨在提供一个全面的工具类汇总供大家参考。我们将会介绍以下常用工具类: StringUtils:用于操作字符串的工具类。 DateUtils:用于时间和日期格式化、计算等操作的工具类。 MathUtils:用于数学计算的工具类…

    Java 2023年5月23日
    00
  • Java LinkedList实现班级信息管理系统

    Java LinkedList实现班级信息管理系统 概述 LinkedList是Java中的一种常用数据结构,它实现了List接口,可以存储任意对象。在班级信息管理系统中,我们可以利用LinkedList来存储学生对象。 实现步骤 1. 定义Student类 在Java LinkedList实现班级信息管理系统中,我们需要先定义一个Student类来表示一个…

    Java 2023年5月24日
    00
  • Java-方法重载

    方法重载 同一个类中,多个方法的名称相同,但是形参列表不同。 方法重载的形式 同一个类中,方法名称相同、形参列表不同 形参的个数、类型、顺序不同 形参的名称无关 方法重载的调用流程 当程序调用一个重载方法时,编译器会根据参数列表的不同自动匹配最合适的方法,这种机制叫做方法重载的“重载解析”。 根据方法名和参数列表的数量、类型、顺序来寻找匹配调用方法的方法。 …

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