【MySQL】JDBC编程 (Java的数据库编程:JDBC 导入驱动包 MySQL Connector Java 编写JDBC代码 插入操作 查询操作)

news2024/11/15 13:29:32

文章目录

  • Java的数据库编程:JDBC
  • 导入驱动包
    • MySQL Connector Java
  • 编写JDBC代码
    • 插入操作
    • 查询操作


Java的数据库编程:JDBC

真正在工作中操作数据库,99.9%都是通过代码来操作,很少会手动在客户端里输入sql语句.各种数据库,MySQL,Oracle,SQL Server 在开发的时候,就会提供一组编程接口(API)Application Programming Interface.

API:大概意思就是给你一个软件,你能使用代码对他进行操作,基于他给你提供的这些功能,就可以写一些其他代码.对于程序来说API往往就是以"函数""类"的形式来提供的.不同的的数据库提供的API不同,程序员学习的成本就高了,Java就提出了接口规范,各厂商实现对应API,这就是JDBC.

在这里插入图片描述
如果我们想要进行数据库开发就需要在项目中导入对应数据库的驱动包,才能编写代码.
在这里插入图片描述

导入驱动包

1.创建一个项目

在这里插入图片描述

2.获取驱动包:

驱动包是数据库厂商提供的.我们可以从:
(1)mysql的官方网站获取.
(2)github.
(3)还maven的中央仓库,中央仓库可以理解为服务器,它上面就托管了各种软件包.maven就相当于应用商店,通过应用商店就可以访问到软件包然后下载下来.
在这里插入图片描述
在这里插入图片描述

MySQL Connector Java

MySQL Connector/J is a JDBC Type 4 driver, which means that it is pure Java implementation of the MySQL protocol and does not rely on the MySQL client libraries. This driver supports auto-registration with the Driver Manager, standardized validity checks, categorized SQLExceptions, support for large update counts, support for local and offset date-time variants from the java.time package, support for JDBC-4.x XML processing, support for per connection client information and support for the NCHAR, NVARCHAR …
在这里插入图片描述

使用的版本大版本要和数据库服务器匹配.我的数据库服务器是8.0的,所以我就用8.0系列.
在这里插入图片描述
在这里插入图片描述

找到匹配的驱动包然后点进去然后下载:
在这里插入图片描述
下载完成如下:

在这里插入图片描述
jar包: 是java发布程序的典型方式,java是通过.java源文件编译成.class文件,jvm来解释执行.class,所以我们要想发布一个程序给别人使用,只需要把程序.class文件拷贝给对方让他用他的jvm来解释执行就可以了.但是每个.java都一 一对应一个.class,如果代码里.java非常多,我们就把一大堆的.class打成压缩包(类似于.rar .zip),我们这块的压缩包就是.jar.此时把jar拷贝给对方,对方就可以使用jvm来运行了.

此处,mysql驱动包的这个jar不是单独运行的jar,我们可以把它导入到咱们的项目,然后就可以调用其中的方法和类来实现编程了.

3.导入驱动包

  1. 创建一个新的目录:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 把这个目录标记成项目的库:

在这里插入图片描述
Add as Library 就是把这样的目录标记成库,idea就能识别这个目录里的jar包,从而就可以调用里面的类来写代码了.

编写JDBC代码

插入操作

3.编写JDBC代码需要下面的五个步骤:

  1. 创建并初始化一个数据源.
 //1.创建并初始化一个数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
//setURl()这个方法子类有,父类没有,想使用就得把父类引用转回子类引用.
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("123456");

通过DataSourse接口来描述数据源.
setURl()这个方法子类有,父类没有,想使用就得把父类引用转回子类引用.
URL是计算机里面的常见术语,叫做唯一资源定位符,描述网络上的某个资源所在的位置.
在这里插入图片描述

2.和数据库服务器建立连接.

Connection connection = dataSource.getConnection();

在这里插入图片描述

3.构造 SQL 语句.

String sql = "insert into student value(1,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);

在这里插入图片描述

即使咱们使用代码来构建数据库,还是靠sql语句,只不过换成用代码来构建sql,前面的sql的各种语法仍然有效.

在这里插入图片描述

4.执行 SQL 语句.

//4.执行 SQL 语句
int ret = statement.executeUpdate();
System.out.println("ret = " + ret);

在这里插入图片描述

5.释放必要的资源.

//5. 释放必要的资源
statement.close();
connection.close();
//后创建的先释放

数据库客户端和服务器之间进行通信的时候,会消耗一定的系统资源(包括不限于CPU,内存,硬盘,宽带),对于服务器来说同一时刻要处理很多个客户端,需要消耗很多资源,此时客户端就应该省着点用资源即不用资源的时候就赶紧释放.

public class JDBCInset {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);

        //JDBC 需要以下步骤来完成开发.

        //1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        //setURl()这个方法子类有,父类没有,想使用就得把父类引用转回子类引用.
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //3.从控制塔读取用户的输入内容
        System.out.println("请输入学生姓名:");
        String name = scanner.next();
        System.out.println("请输入学号:");
        int id = scanner.nextInt();
        //4.构造 SQL 语句
        String sql = "insert into student value(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        //这个打印需要加到拼接数据之后
        System.out.println(statement);
        //5.执行 SQL 语句
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);
        //6. 释放必要的资源
        statement.close();
        connection.close();
    }
}

DataSourse内置了数据库连接池(字符串常量池),可以复用连接,提高连接服务器的效率.

查询操作

查询来说,返回结果不是单纯的int了,而是ResultSet对象.

public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4.执行SQL
        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集合
        while (resultSet.next()){
            //把resultSet想象成一个表格,同时表格这里有个光标,初始情况下光标指向表的最上面.
            //每次调用next光标往下走一行  当光标把整个表遍历完next返回false
            //当光标指向某一行的时候,就可以通过getXXX来获取当前行的数据
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = "+ id + ", name = " + name);
        }
        //6.释放资源
        resultSet.close();//查询结果的临时表
        statement.close();
        connection.close();
    }
}

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

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

相关文章

必须了解的不同地区的支付方式FP独立站安全收款方式

跨境收款是跨境电商自建站系统最重要的功能之一,其收款方式一直是众多独立站卖家特别是做fp独立站的最为关注的问题之一,加上chatgpt出现,对fp独立站的检测审核更加严格,那么,你知道要怎么做才能安全收款吗&#xff1f…

深度估计阅读记录

VolSDF(neurips 2021) 题目:Volume Rendering of Neural Implicit Surfaces 链接:https://arxiv.org/pdf/2106.12052.pdf 目标:使用SDF这种表示方式替换NeRF中的MLP,使得在几何形状上获得更准确的结果。我们通过将体密度建模为几…

Python实现Fleiss Kappa一致性分析,并计算Z值和p值等相关统计量

参考资料 Fleiss Kappa的定义 Fleiss Kappa的原论文因为要付费才能阅读,我这里就不放链接了 Fleiss kappa - Wikipediahttps://en.wikipedia.org/wiki/Fleiss%27_kappa Fleiss Kappa相关统计量 Z值,p值,95%置信区间 属性一致性分析 的 …

如何使用切片辅助超推理 SAHI 技术对 YOLOv8 进行推理过程和代码实现

前面章节已经详细描述了 切片辅助超推理(SAHI )技术原理介绍 引入SAHI,这是一种专为小物体检测而设计的尖端流水线。SAHI 利用切片辅助推理和微调技术的力量,彻底改变了检测对象的方式。SAHI 物体检测的与众不同之处在于它与任何物体检测器的无缝集成,无需进行繁琐的微调…

Nmap安装

Nmap 文章目录 Nmap简介下载安装Zenmapnmap 配置环境变量检查是否安装成功界面 简介 Nmap是一款非常强大实用的工具,可用于检测网络上的存活主机,检测目标主机的开放端口,检测端口上相应服务上网版本,主机操作系统等信息&#xf…

基于计量学角度对传感器的灵敏度的理解和举例

基于计量学角度对传感器的灵敏度的理解和举例 灵敏度指标是考察传感器特性的主要指标之一,是对传感器设计、生产和选型过程中非常重要的参数。本文将基于计量学知识对灵敏度进行举例介绍。 一、灵敏度定义 灵敏度是传感器、测量装置或仪器的响应的变化除以对应的…

设计模式(八):结构型之装饰器模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

中国计算机学会CCF推荐的国际会议(图像处理方向)

CCF推荐的国际会议(医学图像处理方向) 1 介绍2 最新目录3 投了会议可以再投期刊吗?4 个人感想 1 介绍 CCF根据论文的质量和影响力,对国际期刊和国际会议进行了评估和分类,以便研究者在选择发表论文或参与学术交流时有…

亚马逊美国站 隐形墨水笔CPC认证 儿童玩具

隐形墨水笔 一种采用透明墨水并集成紫外线灯的笔。 隐形笔是指书写后的字迹在正常光线下不能看见(隐形)的笔,只有在紫外灯的照射下才能看见。一般用来标记物品或写不想轻易让人看见的语句。 市面上的隐形笔分为水性隐形墨水笔、油性隐形墨水…

【CSS 04】Zoro 外边距 外边距合并 内边距 内容高度与宽度 框模型 轮廓

CSS 说在前面外边距 margin外边距合并 margin_collapse内边距 padding高度与宽度 dimension框(盒子)模型 boxmodel轮廓 outline 说在前面 最近发现一个有趣的事情,就是CSDN会把我写在【】中的Zoro当做文章主要技术关键词,尽管我在…

科技政策 | 国家、广东省、深圳市的制造业单项冠军企业(产品)遴选申报指南来啦!

原创 | 文 BFT机器人 近日深圳市工业和信息化局开始了2023年技术创新项目扶持计划制造业单项冠军奖励项目申报。 那么制造业单项冠军,国家、广东省、深圳市各级申请需要什么条件呢?有那些注意事项呢?今天,一文带大家读懂。 01 申…

设计模式(九):结构型之桥接模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

赛效:如何在线给图片降噪

1:在电脑上搜索“改图鸭”网站,登录账号后在“图片修复”菜单里点击“图片降噪”。 2:点击降噪工具页面中间的,将图片添加到该页面。 3:图片添加上去后会自动降噪处理,对比原图和效果图,如果对效…

【Vue】预渲染之prerender-spa-plugin解析,方便搜索引擎的抓取

prerender-spa-plugin解析 项目背景:对于那些需要推广,希望能在百度搜索时排名靠前的网站而言,使用单页面应用的无法被抓取背景,VUE项目想SEO优化,但vue是单页面应用,不利于搜索引擎的抓取实现过程&#xf…

pwn入门(0.0)

单字节:byte 双字节:词或字word 四字节:双词Dword,doubleword 八字节:四词Qword,quadword 16字节:double quadword RBX:存储地址 RCX:计数器循环 RDX:整除取余 R…

onnx模型转TensorRT模型时出错

把onnx模型转TensorRT模型出错 错误一:WARNING: onnx2trt_utils.cpp:366: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32. 解决方法 1、安装onnx-simplifier pip…

ts 装饰器

使用装饰器前,需要把 tsconfig.json 中 experimentalDecorators 设置为 true学习了小满的B站课程:https://www.bilibili.com/video/BV1wR4y1377K?p24 前言 ts中有几种装饰器类型: 类装饰器 ClassDecorator方法装饰器 MethodDecorator参数装…

NFTScan | 05.29~06.04 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.05.29 ~ 2023.06.04 NFT Hot News:NFT 热点资讯 01/ 数据:NFT 巨鲸 Pranksy 以 52.17 枚 ETH 抛售 25 枚 Doodles 5 月 29 日,据 NFT Whale Aler…

Java + lua

luaj 主要特征 luaj 用法示例 luaj 实现原理 查找并调用指定的 Java 方法 从 Java 方法获取返回值 将 Lua function 作为参数传递给 Java 方法 在某些业务场景下,我们可能会遇到 lua 中要调用 java 代码情况,当然这个用 JNI 肯定是可以做到的&…

三十六、数学知识——组合数(递推法 + 预处理法 + 卢卡斯定理 + 分解质因数求解组合数 + 卡特兰数)

组合数算法主要内容 一、基本思路1、组合数基本概念2、递推法——询问次数多 a b 值较小 模处理(%mod)3、预处理阶乘方法——询问次数较多 a b 值很大 模处理(%mod)4、卢卡斯定理——询问次数较少 (a b 值很大&am…