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.rhkb.cn/news/207235.html

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

相关文章

高效率:使用DBeaver连接spark-sql

提高运行效率一般采取底层使用spark引擎替换成hive引擎的方式提高效率,但替换引擎配置较为复杂考虑到兼容版本且容易出错,所以本篇将介绍使用DBeaver直接连接spark-sql快速操作hive数据库。 在spark目录下运行以下命令,创建一个SparkThirdSe…

计算机网络:网络层

0 本节主要内容 问题描述 解决思路 1 问题描述 两大问题(重点,也是难点): 地址管理;路由选择。 1.1 子问题1:地址管理 网络上的这些主机和节点都需要使用一种规则来区分,就相当于是一种身…

数据可视化:用图表和图形展示数据

写在开头 在当今信息爆炸的时代,海量的数据如同一座沉默的宝库,等待着我们挖掘和理解。然而,这些庞大的数据集本身可能令人望而生畏。在这个时候,数据可视化成为了解数据、发现模式和传达信息的强大工具。本篇博客将带领你探索数据可视化的奇妙世界,学习如何在python中使…

【Java程序员面试专栏 专业技能篇 】Java SE核心面试指引(四):Java新特性

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第四部分:Java新特性,子节点表示追问或同级提问 Java8新特性…

第一百八十五回 如何禁止页面跟随手机自动旋转

文章目录 1. 概念介绍2. 使用方法2.1 全面禁止2.2 局部禁止3. 示例代码4. 内容总结我们在上一章回中介绍了"如何自定义Radio组件"相关的内容,本章回中将介绍 如何禁止页面随手机自动旋转.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在手机默认设置下,手机…

1.ORB-SLAM3中如何保存多地图、关键帧、地图点到二进制文件中

1 保存多地图 1.1 为什么保存(视觉)地图 因为我们要去做导航,导航需要先验地图。因此需要保存地图供导航使用,下面来为大家讲解如何保存多地图。 1.2 保存多地图的主函数SaveAtlas 2051 mStrSaveAtlasToFile是配置文件中传递的参数: 这里我们…

jsoup登录日志平台后调企业微信机器人自动发送错误日志告警

一、需求:错误日志Top10告警发送 二、需求分解 jsoup实现登录,获取到cookie和token等用户鉴权信息获取接口相应的key值调用日志平台错误日志Top榜接口,查询到结果集调用企业微信机器人发送消息接口加上定时任务,可以实现定时发送…

11月30日作业

作业&#xff1a; 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using n…

vue.js ——Vuex

基本概念 vue进行开发过程中有没有遇到这样一种场景&#xff0c;就是有些时候一些数据是一种通用的共享数据&#xff08;比如登录信息&#xff09;&#xff0c;那么这类数据在各个组件模块中可能都会用到&#xff0c;如果每个组件中都去后台重新获取那么势必会造成性能浪费&am…

嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

一、前言&#xff1a; 这个项目主要分为两部分&#xff0c;客户端&#xff08;ARM板端&#xff09;负责利用OpenCV采集人脸数据&#xff0c;利用TCP将人脸数据发送给服务器&#xff0c;然后服务器根据人脸数据进行人脸识别&#xff0c;将识别后的结果返还给客户端&#xff0c;客…

Unity中Shader编译目标渲染器

文章目录 前言一、Unity在打包时&#xff0c;会把Shader编译成不同平台对应的代码我们在状态栏&#xff0c;可以看见我们目前所处于的目标平台 二、在Unity中&#xff0c;怎么指定目标平台1、#pragma only_renderers2、#pragma exclude_renderers 三、我们测试一下看看效果1、 …

C语言贪吃蛇(有详细注释)

这个贪吃蛇是在比特特训营里学到的&#xff0c;同时我还写了用EasyX图形库实现的图形化贪吃蛇&#xff0c;含有每个函数的实现以及游戏中各种细节的讲解&#xff0c;感兴趣的可以去看一看。 贪吃蛇小游戏 实现效果 以下就是源码&#xff0c;感兴趣的小伙伴可以cv自己玩一玩改…

Node.js+Express+Nodemon+Socket.IO构建Web实时通信

陈拓 2023/11/23-2023/11/27 1. 简介 Websocket WebSocket是一种在单个TCP连接上提供全双工通讯的协议。特别适合需要持续数据交换的服务&#xff0c;例如在线游戏、实时交易系统等。 Websocket与Ajax之间的区别 Ajax代表异步JavaScript和XML。它被用作一组Web开发技术&…

java实战(四):编写学生信息管理系统页面·

1.要求 编写程序 实现表格的输入和编辑功能。界面如下&#xff1a; 1、用户按插入键后&#xff0c;把学号、姓名和成绩插入到最后一行&#xff0c;序号显示当前的行号。 2、当用户选中表格的某一行时&#xff0c;按删除按钮&#xff0c;则这一行从表格中删除 3、编辑功能&am…

Linux常用命令——vi命令

文章目录 vi的工作模式常用快捷键提示和技巧结论 Linux环境下的vi编辑器不仅以其强大的功能著称&#xff0c;也因其快捷键而闻名。这些快捷键可以显著提高编辑效率&#xff0c;是每个使用vi的人必须掌握的。下面将扩展介绍vi的一些常用快捷键。 vi的工作模式 vi主要有两种模式…

Linux信号超详细剖析

预备知识&#xff1a; 一、信号产生(OS发给进程) 1、键盘组合键 Linux中&#xff0c;一次登录对应一个终端&#xff0c;bash/shell。且只允许一个进程是前台进程&#xff0c;默认就是bash/shell&#xff0c;其它都是后台进程。获取键盘输入的是前台进程。 Ctrlc: 向前台进程…

【android开发-01】android中toast的用法介绍

1&#xff0c;android中toast的作用 在Android开发中&#xff0c;Toast是一种用于向用户显示简短消息的轻量级对话框。它通常用于向用户提供一些即时的反馈信息&#xff0c;例如操作结果、提示或警告。 Toast的主要作用如下&#xff1a; 提供反馈&#xff1a;Toast可以在用户…

每日一练2023.12.1——帅到没朋友【PTA】

题目链接&#xff1a;L1-020 帅到没朋友 题目要求&#xff1a; 当芸芸众生忙着在朋友圈中发照片的时候&#xff0c;总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;&…

【MySQL】视图:简化查询

文章目录 create view … as创建视图更改或删除视图drop view 删除视图replace关键字&#xff1a;更改视图 可更新视图with check option子句&#xff1a;防止行被删除视图的其他优点简化查询减小数据库设计改动的影响使用视图限制基础表访问 create view … as创建视图 把常用…

分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现

文章目录 分布式锁0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#xff1a;基于Zookeeper - 分布式锁实现思想优缺点基于Redis - 分布式锁实现思想实现思想的具体步骤&…