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

news2024/9/27 21:25:32

目录

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.coloradmin.cn/o/1262692.html

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

相关文章

一文解决msxml3.dll文件缺失问题,快速修复msxml3.dll

在了解问题之前,我们必须首先清楚msxml3.dll到底是什么。DLL(Dynamic Link Libraries)文件是Windows操作系统使用的一个重要组成部分,用于存储执行特定操作或任务的代码和数据。msxml3.dll为Windows系统提供处理XML文档的功能。如…

竞赛选题 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

亚马逊养号的用途?有没有快速养号方法?

亚马逊养号通常是创建多个买家账号来进行浏览、对比等,以下是一些可能的用途: 刷好评:通过养号,可以通过自己的账号给自己或他人的产品发布好评,以提高商品的声誉和销售。 刷销量:通过大量买家账号购买商品…

idea社区版免费下载方式

1.访问中国区网站 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 2.完成下载安装

Python3.6.8升级Python3.12.0版本小记

Python3.6.8 升级 Python3.12.0版本小记 前言一、查看系统已安装Python的相关信息二、升级Python三、解决问题记录:升级之后cmd查看python版本仍为原版本 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一…

融云筑基,移动云加速构建高性能智能算力底座

自2022年11月以来,全球大模型数量迅速增加,以ChatGPT为代表的大模型已经成为世界数字科技领域新热点。大模型带来的算力需求迅速增长,未来智算场景将会有非常大的突破空间。 在“十四五”规划的指引下,各地政府积极投入智算中心建…

【Qt】QStackedWidget、QRadioButton、QPushButton及布局实现程序首页自动展示功能

效果 在程序启动后,有时不会进入到工作页面,会进入到产品展示页面。 动画如下: 首页展示 页面操作 当不点击时,一秒自动刷新一次;当点击时,会自动跳转到对应页面;点击上一页、下一页、及跳转页…

安防视频监控/视频融合/云存储EasyCVR页面数据显示不全该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

11.27/28 知识回顾与问题(Django之Web应用与http协议)

一、http有哪些主要版本以及特点 1. 主要版本以及各自特点 HTTP/0.9:最初版本的HTTP协议,只支持GET方法,并且没有请求头和响应头的概念,只能传输纯文本。于1991年发布,由Tim Berners-Lee创建,被认为是HTTP的…

【数据结构复习之路】树和二叉树(严蔚敏版)万字详解主打基础

专栏:数据结构复习之路 复习完上面四章【线性表】【栈和队列】【串】【数组和广义表】,我们接着复习 树和二叉树,这篇文章我写的非常详细且通俗易懂,看完保证会带给你不一样的收获。如果对你有帮助,看在我这么辛苦整理…

RPA机器人如何解决非银企直联网银账户的数据自动采集?

数字时代来临,随着全球信息化水平的不断提升,企业们纷纷向自动化办公、数字化转型靠拢。财务部门作为一个企业的重要部门,承担着管理和监控公司所有项目的重要职责,因而一直被视为企业数字化转型的重要突破口。 由于企业经营理念和…

LeetCode算法题解(动态规划)|LeetCode198. 打家劫舍、LeetCode213. 打家劫舍 II、LeetCode337. 打家劫舍 III

一、LeetCode198. 打家劫舍 题目链接:198. 打家劫舍 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的…

基于Webserver的工业数据采集控制

http协议 http简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于Web Browser(浏览器)到Web Server(服务器)进行数据交互的传输协议。 HTTP是应用层协议 HTTP是一个基于…

“AI+量子模拟”突破!英伟达与美国量子技术公司SandboxAQ合作

(图片来源:网络) 11月20日,美国量子技术公司SandboxAQ在美国加利福尼亚州帕洛阿尔托宣布与美国人工智能计算公司英伟达(NVIDIA)联手,双方将通过人工智能和量子模拟技术助力药物发现、电池设计、…

Echarts大屏可视化_01 初始化项目+基本布局

资源、源码来自于B站黑马pink老师 让我们一起来学习吧!!! 链接:https://pan.baidu.com/s/1B7jS-8ZWdYabA9JKqFPpRw 提取码:6666 项目演示视频 1.初始化项目 我们的适配方案选择用flex布局rem单位来做。使用flexible…

汽车电子 -- 车载ADAS之RCW(后碰撞预警系统)

国际标准: RCW: GB 4785-2019 汽车及挂车外部照明和光信号装置的安装规定 一、后方碰撞预警系统 RCW( Rear Collision Warning ) 参看:功能定义-后方碰撞预警 RCW 功能可以对自车行驶过程中对后方车辆进行监测,当…

数据结构校招知识点总结

文章目录 前言1. 数据结构概论、算法设计与分析1.1 数据结构三要素?1.2 算法的基本概念?1.3 什么是时间复杂度? 2. 线性表2.1 链表结构和顺序存储结构的区别?2.2 单链表和双链表的区别?2.3 头指针和头结点的区别&#…

日期对象与节点操作

1.日期对象 1.1实例化 // 实例化const date new Date()console.log(date);// 返回指定时间const date1 new Date(2022-5-1 08:30:00)console.log(date1);1.2日期对象方法 1.3时间戳 三种获取时间戳的方法 const date new Date()console.log(date.getTime());console.log(ne…

java分布式锁分布式锁

java分布式&锁&分布式锁 锁 锁的作用:有限资源的情况下,控制同一时间段,只有某些线程(用户/服务器)能访问到资源。 锁在java中的实现: synchronized关键字并发包的类 缺点:只对单个的…