JDBC初体验(一)

news2025/1/13 7:42:33

一、JDBC概述

JDBC(Java DateBase Connectivity)是Java数据库连接技术的简称,提供连接各种常用数据库的能力

1.1 JDBC工作原理

JDBC API

提供者:Sun公司

作用:Java访问数据库的标准规范。提供给程序员调用的接口与类,集成在java.sql和javax.sql包中

DriverManager(驱动管理者)

提供者:Sun公司

作用:管理各种不同的JDBC驱动,并获取数据库连接

JDBC驱动

提供者:各大数据库厂商

作用:JDBC是接口,而JDBC驱动才是接口的实现。每个数据库厂商都有自己的驱动,用来连接自己公司的数据库

1.2 JDBC核心API简介

JDBC API的主要功能:与数据库建立连接、执行SQL语句、处理结果和释放资源

API名称API作用
DriverManager注册驱动,获取Connection连接对象
Connection负责连接数据库并担任传送数据的任务,最为重要的就是用来产生Statement对象
Statement负责向数据库发送SQL语句,这样数据库就会执行发送过来的SQL语句
ResultSetResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生,结果集是一个二维的表格

二、JDBC开发步骤

JDBC编程模板

①加载驱动

DriverManager用于加载驱动,并创建与数据库的连接,该API常用方法:

  • DriverManager.registerDriver(new Driver())
  • DriverManager.getConnection(url,user,password)

注意:在实际开发中不推荐采用registerDriver方法注册驱动,原因:

  1. 查看Driver源代码可以看到,如果采取该方式,会导致驱动程序注册两次,从而导致内存中会存在两个Driver对象
  2. 程序依赖MySQL的API,脱离MySQL的jar包,程序将无法编译,将来程序切换底层数据库的话会非常麻烦

②获取Connection对象

username和password是登录数据库的用户名和密码

url用来找到要连接数据库的“网址”。MySQL的URL:

jdbc:mysql://localhost:3306/myschool

JDBC规定url的格式由三部分组成,每个部分使用冒号分隔:

  • 第一部分是jdbc,是固定的
  • 第二部分是数据库厂商名称
  • 第三部分是数据库服务器的IP地址(localhost)、端口号(3306),已经数据库名称(该章节以数据库myschool作为演示)组成

Connection接口的常用方法

方法名方法的作用
createStatement()创建向数据库发送sql的statement对象
prepareStatement(sql)创建向数据库发送预编译sql的prepareStatement对象
prepareCall(sql)创建执行存储过程的callbleStatement对象
setAutoCommit(bollean autoCommit)设置事务是否自动提交
commit()在此连接上提交事务
rollback()在此连接上回滚事务
close()关闭数据库连接

③创建Statement对象,执行SQL语句

Statement对象是通过Connection对象的方式创建的

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

Statement对象用来向数据库发送要执行的SQL语句

//发送给服务器的SQL语句
String sql = "select username from users";

//执行SQL语句,并返回结果集
ResultSet rs = stmt.executeQuery(sql);

Statement接口的常用方法

④返回ResultSet对象,查询结果

//执行SQL语句,并返回结果集
String sql = "select username from users";
ResultSet rs = stmt.executeQuery(sql);

//读取结果
while(rs.next()){
    String userName=rs.getString("username");
    System.out.println(userName);
}

ResultSet接口的常用方法

⑤释放资源

  • jdbc程序运行完成后,一定要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet、Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是,尽量晚创建、尽量早释放
  • 为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中
//释放资源
try {
    if(rs!=null){
        rs.close();
    }
} catch (SQLException e) {
    e.printStackTrace();
}
try {
    if(stmt!=null){
        stmt.close();
    }
} catch (SQLException e) {
    e.printStackTrace();
}
try {
    if(conn!=null){
        conn.close();
    }
} catch (SQLException e) {
    e.printStackTrace();
}

三、代码演示

读取一共有几行数据

package day01;

import java.sql.*;

/**
 * @datetime: 2024/1/10
 * @desc:JDBC编程模板-读取一共有几行数据
 */

public class CheckTheQuantityOfData {
    // JDBC连接参数
    private static String url = "jdbc:mysql://127.0.0.1:3306/myschool?useSSL=false";
    private static String username = "root";
    private static String password = "这里填数据库的密码";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1、加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2、获取连接
            conn = DriverManager.getConnection(url,username,password);

            //3、创建statement对象,并发送/执行SQL
            stmt = conn.createStatement();
            String sql = "SELECT COUNT(1) FROM USER";
            rs = stmt.executeQuery(sql);

            //4、处理结果
            int userCount = 0;
            while (rs.next()) {
                userCount = rs.getInt("count(1)");
            }
            System.out.println("该表中一共有" + userCount + "条记录");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //5、释放资源
            try {
                if(rs!=null){
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(stmt!=null){
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

显示整个表格

package day01;

import java.sql.*;

/**
 * @datetime: 2024/1/10
 * @desc:JDBC编程模板-显示整个表格
 */

public class DisplayTable {
    //JDBC连接参数
    private static String url = "jdbc:mysql://127.0.0.1:3306/myschool?useSSL=false";
    private static String username = "root";
    private static String password = "这里填的是数据库密码";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1、加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2、获取连接
            conn = DriverManager.getConnection(url,username,password);

            //3、创建statement对象,并发送/执行SQL
            stmt = conn.createStatement();
            //查询全部
            String sql = "SELECT ID,USERNAME,USERPASS,ROLE FROM USER";
            rs = stmt.executeQuery(sql);

            //4、处理结果
            while (rs.next()) {
                int id = rs.getInt("ID");
                String userName = rs.getString("USERNAME");
                String userPass = rs.getString("USERPASS");
                int role = rs.getInt("ROLE");

                System.out.println("ID:" + id + "\t\t用户名:" + userName + "\t\t密码:" + userPass + "\t\t角色:" + role);
            }

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1371384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ssm的图书馆书库管理系统+vue论文

摘 要 当下,如果还依然使用纸质文档来记录并且管理相关信息,可能会出现很多问题,比如原始文件的丢失,因为采用纸质文档,很容易受潮或者怕火,不容易备份,需要花费大量的人员和资金来管理用纸质文…

深度学习分类任务中的准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,

0. 混淆矩阵 其中关于 TP, TN; FP, FN 的解释; 其中 首字母 T,F代表预测的情况,即T代表预测的结果是对的, F代表预测的结果是错误的; 第二个字母代表预测是预测为 正样本,还是负样本, Positve…

<软考高项备考>《论文专题 - 57 干系人管理(1) 》

1 论文基础 1.1 写作要点 过程定义、作用写作要点、思路识别干系人识别干系人是定期识别项目干系人,分析和记录他们的利益、参与度、相互依赖性、影响力和对项目成功的潜在影响的过程。作用:使项目团队能够建立对每个干系人或干系人群体的适度关注。本项目里有哪些…

VMware虚拟机安装Ubuntu

准备:Ubuntu的镜像文件,VMware,手. 1.新建虚拟机,选择自定义,下一步。 2.硬件兼容性,选择Workstation 16.x,下一步。 3.选择安装程序光盘映像文件,路径为映像文件所在文件夹,下一步。 4. 创建用户和设置密…

Docker部署情侣恋爱网站

个人名片: 对人间的热爱与歌颂,可抵岁月冗长🌞 个人主页👨🏻‍💻:念舒_C.ying 个人博客🌏 :念舒_C.ying 情侣恋爱网站 1. 修改代码2. 目录结构3. 编写Dockerfile4. 编写d…

苹果电脑Markdown文本编辑Typora mac功能介绍

Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…

企业数字化转型指南,12步实现企业转型之路

引言 在这个数字化时代,企业面临着前所未有的机遇和挑战。随着科技的飞速发展和市场竞争的加剧,传统商业模式正在经历翻天覆地的变革。数字化转型,已经不再只是一种选择,而是企业生存和发展的必然路径。它不仅仅是技术的升级&…

网络正常运行时间监控工具

正常运行时间是衡量系统可靠性的指标,表示为机器工作和可用时间的百分比。当提到 IT 网络时,正常运行时间是衡量网络设备、网站和其他服务的可用性的指标。网络正常运行时间通常以百分位数来衡量,例如“五个 9”,这意味着系统在 9…

K8S中SC、PV、PVC的理解

存储类(StorageClass)定义了持久卷声明(PersistentVolumeClaim)所需的属性和行为,而持久卷(PersistentVolume)是实际的存储资源,持久卷声明(PersistentVolumeClaim&#…

基于ssm的无纸化学习平台的设计与实现论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

代码随想录算法训练营第二十四天| 回溯 491.递增子序列 46.全排列 47.全排列 II

491. 非递减子序列 此前通过used数组去重的操作的前提是需要首先给数组排序,本题不可以,因为求递增子序列时,原先的序列并不是一定递增的,此时进行排序后,此时递增子序列会包含其他原先不是原先数据的子序列。 递归参…

【算法刷题】Day28

文章目录 1. 买卖股票的最佳时机 III题干:算法原理:1. 状态表示:2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码: 2. Z 字形变换题干:算法原理:1. 模拟2. 找规律 代码: 1. 买卖股票的最佳时…

Hex2Bin转换软件、Bootloader 、OTA加密升级 、STM32程序加密、其他MCU同样适用

说明:这个工具可以将 Hex 文件 转换为 Bin 格式文件,软件是按自己开发 STM32 OAT 功能需求开发的一款辅助 上位机软件。 文中的介绍时 bootloader boot 文档在补充完善中... 有兴趣的朋友可留言探讨。 1. 软件功能: 1.生成 bin&#x…

IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本…

SSM+mysql外卖APP-计算机毕业设计源码04871

摘要 立足于当下餐饮行业现有的点餐模式,分析传统APP点餐的运作流程,结合Android系统的特点设计新型的外卖APP。近几年,人们生活水平日益提升,但工作强度和压力不断增强,尤其是对于上班族而言,到餐厅吃饭费…

面试宝典进阶之关系型数据库面试题

D1、【初级】你都使用过哪些数据库? (1)MySQL:开源数据库,被Oracle公司收购 (2)Oracle:Oracle公司 (3)SQL Server:微软公司 (4&#…

酒店客房管理系统设计与实现(代码+数据库+文档)

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目 希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅一、研究背景 1.1 研究背景 当…

【大模型】大型模型飞跃升级—文档图像识别领域迎来技术巨变

写在前面 2023年12月31日,第十九届中国图象图形学学会青年科学家会议在广州举行,由中国图象图形学学会主办。 该会议的目标是促进青年科学家之间的交流与合作,以提升我国在图像图形领域的科研水平和创新能力。 由中国图象图形学学会和上海合合…

分布式I/O应用于智慧停车场的方案介绍

客户案例背景 目前车位检测技术有磁电技术、超声波技术、红外线技术、图像识别车位技术。考虑到例如电磁干扰、信号干扰等的环境因素影响,通常会采用组合使用的方式进行,如采用不同的传感器、应用不同的协议等,以便提高车位检测的准确性和实时…

格式工厂怎么转换视频方向

格式工厂因为其免费、操作简单、功能齐全的多重优势,深受大家的喜欢。格式工厂具有可以转换视频、音频、去水印、转换GIF、图片转换、PDF合并、PDF转换等功能,然而在对视频进行剪辑的时候,往往会发现找不到格式工厂的转换视频方向的功能&…