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();
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于C#实现十字链表

上一篇我们看了矩阵的顺序存储,这篇我们再看看一种链式存储方法“十字链表”,当然目的都是一样,压缩空间。 一、概念 既然要用链表节点来模拟矩阵中的非零元素,肯定需要如下 5 个元素(row,col,val,down,right),其中&…

Unity之NetCode多人网络游戏联机对战教程(10)--玩家动画同步

文章目录 前言NetworkAnimation服务端权威客户端权威 前言 这次的动画同步与位置同步,可以说实现思路是一样的,代码相似度也非常高 NetworkAnimation 如果直接挂载这个脚本只有Host(服务端)才可以同步,Client是没有…

视频封面:视频图片提取技巧,从指定时长中捕捉需求的图片

在当今的数字时代,视频已成为日常生活中不可或缺的一部分。无论是社交媒体、博客,视频都发挥着重要的作用。而一个吸引的视频封面往往能吸引更多的观众点击观看,选择清晰度高、色彩鲜艳且能吸引人的图片。同时,确保图片与视频内容…

MySQL的Linux安装

在MySQL官网下载压缩包MySQL :: Download MySQL Community Server (Archived Versions) 下载完成后将压缩包上传到Linux中。我这里是下的CentOS的压缩包。 并且用的是FinalShell连接工具,可以选择压缩包直接上传。 ​ 上传完毕后,新建mysql文件夹&…

计算机视觉面试题-03

1、简单介绍一下sigmoid,relu,softplus,tanh,RBF及其应用场景 这里简单介绍几个激活函数及其应用场景: Sigmoid 函数(Logistic 函数): 公式: s i g m a ( x ) 1 1 e …

【香橙派】实战记录2——烧录安卓镜像及基本功能

文章目录 一、安卓烧录二、安卓基本功能1、蓝牙2、相机功能3、投屏 一、安卓烧录 检查环境:检查PC系统,确保有Microsoft Visual C 2008 Redistrbutable - x86,否则在官网下载的官方工具 - 安卓镜像烧录工具里运行vcredist_x86.exe。 插入存储…

模板上新|2023年10月DataEase模板市场上新动态

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…

Authing CEO 谢扬来信 |我的原则

从忙碌的工作中短暂抽身,有很多感想,不吐不快,借此机会,倾我所有,诉我原则。 原则一:坚强信念,坚定意志 商人大多「无利不起早」,而创业者的反馈周期比商人长非常非常多。 相比「商品…

【转】C代码利用CPU L1 cache一秒内算出十亿以内质数的个数

我去年发表了一篇 Python 代码+Numpy 库 Sieve算法实现一秒内计算出一亿以内的质数的个数: https://blog.csdn.net/Scott0902/article/details/128193368 今天在 GitHub 上找到国外牛人在三年前已经用 C 语言编写出利用 CPU L1 cache 来进行超高速计算…

Java 之 lambda 表达式(二)---- Stream 操作 API

目录 一. 前言 二. Stream 创建 2.1. 使用集合来创建 Stream 2.2. 使用数组创建 Stream 2.3. 由值创建 Stream 2.4. 由函数创建无限流 Stream 2.5. 代码示例 三. Stream 操作 3.1. 中间型操作 3.1.1. filter() 3.1.2. map() 3.1.3. mapToInt()、mapToLong()、mapTo…

Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

HarmonyOS-Service服务开发(一)

文章目录 创建新项目启动Serviceets获取service的bundleName DataAbility开发指导开发Data步骤创建Data 创建新项目 ServiceAbility开发指导 在config.json中也有配置出现 启动Service ets获取service的bundleName 项目的bundleName service的bundleName 这里serviceAbil…

青少年CTF之PHP特性练习(1-5)

青少年CTF-PHP特性练习 文章目录 青少年CTF-PHP特性练习PHP特性01PHP特性02PHP特性03PHP特性04PHP特性05 PHP特性01 看给出的源码&#xff0c;两个变量的值加密后的MD5相同 <?php$s1 "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47…

Nacos整合实际应用案例

Nacos数据隔离模型 公司->命名空间->分组->服务 命名空间通常用于隔离不同微服务之间的配置 分组用于隔离相同微服务下不同环境的配置 版本对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 应用案例 <par…

easyExcel自定义导出,指定列,设置请求头背景色,加入合计行,设置合计行字体,背景色等等

效果图 1.引入easyExcel pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency> 2.工具类-自定义样式handler-CustomCellWriteHandler import java.util…

GAN:DCGAN-深度卷积生成对抗网络

论文&#xff1a;https://arxiv.org/pdf/1511.06434.pdf 发表&#xff1a;ICLR 2016 一、架构创新 1&#xff1a;全卷积网络&#xff1a;用逐步卷积代替确定性的空间池化函数&#xff08;如maxpooling&#xff09;&#xff0c;使网络学习自己的空间下采样。使用这种方法&#…

【文献阅读笔记】关于GANomaly的异常检测方法

文章目录 1、GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training模型主要创新 2、Skip-GANomaly: Skip Connected and AdversariallyTrained Encoder-Decoder Anomaly Detection模型主要创新点 3、Industrial surface defect detection and localization u…

15 网关实战: 微服务集成Swagger实现在线文档

上节介绍了网关层面聚合API文档,通过网关的路由信息找到了各个服务的请求地址,这节讲一下微服务如何集成Swagger。 网关的API文档默认调用的是微服务的**/v2/api-docs**这个接口获取API详细信息,比如文章服务的URL:http://localhost:9000/blog-article/v2/api-docs,返回信…

【DeepLearning.AI】吴恩达系列课程——使用Gradio构建AI应用

目录 前言一、Gradio介绍1-1、Gradio介绍1-2、安装1-3、小栗子 二、使用Gradio构建AI应用2-1、NLP任务2-1-1、文本摘要2-1-2、命名实体识别 2-2、聊天任务&#xff08;ChatYuan&#xff09;2-2-1、模型介绍2-2-2、模型下载、参数设置2-2-3、模型测试2-2-4、嵌入到Gradio里2-2-5…

leetcode:2864. 最大二进制奇数(python3解法)

难度&#xff1a;简单 给你一个 二进制 字符串 s &#xff0c;其中至少包含一个 1 。 你必须按某种方式 重新排列 字符串中的位&#xff0c;使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式&#xff0c;表示并返回可以由给定组合生成的最大二进制奇数。…