如何熟练掌握JDBC编程?

news2025/2/24 12:34:17

目录

🐳今日良言:未来可期,人生值得

🐂一、JDBC

🐼1.概念

🐼2.背景

🐼3.使用

🐯二、编写数据库代码

🐼1.增/删/改数据

🐼2.查数据


🐳今日良言:未来可期,人生值得

 

🐂一、JDBC

🐼1.概念

JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作

🐼2.背景

MySQL提供了很多API,这些API就是为了让我们实现客户端的.

API(Application Programming Interface): 这类似于你拿到一个东西,这个东西可以提供给你哪些功能/服务.

在早期的时候,Oracle,SQLServer,SQLite等数据库,都有自己的API,Oracle的API是Oracle里面的大佬开发的,SQLServer的API是微软的大佬开发的,而SQLite的API是开源社区的大佬们开发的,搞了这么多API,对于基层程序猿来说,这无疑是一件非常痛苦的事情,因为,学数据库编程,程序猿就需要好几套API,学习成本非常高.

此时,在Java的圈子中,JDBC站了出来,把这些API都统一成了一套,指定成标准.由于java的影响很大,此时,各种数据库厂商都提供了能够适应JDBC相关的"驱动包"(相当于API的具体实现)

此时,只要掌握这套API,无论操作哪个数据库,操作的代码都是不变,基本上相同的.

🐼3.使用

1).安装对应数据库的驱动包

一个java程序通过JDBC来操作对应数据库的流程如下:

MySQL提供的驱动包,可以去"中央仓库" 下载.中央操作就类似于手机上的应用商店.中央仓库的网址如下:

https://mvnrepository.com/

下载流程如下:

 

 下载以后在目录中找到:

.jar 是一个java格式的压缩包,类似于.rar  .zip一样.

2).将jar包导入到项目中

 此时idea就可以解析出jar包里包含的的内容了,此时就可以进行编码代码了

🐯二、编写数据库代码

🐼1.增/删/改数据

在使用jdbc往数据库中插入数据时,首先需要准备好数据库和数据表.

博主这里的数据库是exercise 数据表是 student表

 

无论是增删增删改查数据,代码步骤总结来说是5步

1).`创建数据源. 描述了数据库服务器在哪里

2).和数据库建立网络连接(写的jdbc代码本质上是实现了一个客户端,要通过网络和服务器通信)

3).构造一个SQL语句,来完成操作

4).执行SQL语句.(控制客户端给服务器发送请求)

5).断开和数据库的连接,并且释放资源

插入数据/删除数据/修改数据代码一模一样,只需要修改SQL语句即可,这里只详细介绍插入数据

完整操作如下:

 

 运行后,观察student表中数据,会发现插入成功:

 

 针对每个步骤进行解释:

1).

 这里的MysqlDataSource() 就是驱动包里面提供的具体的类了,实现了这个DataSource接口

这里发生向上转型.关于向上转型博主之前的文章有介绍过:

(1条消息) OOP(面向对象编程)三大特性_程序猿小马的博客-CSDN博客_面向对象编程特性oop

导入包的时候注意:

 

这三行代码都发生了向下转型

 

 

2).
上面数据源的创建操作,只是描述了服务器在哪,并没有进行真正的访问,紧接着进行的'连接'操作才是真正的开始通过网络进行通信

 

 

3).

第一行行代码描述了sql语句是什么样的,正在的执行sql语句是靠第二行代码

PreparedStatement做了很多事情,比如会对SQL语句进行一些预处理(对语法进行解析之类的)

4).

 插入/删除/修改数据 都是使用executeUpdate()来执行  

查找数据使用executeQuery()执行

返回值是一个整数,表示此次操作影响到几行,这就代表了cmd命令中下面:

5).

当连接不再使用的时候,就需要释放连接,将之前的记录给'擦除掉';

 

这就是jdbc编程的五个步骤;

上述操作的SQL语句

 这里写死了,不太好,那么如何实现插入是动态的呢?根据用户输入的信息进行插入

靠谱的方案是,使用PreparedStatement来通过占位符替换的方式,实现动态SQL的构造:

 

插入操作完整代码如下:(一定注意包不要导入错误)

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;


public class JdbcInsert {
    public static void main(String[] args) throws SQLException {
        // 先提前准备好数据库和数据表
        // 1).`创建数据源. 描述了数据库服务器在哪里
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/exercise?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("你的密码");
        //2).和数据库建立网络连接(写的jdbc代码本质上是实现了一个客户端,要通过网络和服务器通信)
                Connection connection = dataSource.getConnection();
        //3).构造一个SQL语句,来完成操作
        String str = "insert into student values(?,?)";
        // jdbc 中还需要搭配一个特点的对象,来描述这里的sql情况
        PreparedStatement statement = connection.prepareStatement(str);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号");
        int id = scanner.nextInt();
        System.out.println("请输入姓名");
        String name = scanner.next();
        statement.setInt(1,id);
        statement.setString(2,name);
        //4).执行SQL语句.(控制客户端给服务器发送请求)
                int ret = statement.executeUpdate();
                System.out.println("ret = "+ret);
        //5).断开和数据库的连接,并且释放资源
                statement.close();
                connection.close();

    }
}

🐼2.查数据

与上面的插入数据相比较,查找数据就多了一个步骤,遍历结果集

首先,还是先来看,完整代码:

 接下来,分析比插入操作多的步骤:

1).

 

 executeQuery() 方法的返回值是一个结果集合,此时,如果想要的到这个结果集合的数据就需要进行遍历.

2).

 3).

关闭资源多一个步骤

 

查找数据的完整代码如下:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;


public class JdbcInsert {
    public static void main(String[] args) throws SQLException {
        // 先提前准备好数据库和数据表
        // 1).`创建数据源. 描述了数据库服务器在哪里
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/exercise?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("你的密码");
        //2).和数据库建立网络连接(写的jdbc代码本质上是实现了一个客户端,要通过网络和服务器通信)
        Connection connection = dataSource.getConnection();
        //3).构造一个SQL语句,来完成操作
        String str = "select * from student";
        // jdbc 中还需要搭配一个特点的对象,来描述这里的sql情况
        PreparedStatement statement = connection.prepareStatement(str);
        //4).执行SQL语句.(控制客户端给服务器发送请求)
        ResultSet resultSet = statement.executeQuery();
        // 判断是否有下一个数据
        while (resultSet.next()) {
            // 使用getXXX 方法获取到每一行
            // 获取int 就使用getInt  获取String 就使用getString.....
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id:"+id+" "+"name:"+name);
        }
        //5).断开和数据库的连接,并且释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

其他的操作只需要修改SQL语句即可

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

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

相关文章

机器学习笔记之受限玻尔兹曼机(六)对数似然梯度求解

机器学习笔记之受限玻尔兹曼机——对数似然梯度求解引言回顾:含隐变量能量模型的对数似然梯度受限玻尔兹曼机的对数似然梯度模型参数求解主体思路求解过程引言 上一节介绍了含隐变量能量模型的对数似然梯度求解。本节针对受限玻尔兹曼机,对模型参数进行…

c#入门-完全限定名,引用命名空间

完全限定名 包含完整命名空间的类名,称为完全限定名。 namespace 黄野平原.古堡 {class 蜡烛怪 { } }例如 黄野平原.古堡.蜡烛怪 a new 黄野平原.古堡.蜡烛怪();引用命名空间 但是很多的类都会写在命名空间下,如果全都这么写代码太长了。 为了省略掉…

Unity-Photon Pun2个人总结

进入房间前的配置 1、使用设定好的Setting private void Start(){PhotonNetwork.ConnectUsingSettings();} 2、MonoBehaviour改为MonoBehaviourPunCallbacks public class NetworkLauncher : MonoBehaviourPunCallbacks{} 这样我们才可以获得Photon服务端的一些反馈资料 3…

高考题改成IB试题,会是什么样子?

从2019年浙江高考语文卷的一篇现代文阅读说起的,振语看过了这道题和推文作者的解读后,一时兴起,就想着能不能把它改成一道IB考题,顺带着也把这篇选文细读评点了一番。(一)高考试题再现: 这道高考…

百趣代谢组学分享:HSFB2b通过促进类黄酮生物合成赋予大豆耐盐能力

​我国大豆的产量远远不能满足国内需求,提高大豆的耐逆性可以充分利用边际土地增加大豆种植面积从而提高大豆产量。百趣代谢组学分享,热激转录因子基因在植物生长过程中发挥了重要作用,然而在大豆耐盐反应中热激转录因子的功能及机理仍不清楚…

A-Level商务例题解析及练习Cash flow forecasting

今日知识点: Cash flow forecasting Cash inflows Cash outflows Limitations of cash flow forecasting例题 Q: Discuss the view that cash flow forecasts for a newly operating international airport may be of limited use to its senior managers. 解析 Ans…

Mysql 进阶(面向面试篇)事务篇

1、事务 1.1 事务简介 事务 是一组操作的集合,它是不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。保证原子性 就比如: 张三给李四转账1000块钱&#x…

仿英雄联盟网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW游戏介绍网页作业代码下载

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

推荐系统CTR方向相关论文一句话总结

Fearure Interaction // CTR纯FM模型及其演变Factorization Machines. 2010Field-aware Factorization Machines for CTR Prediction. 2016Neural Factorization Machines for Sparse Predictive Analytics. 2017Attentional Factorization Machines: Learning the Weight of F…

StringBuffer类

StringBuffer基本介绍 StringBuff代表可变的字符串,可以对字符串内容进行增删很多方法与String相同,但StringBuff是可变长度的StringBuff是一个容器 了解StringBuffer StringBuffer的继承关系: 可以看到StringBuffer继承AbstractStringBu…

【计网实验】思科CiscoPacketTracer仿真实验

本文参考B站up主:湖科大教书匠 软件版本:Cisco Packet Tracer 6.1.1sv ❓ 实验01的内容较为简单,所以不写了~ 🌹 因作者水平有限,若有遗漏、错误等地方,请大佬批评指正 实验02:访问Web服务器 实…

设计必备,5个png免抠素材网站,建议收藏

做设计、PPT都需要用到大量的免抠素材,职场中熟练使用Photoshop的人毕竟是少数,也很少有人愿意花费时间去精细抠图。那这5个免抠素材网站一定要收藏好,可以有效帮你节省时间,提高工作效率。1、菜鸟图库 https://www.sucai999.com/…

计算机毕业设计php+vue基于微信小程序的员工宿舍报修系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,员工宿舍报修系统就是信息时代变革中的产物之一。 任何系统都要遵循系…

进程被杀Task被移除

现象 Kill查杀 Task被移除 当Task处于前台&Task中唯一的activity不处于onStop(可能处于onResume/onPause等)状态时,当前进程被kill查杀,当前activity会被finish导致task中因无activity而被移除。 12-08 15:20:54.991 18018…

Windows11去掉桌面快捷方式箭头

有部分强迫症用户,看到桌面每个图标都有一个小箭头,只想去掉看着舒服一点 但是Win10的大部分脚本都不能使用了,而且有可能导致桌面图标显示异常,不建议大家再去用脚本尝试(Win11也有脚本,但是随便更新版本&#xff0c…

深入理解Kafka Producer内部机制

总的来说,Kafka Producer是将数据发送到kafka集群的客户端。其组成部分如下图所示: 基本组件: Producer Metadata——管理生产者所需的元数据:集群中的主题和分区、充当分区领导者的代理节点等。Partitioner——计算给定记录的分…

Pygame入门-游戏代码结构及背景轮播、声音音效及图像动态效果

一、游戏代码结构 代码结构是代码的组织方式,也是游戏编程的思考框架。pygame官方文档中给出了以下建议,将游戏代码结构分为以下六个部分。 1导入游戏模块。 2资源处理类;定义一些类来处理最基本的资源,包括加载图像和声音,连接和…

C#(csharp)这门语言的优势在哪?

确实有不少人因为unity入坑C#,unity刚开始使用的语言也有很多,比如Unity(一种Java的扩展)或者Boo(一种受Python启发的语言),但C#坚持至今甚至成为unity使用主流,C#当然有它的优点。 …

实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow

本文对 ChatGPT 解答编程问题的情况进行了测试。测试了不同难度的问题,并对 ChatGPT 的回答结果进行了鉴别。测试结果表明,ChatGPT 在解答简单的编程问题时表现较为出色,但在解决复杂的问题时则不太理想。因此,也总结出了如何更好…

Vulnhub靶机:SICKOS_ 1.1

目录介绍信息收集主机信息探测主机信息探测网站探测Getshell敏感信息收集SUDO提权第2种通关思路nikto扫描站点验证破壳漏洞破壳漏洞利用计划任务提权修复文件内容错乱 & 提权总结介绍 系列:SickOs(此系列共2台) 发布日期:201…