mysql-06.JDBC

目录

什么是JDBC:

为啥存在JDBC:

JDBC工作原理:

JDBC的优势:

下载mysql驱动包:

用java程序操作数据库

1.创建dataSource:

2.与服务端建立连接

3.构造sql语句

4.执行sql

5.关闭连接,释放资源

参考代码:

插入操作:

删除操作:

修改操作:

查询操作:

什么是JDBC:

jdbc:java datasource connectivity : java数据库连接

jdbc 是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。

为啥存在JDBC:

当前的数据库有很多种,有mysql,Oracle,SQL server等.

客户端可能使用不同的数据库进行操作,不同的数据库对应不同的编译语言,提供了不同的数据库驱动包,如:MySQL提 供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

这就带来了很多不便,更换数据库时,还要学习新的数据库的api,增加了使用成本。

JDBC就统一了数据库的连接规范,它为java开发人员提供了一套标准的api,可以为多种关系数据库统一访问。

JDBC工作原理:

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包 含一些通用的接口类。

JDBC的优势:

1.java语言访问数据库操作完全是面向抽象接口编程。

2.开发数据库应用提供api不需要针对特定的api.

3.程序的可移植性大大增强。

下载mysql驱动包:

下载可以有多种方式,可以在中央仓库中下载:

https://mvnrepository.com/https://mvnrepository.com/

下载步骤:

1.搜索mysql:

2,选择下载版本

3.选择一个版本,点进去,点jar包下载

下载完成后,创建java项目,新建一个包(lib,名字随意),将下载好的驱动包粘贴到这个包中

将创建的包添加为库

准备工作完成,下面就可以通过java程序操作数据库了

用java程序操作数据库

1.创建dataSource:

创建数据源头,就是数据库所在的位置

DataSource是一个接口,MysqlDataSource是mysql驱动包中的,通过MysqlDataSource来实现。

设置数据库位置:

对dataSource使用,要向下转型: DataSource->MysqlDataSource,通过下载的驱动包来设置,

当然也可以直接使用MysqlDataSource来创建源头数据:

但这种方法会在代码中多次出现MysqlDataSource类,不利于提高代码的耦合性,还是建议使用第一种方法设置。

setUrl():URL:表示网络上资源的位置,也叫“网址”,mysql是一个客户端服务器结构的程序,需要通过网络进行交互。

JDBC:mysql : url是JDBC操作MySQL使用的;

127.0.0.1:IP地址,127.0.0.1是一个特殊的IP地址,“环回地址”,由于我们当前的数据库和java程序是在同一台机器上,因此就是将数据发送给自己,就要用环回地址。

3306:端口号,接收数据端的端口号;

java109:数据库名,在执行java代码时,提前创建好数据库和表;

:问号?后面的是一些访问资源时候用到的参数,设置字符集为utf8,useSSL表示是否要加密,在练习的时候设为false,(设为true很可能连不上数据库)。

setUser():mysql的默认用户 : root;

setPassword(): 在安装数据库的时候手动设置的数据库密码;

2.与服务端建立连接

Connection有很多包,注意要导入 java.sql包

这里有一个受查异常,要手动处理:

3.构造sql语句

执行插入数据操作

可以直接指定内容,也可以通过字符串拼接,通过控制台输入要插入的数据,

还可以通过? ,搭配setXXX,来手动输入要插入的数据,

第一个参数 是?的位置,第二个参数 是要传入的数据。

sql语句是字符串,通过prepareStatement()方法,先将sql语句进行解析检查,得到结构化数据,将结构化数据传送给数据库,数据库就无需再进行对sql语句进行处理了,这样操作能为数据库节省更多的时间,可以处理更多的客户端请求。

虽然sql语句能以字符串的形式传给数据库,但若sql存在语法问题等,传过去的sql就无法执行,影响执行效率;直接传sql语法也存在一定的风险,不安全,因为不确定sql中到底写的什么。

删除操作:

修改操作:

查询操作:

4.执行sql

增删改:

增删改都属于对数据库的写操作,使用的方法是executeUpdate(),返回值是操作影响到的行数,为int类型。

查询:

查询属于读操作,使用executeQuery()方法,返回的是一个结果集,

resultSet相当于在查询到的结果集中,有一个光标,最初指向第0行,当还有数据时,就依次向下遍历,ResultSet有getXXX方法,根据列的类型,可以获取到要查找的数据。

5.关闭连接,释放资源

关闭顺序是:先创建的后释放,后创建的先释放。

参考代码:

插入操作:


public class Deam01 {//插入数据public static void main(String[] args) throws SQLException {Scanner scan=new Scanner(System.in);System.out.println("请输入id:");int id = scan.nextInt();System.out.println("请输入姓名:");String name = scan.next();
//
//        MysqlDataSource mysqlDataSource=new MysqlDataSource();
//        mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
//        mysqlDataSource.setUser("root");
//        mysqlDataSource.setPassword("root");//1.创建dataSourceDataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("root");//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.构造sql//插入操作//法一
//        String sql="insert into student values(1,'zhangsan')";//法二
//        String sql="insert into student values("+id+",'"+name+"')";//法三String sql="insert into student values(?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,id);preparedStatement.setString(2,name);//4.执行sqlint n = preparedStatement.executeUpdate();System.out.println("n= "+n);//5,关闭连接,释放资源preparedStatement.close();connection.close();}
}

删除操作:


public class Deam02 {public static void main(String[] args) throws SQLException {Scanner scan=new Scanner(System.in);System.out.println("请输入姓名:");String name = scan.next();//数据库删除数据//1.创建dataSourceDataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("root");//2.和服务器建立连接Connection connection=dataSource.getConnection();//3.构造sqlString sql="delete from student where namr=? ";PreparedStatement preparedStatement= connection.prepareStatement(sql);preparedStatement.setString(1,name);//4.执行sqlint n = preparedStatement.executeUpdate();System.out.println("n= "+n);//5.关闭连接,释放资源preparedStatement.close();connection.close();}
}

修改操作:


public class Deam07 {public static void main(String[] args) throws SQLException {Scanner scan=new Scanner(System.in);System.out.println("请输入修改的name:");String name = scan.next();System.out.println("请输入源id");int oldid=scan.nextInt();//1.DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("root");//2.Connection connection = dataSource.getConnection();//3.修改sqlString sql="update student set name=? where id=?";PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,name);preparedStatement.setInt(2,oldid);//4int n = preparedStatement.executeUpdate();System.out.println("n= " +n);preparedStatement.close();connection.close();}
}

查询操作:


public class Deam03 {public static void main(String[] args) throws SQLException {//数据库 查询操作//1.创建源数据DataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("root");//2.和服务端建立连接Connection connection = dataSource.getConnection();//3.创建sqlString sql="select * from student";PreparedStatement prepareStatement= connection.prepareStatement(sql);//4.执行sqlResultSet resultSet = prepareStatement.executeQuery();while(resultSet.next()){int id=resultSet.getInt("id");String name=resultSet.getString("namr");System.out.println("id= "+id+" name= "+name);}//关闭资源resultSet.close();connection.close();prepareStatement.close();}
}

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

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

相关文章

微信小程序wxs实现UTC转北京时间

微信小程序实现UTC转北京时间 打脸一刻:最近在迭代原生微信小程序,好一段时间没写原生的,有点不习惯; 咦,更新数据咋不生效呢?原来还停留在 this.xxx; 哟,事件又没反应了&#xff1f…

机器学习-线性回归(对于f(x;w)=w^Tx+b理解)

一、𝑓(𝒙;𝒘) 𝒘T𝒙的推导 学习线性回归,我们那先要对于线性回归的表达公示,有所认识。 我们先假设空间是一组参数化的线性函数: 其中权重向量𝒘 ∈ R𝐷 …

R语言学习笔记之语言入门基础

一、R语言基础 快速熟悉R语言中的基本概念&#xff0c;先入个门。 1、运算符 运算符含义例子加1 1-减3 - 2*乘3 * 2/除9 / 3^(**)乘方2 ^ 3 2 ** 3%%取余5 %% 2%/%取整5 %/% 2 2、赋值符号 等号a 1三者等价&#xff1a;把1赋值给变量a左箭头<−a <- 1右箭头−&g…

计算机网络三张表(ARP表、MAC表、路由表)总结

参考&#xff1a; 网络三张表&#xff1a;ARP表, MAC表, 路由表&#xff0c;实现你的网络自由&#xff01;&#xff01;_mac表、arp表、路由表-CSDN博客 网络中的三张表&#xff1a;ARP表、MAC表、路由表 首先要明确一件事&#xff0c;如果一个主机要发送数据&#xff0c;那么必…

【Nomoto 船舶模型】

【Nomoto 船舶模型】 1. Nomoto 船舶模型简介2. 来源及发展历程3. 构建 一阶模型Nomoto 船舶模型3.1 C 实现3.2 Python 实现3.3 说明 5. 参数辨识方法5.1 基于最小二乘法的参数辨识5.2 数学推导5.3 Python 实现5.4 说明 4. 结论参考文献 1. Nomoto 船舶模型简介 Nomoto 模型是…

差分进化算法 (Differential Evolution) 算法详解及案例分析

差分进化算法 (Differential Evolution) 算法详解及案例分析 目录 差分进化算法 (Differential Evolution) 算法详解及案例分析1. 引言2. 差分进化算法 (DE) 算法原理2.1 基本概念2.2 算法步骤3. 差分进化算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 单目标优化…

深入理解GPT底层原理--从n-gram到RNN到LSTM/GRU到Transformer/GPT的进化

从简单的RNN到复杂的LSTM/GRU,再到引入注意力机制,研究者们一直在努力解决序列建模的核心问题。每一步的进展都为下一步的突破奠定了基础,最终孕育出了革命性的Transformer架构和GPT大模型。 1. 从n-gram到循环神经网络(RNN)的诞生 1.1 N-gram 模型 在深度学习兴起之前,处理…

【JWT】jwt实现HS、RS、ES、ED签名与验签

JWT 实现 HS、RS、ES 和 ED 签名与验签 签名方式算法密钥类型签名要点验签要点HSHMAC-SHA256对称密钥- 使用 crypto/hmac 和对称密钥生成 HMAC 签名- 将 header.payload 作为数据输入- 使用同一密钥重新计算 HMAC 签名- 比较计算结果与接收到的签名是否一致RSRSA-SHA256公钥 …

地址栏信息location

获取信息 页面跳转 location.href当前地址栏信息 location.assign()设置跳转新的页面 location.replace() location.reload()刷新页面

程序员转型测试:解锁漏洞挖掘新旅程

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 程序…

StarRocks常用命令

目录 1、StarRocks 集群管理&配置命令 2、StarRocks 常用操作命令 3、StarRocks 数据导入和导出 1、StarRocks 集群管理&配置命令 查询 FE 节点信息 SHOW frontends; SHOW PROC /frontends; mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW PROC /dbs;"…

08-ArcGIS For JavaScript-通过Mesh绘制几何体(Cylinder,Circle,Box,Pyramid)

目录 概述代码实现1、Mesh.createBox2、createPyramid3、Mesh.createSphere4、Mesh.createCylinder 完整代码 概述 对于三维场景而言&#xff0c;二位的点、线、面&#xff0c;三维的圆、立方体、圆柱等都是比较常见的三维对象&#xff0c;在ArcGIS For JavaScript中我们知道点…

Linux中page、buffer_head、bio的关系

在Linux中&#xff0c;page、buffer_head、bio这三个概念紧密相关&#xff0c;共同构成了块设备I/O和内存管理的重要部分&#xff0c;它们的联系主要体现在以下方面&#xff1a; page与buffer_head 基于page构建&#xff1a;buffer_head通常是基于page来构建的&#xff0c;一…

直线拟合例子 ,岭回归拟合直线

目录 直线拟合,算出离群点 岭回归拟合直线&#xff1a; 直线拟合,算出离群点 import cv2 import numpy as np# 输入的点 points np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407] ], dtypenp.float32)# 使用…

SpringCloud两种注册中心

SpringCloud 基本概念 系统架构 我们之前做的所有的项目都属于单体架构&#xff0c;下面我们将要学习更适合大型项目的分布式架构 单体架构&#xff1a; 将业务的所有功能几种在一个项目中开发&#xff0c;打成一个包部署。 优点&#xff1a;架构简单、部署成本低 缺点&am…

SpringAI 搭建智能体(二):搭建客服系统智能体

在现代人工智能应用中&#xff0c;智能体&#xff08;Agent&#xff09; 是一个重要的概念&#xff0c;它的核心能力是自主性与灵活性。一个智能体不仅能够理解用户的需求&#xff0c;还能拆解任务、调用工具完成具体操作&#xff0c;并在复杂场景中高效运行。在本篇博客中&…

SVN客户端使用手册

目录 一、简介 二、SVN的安装与卸载 1. 安装&#xff08;公司内部一般会提供安装包和汉化包&#xff0c;直接到公司内部网盘下载即可&#xff0c;如果找不到可以看下面的教程&#xff09; 2. 查看SVN版本 ​编辑 3. SVN卸载 三、SVN的基本操作 1. 检出 2. 清除认证数据 3. 提交…

HTML 文本格式化详解

在网页开发中&#xff0c;文本内容的呈现方式直接影响用户的阅读体验。HTML 提供了多种文本格式化元素&#xff0c;可以帮助我们更好地控制文本的显示效果。本文将详细介绍 HTML 中的文本格式化元素及其使用方法&#xff0c;帮助你轻松实现网页文本的美化。 什么是 HTML 文本格…

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习&#xff01;作为一大重点&#xff0c;拿出态度很重要&#xff0c;想要真实掌握&#xff0c;博客笔记自然少不了&#xff01;重点全部上色&#xff01;避免疏忽 下面我们从0基础开始学习今天的第一节&#xff01;不用担心看不懂&#xff0c;拒绝枯燥的理…

Spring Boot Starter介绍

前言 大概10来年以前&#xff0c;当时springboot刚刚出现并没有流行&#xff0c;当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置&#xff0c;其中配置了很多项目中需要用到的Be…