Java--JDBC操作数据库

news/2024/5/19 1:22:47 标签: java, 数据库, 开发语言, mysql, jdbc

JDBC是一种可用于执行SQL语句的Java API,是连接数据库和Java程序的纽带。JDBC全称是Java Database Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口。JDBC是一种底层的API,因此访问数据库时需要再逻辑层中嵌入SQL语句。

1.JDBC技术主要完成以下任务:

1.1.与数据库建立连接。

1.2.向数据库发送SQL语句。

1.3.处理从数据库返回的结果。

需要注意:JDBC并不能直接访问数据库,必须依赖数据库厂商提供的JDBC驱动程序。

2.JDBC驱动程序的类型

JDBC-ODBC桥

        依靠ODBC驱动器和数据库通信。这种连接方式必须将ODBC二进制代码加载到使用该驱动程序的每台客户机上。

JDBC网络驱动

        这种驱动程序将JDBC转换为与DBMS无关的网络协议,又被某个服务器转换为DBMS协议,是一种利用Java编写的JDBC驱动程序,也是最灵活的驱动程序。

本地协议驱动

        这是一种纯Java驱动程序。这种驱动程序将JDBC调用直接转换为DBMS所使用的网络协议,允许从客户机上直接调用DBMS服务器,是一种很使用的访问Internet的解决方法。

3.JDBC中常用的类和接口

常用的JDBC类和接口都在java.sql包中。

3.1 Connection接口

Connection接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果。

Connection接口的常用方法
方法功能描述
createStatement()创建Statement对象
createStatement(int resultSetType, int resultSetConcurrency)创建一个Statement对象,该对象将生成具有给定类型、并发性和可保存性的ResultSet对象
preparedStatement()创建预处理对象preparedStatement
isReadOnly()查看当前Connection对象的 读取模式是否为只读模式
setReadOnly()设置当前Connection独享的读取模式为只读模式,默认为非只读模式
commit()使所有上一次提交/回滚后进行的更改成为持久更改,并释放此Connection对象所持有的所有数据库
roolback()取消当前事务中进行的所有更改,并释放此Connection对象所持有的所有数据库
close()立即释放此Connection对象所持有的数据库和JDBC资源

3.2 Statement接口

Statement接口用于在已经建立Connection连接的基础上向数据库发送SQL语句。

在JDBC中有3种Statement对象:

3.2.1 Statement接口

        Statement对象用于执行不带参数的简单SQL语句;

Statement接口中的常用方法
方法功能描述
execute(String sql)执行静态的SELECT语句,该语句可能返回多个结果集
executeQuery(String sql)执行给定的SQL语句,该语句返回单个resultSet对象
clearBatch()清空此Statement对象的当前SQL命令列表
executeBatch()将一组命令提交给数据库来执行,如果命令全部执行成功,则返回一个更新计数组成的数组,数组元素的排序与SQL语句的添加顺序对应
addBatch(String sql)将给定的SQL命令添加到此Statement对象的当前命令列表中,如果驱动程序不支持批量操作,将抛出异常
close()释放Statement对象占用的数据库和JDBC资源

3.2.2 PreparedStatement接口

        PreparedStatement继承了Statement,用来执行动态的SQL语句;通过PreparedStatement实例执行的动态SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以反复地执行该SQL语句。

PreparedStatement接口提供的常用方法
方法功能描述
setInt(int index, int k)将指定位置的参数设置为int值
setFloat(int index, float f)
setLong(int index, long l)
setDouble(int index, double d)
setBoolean(int index, boolean b)
setDate(int index, date date)
setString(int index, String s)
setNull(int index, intsqlType)将指定位置的参数设置为SQL NULL
executeQuery()在此PreparedStatement对象中执行SQL查询,并返回该查询结果生成的ResultSet对象
executeUpdate()执行前面包含参数的动态INSERT,UPDATE,DELETE语句
clearParameters()清除当前所有参数的值

3.2.3 CallableStatement接口

        CallableStatement继承了PreparedStatement,用于执行对数据库的存储过程的调用。

3.3 PreparedStatement接口

        同3.2.2

3.4 DriverManager类

        DriverManager类用来管理数据库中的所有驱动程序。它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接。

DriverManager类的常用方法
方法功能描述
getConnection(String url, String user, String password)指定3个入口参数,来获取与数据库的连接
setLoginTimeout()设置驱动程序试图登录某数据库的最长等待时间,单位为秒
println(String message)将一条消息打印到当前JDBC日志流中

3.5 ResultSet接口

        ResultSet接口类似一个临时表,用来暂时存储数据库查询操作所获取的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针向下移动。

ResultSet接口提供的常用方法
方法功能描述
getInt()以int的形式获取此ResultSet对象的当前行的指定列的值。如果列值是NULL,则返回值是0
getFloat()
getDate()
getBoolean()
getString()
getObject()
first()将指针移动到当前记录的第一行
last()将指针移动到当前记录的最后一行
next()将指针向下移动一行
beforeFirst()将指针移动到集合的开头(第一行位置)
afterLast()将指针移动到集合的尾部(最后一行位置)
absolute(int index)将指针移动到ResultSet给定编号的行
isFirst()判断指针是否位于当前记录的第一行
isLast()
updateInt()用int值更新指定列
updateFloat()
updateLong()
updateString()
updateObject()
updateNull()
updateDate()
updateDouble()
getrow()查看当前行的索引号
insertRow()将插入行的内容插入到数据库
updateRow()将当前行的内容更新到数据库
deleteRow()删除当前行,但不同步到数据库,而是执行close()方法后同步到数据库

4.数据库操作

4.1 连接数据库步骤:

        4.1.1 下载数据库驱动类,并加载到程序中

        详见JDBC | mysql-connector jar包的加载_mysql-connector-java.jar-CSDN博客

        4.1.2 通过java.lang包的静态方法forName()来加载JDBC驱动程序

        4.1.3 通过java.lang包中类DriverManager的静态方法getConnection(String url, String user, String pwd)建立数据库连接

java">package db;

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

public class Conn {
    Connection con;     //声明Connection对象

    public Connection getConnection() {         //建立返回值为Connection对象的方法
        try {
//            Class.forName("com.mysql.jdbc.Driver");           //deprecated
            Class.forName("com.mysql.cj.jdbc.Driver");      //加载数据库驱动类
            System.out.println("数据库驱动加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        try {
            //通过访问数据库的url,获取数据库连接对象con
            con = DriverManager.getConnection("jdbc:mysql:" + "//127.0.0.1:3306/debug", "root", "12345678");
            System.out.println("数据库连接成功");
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return con;     //返回Connection对象
    }

    public static void main(String[] args) {
        Conn c = new Conn();        //创建类对象
        c.getConnection();          //调用连接数据库的方法
    }
}

输出:
        数据库驱动加载成功
        数据库连接成功

4.2 向数据库发送SQL语句

4.3 处理查询结果

4.4 顺序查询

4.5 模糊查询

4.6 预处理语句

4.7 添加、修改、删除记录


http://www.niftyadmin.cn/n/5159633.html

相关文章

GPT-4 Turbo:OpenAI发布旗舰版GPT-4模型,更便宜|更强大|128K上下文|支持多模态

一、介绍 OpenAI 在 2023 年 11 月 7 日举行首届开发者大会,此次展会的亮点无疑是 GPT-4 Turbo 的亮相,它是 OpenAI 著名的 GPT-4 模型的升级版。 GPT-4 Turbo 有两种变体:一种用于文本分析,另一种能够理解文本和图像。 GPT-4 Tu…

合肥工业大学操作系统实验5

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…

Python编程题集(第一部分基本语法基础)

Demo01 摄氏温度转化为华氏温度 题目描述: 输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出 转换的公式为如下:fahrenheit (9 / 5 ) * celsius 32 输入输出描述 输入一个值表示摄氏温度celsius 输出华氏温度fahren…

C++虚函数表和虚函数指针

C 虚函数表(Virtual Function Table,VTBL)是在编译期确定的,而不是运行时。每个类都有一个自己的虚函数表,而派生类会继承基类的虚函数表并在其上进行扩展。虚函数表是用来实现多态(polymorphism&#xff0…

Scrapy使用和学习笔记

前言 Scrapy是非常优秀的一个爬虫框架,基于twisted异步编程框架。yield的使用如此美妙。基于调度器,下载器可以对scrapy扩展编程。插件也是非常丰富,和Selenium,PlayWright集成也比较轻松。 当然,对网页中的ajax请求…

信号的阻塞与递达

目录 阻塞信号 信号和相关概念 sigset_t 信号集 信号的保存与阻塞 第一个问题 第二个问题 第三个问题 信号的递达 信号递达 内核态与用户态 为什么可以从用户态到内核态 我们怎么知道现在是内核态还是用户态? 信号的处理 sigaction 可重入函数 vola…

阿里p8大佬手写web自动化测试框架教程 涵盖框架源码+视频教程以及搭建流程

前言 ​ 测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试。 有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少? 其实,性能的要求…

第二章: 创建第一个Spring Boot 应用

第二章: 创建第一个Spring Boot 应用 前言 本章重点知识:构建你的第一个Spring Boot应用:以一个简单的例子来引导你进入Spring Boot的开发,包括如何使用Spring Initializr来创建项目,以及如何使用Maven或Gradle构建和运行项目等 IntelliJ IDEA 开发工具中安装 Spring Init…