40.0/jdbc/Java数据连接/jar包运用增删改

目录

40.1. 回顾

40.2. 正文

40.1 为什么需要jdbc

40.2 如何连接mysql数据库

40 .3 jdbc容易出现的错误

40.4 完成删除

40.5 完成修改


40.1. 回顾

1. 自联查询: 自己连接自己的表。注意:一定要为表起别名。
2. 嵌套查询: 把一个查询的结果作为另一个查询的条件值。
3. 组合查询: union[去除重复的内容只保留一条]   union all
4. 把查询的结果当作一张临时表和其他表进行联表查询。

-- 1、检索读者“杨凡”所在单位--系
   -- 查询哪些字段 从哪些表查询  查询时需要的条件
  

   select dept from readers where name='杨凡'


-- 2、检索所有读者的全部信息

    select * from readers 


-- 3、检索图书馆中所有藏书的书名和出版单位
   

 select book_name,publisher from books 


-- 4、检索“人民大学出版社”所有的书名和单价,结果按照单价降序排列
   

 select book_name,price from books order by price desc; 


-- 5、检索价格在10元至15元之间的图书的名称、作者、单价和分类号,结果按分类号和单价升序排列

select book_name,author,price,type_id from books where price BETWEEN 10 and 15 order by type_id, price ; 


-- 6、检索“人民大学出版社”和“清华大学出版社”的所有图书的名称和作者

  select book_name,author from books where publisher in('人民大学出版社','清华大学出版社')


-- 7、检索书名以“数据库”开头的所有图书的书名和作者

select book_name,author from books where book_name like '数据库%'


-- 8、检索同时借了总编号为209116和209124两本图书的借书证号
   -- 查询借阅了209116这本书的读者编号

    select reader_id from borrow_info where  book_id=209116 


        
     -- 查询借阅了209124这本书的读者编号且读者编号要和上面的读者编号一致 
  

   select reader_id from borrow_info where book_id=209124 and reader_id in(select reader_id from borrow_info where  book_id=209116)
     select reader_id from borrow_info where book_id in(209116,209124) group by reader_id having count(distinct book_id)>=2;


    
-- 9、检索所有借阅了图书的读者姓名和所在单位
    -- 在借书表中-查询所有的读者id
     

   select name,dept from readers where reader_id in(select distinct reader_id from borrow_info)


-- 10、检索“扬凡”所借的所有图书的书名和借阅日期

    select book_name,borrow_time from books b join borrow_info bi on b.book_id=bi.book_id join readers r on r.reader_id=bi.reader_id where r.name='杨凡'    


   
-- 11、检索价格在20元以上且已经借出的图书,结果按单价降序排列

   select distinct b.* from books b join borrow_info bi on b.book_id=bi.book_id where b.price>20 order by price desc


-- 12、检索借阅了“C语言程序设计”一书的读者姓名和所在单位
 

   select name,dept from books b join borrow_info bi on b.book_id=bi.book_id join readers r on r.reader_id=bi.reader_id where b.book_name='C语言程序设计'


-- 13、检索与“杨凡”在同一天借阅了图书的读者的姓名和所在单位
   -- 求出杨凡借书时间
    

 select distinct borrow_time from borrow_info bi join readers r on bi.reader_id=r.reader_id where r.name='杨凡'


     -- 查询与杨凡在同一天借书的读者编号
  

  select distinct reader_id from borrow_info where borrow_time in(select distinct borrow_time from borrow_info bi join readers r on bi.reader_id=r.reader_id where r.name='杨凡')select name,dept from readers where reader_id in(select distinct reader_id from borrow_info where borrow_time in(select distinct borrow_time from borrow_info bi     join readers r on bi.reader_id=r.reader_id where r.name='杨凡')) and name!='杨凡'


     
-- 14、检索藏书中比“高等教育出版社”的所有图书的单价更高的图书
    -- 查询高等教育出版社出版社最高的书的价格
        

select * from books where price>(select max(price) from books where publisher= '高等教育出版社')


-- 15、检索藏书中所有与“数据库导论”或“数据库原理”在同一出版社出版的图书
   -- 查询“数据库导论”或“数据库原理”的出版社

     select * from books where publisher in(select publisher from books where book_name in('数据库导论','数据库原理')) and book_name not in('数据库导论','数据库原理')


-- 16、求该图书馆藏书的总册数

   select count(book_id) from books


-- 17、求“高等教育出版社”的图书中最高的价格、最低的价格以及平均价格

select max(price),min(price),avg(price) from books where publisher= '高等教育出版社'


-- 18、求“计算机学院”当前借阅了图书的读者人数

select count(distinct bi.reader_id) from readers r join borrow_info bi on r.reader_id=bi.reader_id where dept='计算机学院'


-- 19、求各个出版社的最高价格、最低价格、平均价格

select publisher, max(price),min(price),avg(price) from books group by publisher


-- 20、分别求出各个单位当前借阅图书的读者人数

select dept, count(distinct bi.reader_id) from readers r left join borrow_info bi on r.reader_id=bi.reader_id
group by dept;


-- 21、求各个出版单位的册书、价格总额,并按总价降序排列,如有总价相同者按出版社名称降序排列

select publisher, count(book_id),sum(price) from books group by publisher order by sum(price) desc,publisher desc;


-- 22、检索当前至少借阅了5本图书的读者姓名和所在单位

   -- 查询每个读者借书的个数
  

   select name,dept from readers where reader_id in(select reader_id from borrow_info group by reader_id having count(distinct book_id)>=5)


-- 23、分别找出借书人数超过10个人的单位和人数
 

   select dept, count(distinct bi.reader_id) from readers r left join borrow_info bi on r.reader_id=bi.reader_id
group by dept having count(distinct bi.reader_id) >10 ;


-- 24、检索没有借阅任何图书的读者姓名和所在单位

select name,dept from readers where reader_id not in(select reader_id from borrow_info)

40.2. 正文

1. jdbc 【java database connection】java数据连接

40.1 为什么需要jdbc

我们前面讲解的都是在mysql的客户端对msql表中的数据进行相关的操作。真实我们需要通过java程序对mysql表中的数据进行相关的操作。

40.2 如何连接mysql数据库

(面试题)

javaoop 面向对象语言

mysql→结构化语言

思考: java要和mysql进行通信,由于语言不同,无法直接通信。 需要翻译。--翻译它也是一个程序,这个程序别人已经写好并且把这个翻译程序打包为一个jar包,以供java连接mysql使用。翻译由不同的数据库厂商提供。jar从网络下载,也可以jar仓库。

(1)创建一个java工程。

(2)在工程中创建一个目录lib【库】 并把mysql的驱动jar包放入该目录

 (3) 把上面的jar--解压--[加载到该工程]

(4)编写代码

package com.demo01;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class Test01 {public static void main(String[] args) throws Exception{//1. 加载驱动==指定驱动名Class.forName("com.mysql.cj.jdbc.Driver");//2. 获取连接数据库的对象 注意:导入java.sql包下Connection/*** String url:连接数据库的路径.*    jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai*    协议:数据库类型://数据库的ip:数据库的端口号/数据库名?时区*    时区:在mysql8.0以后才有的* String user,数据库的名称root* String password 数据库的密码*/String url="jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai";String user="root";String password="root";Connection conn = DriverManager.getConnection(url,user,password);//3. 获取执行sql语句的对象Statement statement = conn.createStatement();//4. 执行sql语句String sql="insert into tbl_emp values(5,'刘德华','男',25,8888)";statement.executeUpdate(sql);//5. 关闭资源--如果没有关闭会操作内存的泄露statement.close();conn.close();}
}

连接数据库的步骤:

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

//2. 获取连接对象.

Connection conn=DriverManager.getConnection(url,user,password);

String url="jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai";

//3. 获取执行sql语句的对象

Statement statement=conn.createStatement();

//4. 执行sql语句--增删改

statement.executeUpdate(sql);

//5. 关闭资源 close()

通过java代码往一张表中添加记录。

40 .3 jdbc容易出现的错误

ClassNotFoundException: com.mysql.cj.jdbc.Driver

原因: 【1】可能类名写错了

【2】没有引入mysql驱动jar包

【3】没有解压mysql的驱动jar包

 (2)

数据库名错误。  

(3)  

服务器地址错误或者服务器没有开。  

 (4)

密码错误  

 (5)

sql语句有问题。

40.4 完成删除

public static void delete(int id) throws Exception{Class.forName("com.mysql.cj.jdbc.Driver");String url="jdbc:mysql://192.168.1.70:3306/mydb?serverTimezone=Asia/Shanghai";String user="root";String password="root";Connection conn=DriverManager.getConnection(url,user,password);Statement statement=conn.createStatement();String sql="delete from tbl_emp where id="+id;System.out.println(sql);//JAVA打印statement.executeUpdate(sql);System.out.println("删除成功");//JAVA打印statement.close();conn.close();}

40.5 完成修改

public static void update() throws Exception{Class.forName("com.mysql.cj.jdbc.Driver");String url="jdbc:mysql://192.168.1.70:3306/mydb?serverTimezone=Asia/Shanghai";String user="root";String password="root";Connection conn=DriverManager.getConnection(url,user,password);Statement statement=conn.createStatement();String sql="update tbl_emp set name='闫克起',sex='女',age=19 where id=4";statement.executeUpdate(sql);statement.close();conn.close();}

改为活数据

 public static void main(String[] args) throws Exception{Scanner sc=new Scanner(System.in);System.out.print("请输入姓名:");String name=sc.next();System.out.println("请输入年龄:");int age=sc.nextInt();System.out.println("请输入性别:");String sex=sc.next();System.out.println("请输入编号:");int id=sc.nextInt();update(id,name,sex,age);}public static void update(int id,String name,String sex,int age) throws Exception{Class.forName("com.mysql.cj.jdbc.Driver");String url="jdbc:mysql://127.0.0.1:3306/mydb?serverTimezone=Asia/Shanghai";String user="root";String password="root";Connection conn=DriverManager.getConnection(url,user,password);Statement statement=conn.createStatement();String sql="update tbl_emp set name='"+name+"',sex='"+sex+"',age="+age+" where id="+id;statement.executeUpdate(sql);statement.close();conn.close();}

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

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

相关文章

mysql处理40w数据脚本执行慢问题

需求背景: 2张表 SS_ZYXX 1w数据,WD_GZPZ 50w数据 SS_ZYXX.id WD_GZPZ.zyxx_id 找到SS_ZYXX表有数据,关联表WD_GZPZ没有数据的SS_ZYXX表的id 处理方案 方案一: 联合查询: 下面sql,在mysql执行时间3…

[带余除法寻找公共节点]二叉树

二叉树 题目描述 如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1)&#x…

DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式

更新时间:2023年10月31日 11:37:53 作者:产品人小柒 dbeaver数据库连接工具,可以支持几乎所有的主流数据库.mysql,oracle.sqlserver,db2 等等,这篇文章主要给大家介绍了关于DBeaver连接MySQL提示"Public Key Retrieval is not allowed"问…

yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

这些天我忽然有个需求,要更新迭代一个场景的检测模型,甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便),而我训练模型确实要标注好的图片形式。 根据这些条件的话,思路应该是要这样的:首先使用现有的…

大数据平台/大数据技术与原理-实验报告--实战HDFS

实验名称 实战HDFS 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.10.23-2023.10.27 实验仪器设备以及实验软硬件要求 专业实验室(配有centos7.5系统的linu…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳排放分摊的综合能源服务商交易策略》

这篇文章的标题表明它将讨论一个关于综合能源服务商交易策略的主题,而在这个策略中,特别考虑了碳排放分摊的因素。以下是对标题中各关键词的解读: 综合能源服务商: 这指的是在能源领域提供多种服务的企业或组织,可能涵…

蓝桥杯day01——负二进制数相加

题目描述 给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。 数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。例如,arr [1,1,0,1] 表示数字 (-2)^3 (-2)^2 (-2)^0 -3。数组形式…

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

C++之哈希

unordered系列容器的效率之所以比较高(尤其是查找),是因为它底层使用了哈希结构,即哈希表. 哈希概念 前言: 顺序结构以及平衡树中, 元素关键码与其存储位置之间没有对应的关系, 因此在查找一个元素 时, 必须要经过关键码的多次比较. 顺序查找时间复杂度为O(N), 平衡树中为树的…

ESP32-Web-Server编程- JS 基础 4

ESP32-Web-Server编程- JS 基础 4 概述 HTML 内联事件处理器,你永远不应该使用 HTML 事件处理器属性——因为那些已经过时了,使用它们是不好的做法。 在前端编程中,除了将期望发生的事件写为 JS 文件外,还可以使用一些组件自带…

java编程:⼀个⽂件中存储了本站点下各路径被访问的次数,请编程找出被访问次数最多的10个路径

题目 编程题:⼀个⽂件(url_path_statistics.txt)中存储了本站点下各路径被访问的次数 请编程找出被访问次数最多的10个路径时间复杂是多少,是否可以优化(假设路径数量为n)如果路径访问次数⽂件很⼤&#x…

Unity中Shader的BRDF解析(二)

文章目录 前言一、回顾一下上一篇的结尾在这里插入图片描述 二、我们来解析一下 UNITY_PBS_USE_BRDF1(高配)1、迪士尼BRDF原则2、迪士尼的漫反射函数3、参数:perceptualRoughness(感性的粗糙度)4、参数:hal…

Docker-简介、基本操作

目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…

完整版本会声会影2024新功能介绍

会声会影视频编辑软件,是视频制作初学者的法宝。其友好的操作界面,让视频制作小白也能轻松上手,丰富的媒体库资源,只需一拖一放就能快速导入编辑轨道。多轨道式的编辑功能,让各种素材的搭配使用更加得心应手。 会声会影…

管网/黑臭水/污水水质监测系统

随着城市化进程的加快,城市水务管理面临着越来越多的挑战。其中,管网、黑臭水、污水等水质监测问题尤为突出。为了解决这些问题,越来越多的城市开始应用先进的水质监测系统。 一、系统概述 管网/黑臭水/污水水质监测系统是一款集成了在线监测…

npm-工具包

npm-工具包 npm 介绍 npm&#xff08;Node Package Manager&#xff09;是用于管理和共享Node.js包&#xff08;包括代码、工具和资源&#xff09;的包管理工具 常用命令 局部安装包 npm install <package-name>: 安装指定的包 npm install <package-name> --save…

Java的threadd常用方法

常用API 给当前线程命名 主线程 package com.itheima.d2;public class ThreadTest1 {public static void main(String[] args) {Thread t1 new MyThread("子线程1");//t1.setName("子线程1");t1.start();System.out.println(t1.getName());//获得子线程…

【前端开发】Remix与Next.js

很容易&#xff0c;我们被问到的最大问题是&#xff1a; Remix与Next.js有何不同&#xff1f; 看来我们必须回答这个问题&#xff01;我们想直接而不带戏剧性地解决这个问题。如果你是Remix的粉丝&#xff0c;并且想开始在推特上对这篇文章做出沾沾自喜的反应&#xff0c;我们恳…

数据治理:数据交换与数据集成

数据交换 基本概念 数据交换是将符合一个源模式的数据转换为符合目标模式数据的问题&#xff0c;该目标模式尽可能准确并且以与各种依赖性一致的方式反映源数据。 早期数据交换的一个主要方向是在关系模式之间从数据交换的上下文中寻求一阶查询的语义和复杂性。2008 年&…

网络篇---第五篇

系列文章目录 文章目录 系列文章目录前言一、如何实现跨域?二、TCP 为什么要三次握手,两次不行吗?为什么?三、说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站…