当前位置: 首页 > news >正文

【Java 基础】33 JDBC

文章目录

    • 1. 数据库连接
      • 1)加载驱动
      • 2)建立连接
    • 2. 常见操作
      • 1)创建表
      • 2)插入数据
      • 3)查询数据
      • 4)使用 PreparedStatement
      • 5)事务管理
    • 3. 注意事项
    • 总结

Java Database Connectivity(JDBC)是 Java 语言中用于与数据库进行交互的 API。它提供了一组类和接口,使得 Java 程序能够连接到各种关系型数据库,并执行查询、更新等数据库操作。本文将深入介绍 Java JDBC 的基本概念、数据库连接的建立,以及常见的数据库操作。

1. 数据库连接

数据库连接是通过 JDBC 驱动程序与数据库之间建立的。它包含了与数据库通信所需的信息,如用户名、密码等。连接成功后,可以创建 Statement 对象用于执行 SQL 查询。

使用 JDBC 连接数据库的步骤通常为:

在这里插入图片描述

1)加载驱动

数据库驱动程序是 JDBC 的核心组件之一。它是一个实现了 JDBC 接口的类,用于与特定的数据库进行通信。不同的数据库有不同的驱动程序,例如,MySQL 驱动、PostgreSQL 驱动等。在连接数据库之前,需要加载相应的数据库驱动程序。这可以通过 Class.forName() 方法来完成

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

2)建立连接

JDBC URL 是连接数据库的标准格式,包含了数据库的地址、端口、数据库名称等信息

它的格式通常为:

jdbc:数据库类型://主机:端口/数据库名称

例如,连接到 MySQL 数据库的 JDBC URL 可能如下:

jdbc:mysql://db-server:3306/test

使用 DriverManager.getConnection() 方法来建立数据库连接:

javaCopy codeString url = "jdbc:mysql://db-server:3306/test";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);

2. 常见操作

我们在开发中常用的操作大概有,插入数据、查询数据、事务等等

在这里插入图片描述

1)创建表

使用 CREATE TABLE IF NOT EXISTS 语句创建名为 t_user 的表,该表包含 idnameage 列。

String createTableSQL = "CREATE TABLE IF NOT EXISTS t_user (" +"id INT PRIMARY KEY AUTO_INCREMENT," +"name VARCHAR(255)," +"age INT)";
try (PreparedStatement preparedStatement = connection.prepareStatement(createTableSQL)) {preparedStatement.execute();
}

2)插入数据

使用 INSERT INTO 语句向表中插入一条数据。

String insertDataSQL = "INSERT INTO t_user (name, age) VALUES (?, ?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(insertDataSQL)) {preparedStatement.setString(1, "Cheney");preparedStatement.setInt(2, 18);preparedStatement.executeUpdate();
}

3)查询数据

使用 SELECT * FROM t_user 查询表中的所有数据,并打印结果。

String queryDataSQL = "SELECT * FROM t_user";
try (PreparedStatement preparedStatement = connection.prepareStatement(queryDataSQL)) {try (ResultSet resultSet = preparedStatement.executeQuery()) {while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);}}
}

4)使用 PreparedStatement

PreparedStatement 可以提高执行 SQL 语句的性能,并且能够更好地防止 SQL 注入攻击

String sql = "INSERT INTO t_user (name, age) VALUES (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, "cheney");
preparedStatement.setInt(2, 18);int num = preparedStatement.executeUpdate();

5)事务管理

使用 Connection 对象的 setAutoCommit() 方法来开启或关闭事务,并通过 commit()rollback() 方法来提交或回滚事务

try {// 关闭事务的自动提交connection.setAutoCommit(false);// insert等操作// 手动提交事务connection.commit();
} catch (SQLException e) {// 出错误时 事务回滚connection.rollback();
} finally {// 恢复事务的自动提交connection.setAutoCommit(true);
}

3. 注意事项

  • 资源的释放

    使用完 ConnectionStatementResultSet 后,务必及时关闭资源,以免资源泄漏。

     try {// 执行数据库操作} finally {// 关闭资源if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}
    }
    
  • 异常处理

    在与数据库交互时,务必捕获并处理可能发生的 SQLException

    try {// 执行数据库操作
    } catch (SQLException e) {// 处理异常e.printStackTrace();
    }
    
  • 连接池

    在实际应用中,考虑使用连接池来管理数据库连接,以提高性能和资源利用率。

总结

Java JDBC 提供了连接和操作关系型数据库的标准接口,通过这些接口,我们可以在 Java 程序中执行各种数据库操作。本文深入介绍了 JDBC 的基本概念、建立数据库连接的步骤,以及常见的数据库操作。通过合理使用 JDBC,我们可以轻松地与数据库进行交互,实现数据的存取和管理。

http://www.lryc.cn/news/266269.html

相关文章:

  • Unity中Shader缩放矩阵
  • Nessus详细安装-windows (保姆级教程)
  • Stream流的简单使用
  • 智能优化算法应用:基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • vue和react diff的详解和不同
  • 智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 10:IIC通信
  • 互联网上门洗衣洗鞋小程序优势有哪些?
  • Java中如何优雅地根治null值引起的Bug问题
  • C# WPF上位机开发(子窗口通知父窗口更新进度)
  • XUbuntu22.04之跨平台容器格式工具:MKVToolNix(二百零三)
  • vue中的生命周期和VueComponent实例对象
  • Hooked协议掀起WEB3新浪潮
  • 【图文教程】windows 下 MongoDB 介绍下载安装配置
  • 算法复杂度-BigO表示法
  • 测试理论知识五:功能测试、系统测试、验收测试、安装测试、测试的计划与控制
  • 太阳能爆闪警示灯
  • 怎么为pdf文件添加水印?
  • 基于ssm医药信息管理系统论文
  • Ceph存储体系架构?
  • 详解现实世界资产(RWAs)
  • Windows漏洞利用开发——利用ROP绕过DEP保护
  • 合并两个有序链表算法(leetcode第21题)
  • 二维码初体验 com.google.zxing 实现续 - web api封装
  • Hadoop入门学习笔记——四、MapReduce的框架配置和YARN的部署
  • list集合
  • Vue3学习(后端开发)
  • 爬虫字典生成工具,CeWL使用教程
  • 消息队列之关于如何实现延时队列
  • Linux Shell 002-基础知识