子查询 封装属性创建Connection连接类 数据库连接池

子查询

        在select语句中包含另一个select 语句     -->子查询

子查询的分类

        单行单列子查询

        在where子句中使用   运算符 =     !=     >=    <=

        

  --      查询工资比公司平均工资高的员工信息

 --       查询与员工’smith‘同职位的员工信息

--        查询比员工joins入职造的员工信息

--        查询与scott同一个领导的员工信息

--        查询10号部门中最高工资的员工信息

--         查询20号部门中比本部门平均工资高的员工信息

单列多行查询

        在where子句中使用    运算符 all  some  any

查询比10号部门所有工资都高的员工信息

           select empno,ename,job,sal,deptno

          from emp

        where sal > all (select sal from emp where deptno =10)

查询20号部门中任意员工工资相同的非20号员工信息  any与in相同

        select empno,ename,job,sal,deptno

          from emp

        where sal = all (select sal from emp where deptno =20)

        and  deptno != 20;

查询比任何一个部门平均工资高的员工信息

        select *

        from emp

        where sal > any(select avg(sal) from emp group by deptno);

查询比每个部门平均工资都高的员工i信息

        select *

        from emp

        where sal > all (select avg(sal) from emp group by deptno)

查询与职位 salesman工资相同的员工信息

        select *

        from emp

        where sal = any(select sal from emp where job ='salesman');

查询所有领导的信息

        select *

        from emp

        where empno = any(select mgr from emp where mgr is not null )

查询所有非领导的信息

        select *

        from emp

        where empno != any(select mgr from emp where mgr is not null )

查询每个部门的平均工资(部门编号 部门名称 平均工资 工资等级)

        select dept.dname, dept.deptno,avg(sal),salgrade.grade

        from emp  inner join dept on emp.deptno = dept.deptno

                        inner join salgrade on emp.sal between salgrade.losal and salgrade.hisal 

        group by deptno

        having avg(sal) = any(select avg(sal) from emp group by deptno);

查询每个部门中最高工资的员工信息

1)每个部门的最高工资

        select deptno,max(sal)

        from emp

        group by deptno

2)

        select * 

        from emp

        where (deptno,sal) in(

                select deptno,max(sal)

                from emp

               group by deptno);

--方法2 多表查询

        select e.*

关联子查询

        内部的select中使用到外部select语句中查询到的数据

        当外部select语句执行一次,内部语句也会执行一次

查询每个部门中本部门高于平均工资的员工信息。按部门编号升序显示

        select *

        from emp inner join (select avg(sal),deptno from emp group by  deptno) a  on

        where sal > any(a)

        and   deptno = any(a)

        order by deptno;

        或

        select *

        from

查询所有领导信息

        select * from emp where empno in (select distinct mgr from emp where mgr is not null);

        

        select *

exists   子查询

        exists判断子查询是否有结果返回   有则为true

        not exists判断子查询是否有结果返回   无则为true

查询领导信息

        select * from emp e1 where exists (select mgr from emp e2 where e2.mgr = e1.empno);

查询没有员工的部门信息

        select * from emp e1 where exists

( select e2.deptno,d.*

 from emp e2 join on dept  d on e2.deptno = d.deptno where  e2.mgr is null )

查询没有领导的员工信息

        select * from emp e1 where exists

(select e1.empno

from emp e2 where  e2.mge is null)

数据库连接池

jdbc知识点

jdbc基本概述

jdbc相关的四个接口一个类

jdbc操作步骤

封装连接工具类

DAO service.view

事务

jdbc基本概述

        java database connect (java数据库连接技术)

相关四个接口一个类 java.sql   javax.sql包

        java.sql.Driver 驱动接口

        java.sql.Connection连接接口

        java.sql.Statement:接口 把java中sql语句发送到数据库,并返回执行后的结果

        java.sql.ResultSet 结果集接口 指        Statement执行查询后的结果集

        java.sql.DriverManager 驱动管理类

操作步骤

        1)查询的操作步骤

                1加载驱动 Class.forName(驱动实现类的名称)

                2获取连接

                        Connection c = DriverManager.getConnection(url,user,password)

                3定义查询的sql语句

                        String sql= "";

                4创建Statement对象

                        Statement  s =c.createStatement();

        

                5调用Statement的查询方法,返回结果集

                        Result r = s.executeQuery(sql);

                        注意没有查询到数据,结果集对象不为null,r.next()为false

                6遍历结果集

                        r.next():

                                结果集光标在第一行的列名之前,

                                第一次调用next方法使数据第一行成为当前行

                        读取每列的值

                                r.getXXX(int index): 按列的下标读取,下标从一开始 指结果集的下标

                                r.getXXX(String columnName)按列名读取数据 指结果集的列名

                 7 释放资源

执行增删改的操作步骤

        s.updateQuery(sql);

使用PreparedStatement 替换 Statement

        java.sql.PreparedStatement extends Statement

        表示预编译的sql语句对象

区别

        1)Statement使用字符串拼接sql语句,易造成sql注入不安全

        PreparedStatement使用占位符编写sql语句,防止sql注入,提高数据安全性

        2)PreparedStatement预编译sql语句,多次高效执行sql语句,预编译的sql仅执行一次

        多次执行,statement对象每次都先编译再执行.

连接工具类

 如果数据库发生改变,连接字符串同时也发生改变?

        实现步骤

        1)定义一个配置文件(src目录下)xxx.properties

        2)在DBUtil使用properties属性文件获取属性值

        3)当有多个线程同时操作连接时,出现异常

        原因:Connection是static修饰的,多个线程使用的同一个连接对象

        其中一个线程把连接关闭.其他线程连接关闭

                解决方式一:是否可以把获取连接方法时,每次获取生成一个新的连接对象?

                       这种方式不可以,当有实务操作时,保证所有的sql操作使用的为同一个连接对象

                解决:为每个线程单独存储一份连接对象

                ThreadLocal对象  java.lang包下

                        为每个线程存储单独的数据,互相之间不影响.

 问题:当有多个线程访问时,每一个线程都创造一个连接对象

                会造成资源的浪费,同时增加维护成本.

        解决方案:

                使用连接池

        1)有哪些常用的连接池

                DBCP,C3PO,MDRUID

        2)核心对象 javax.sql.Datasource

        3)实现步骤

                1在项目中添加jar包

        

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

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

相关文章

工业制造领域系统:SCADA、PLC、DCS、MES、HMI、ERP等,一文秒懂

工业制造控制系统在工业制造领域起到了关键的作用&#xff0c;帮助企业提高生产效率、降低成本、提高产品质量和安全性。不同的企业根据自身需求和规模&#xff0c;可能会选择使用其中的一种或多种系统。 SCADA系统&#xff08;Supervisory Control and Data Acquisition&…

数据和类型转换

文章目录 数据类型数字类型数字操作NaNJavaScript算术运算符的执行顺序 字符串类型&#xff08;string&#xff09;字符串拼接模板字符串 未定义类型&#xff08;undefined&#xff09;布尔类型&#xff08;boolean&#xff09;null&#xff08;空类型&#xff09; 类型转换显式…

【DL经典回顾】激活函数大汇总(十三)(Sinc SwiGLU附代码和详细公式)

激活函数大汇总&#xff08;十三&#xff09;&#xff08;Sinc & SwiGLU附代码和详细公式&#xff09; 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里&#xff0c;激活函数扮演着不可…

ARM 寄存器学习:(一)arm多种模式下得寄存器

一.ARM7种状态以及每种状态的寄存器&#xff1a; ARM 处理器共有 7 种不同的处理器模式&#xff0c;在每一种处理器模式中可见的寄存器包括 15 个通用寄存器( R0~R14)、一个或两个(User和Sys不是异常模式&#xff0c;没有spsr寄存器)状态寄存器&#xff08;cpsr和spsr&…

Unity开发一个FPS游戏之二

在之前的文章中,我介绍了如何开发一个FPS游戏,添加一个第一人称的主角,并设置武器。现在我将继续完善这个游戏,打算添加敌人,实现其智能寻找玩家并进行对抗。完成的效果如下: fps_enemy_demo 下载资源 首先是设计敌人,我们可以在网上找到一些好的免费素材,例如在Unity…

KKView远程控制: todesk内网穿透

Todesk内网穿透&#xff1a;实现远程访问的新途径 在数字化时代&#xff0c;远程访问已成为许多企业和个人的基本需求。Todesk作为一款远程桌面控制软件&#xff0c;其内网穿透功能为用户提供了便捷、安全的远程访问体验。本文将介绍Todesk内网穿透的原理、应用场景及其优势&a…

【C++ 】list 类

1. 标准库中的list类 list 类 的介绍&#xff1a; 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代 2. list与forward_list非常相似&#xff1a;最主要的不同在于forward_list是单链表 3. 与其他的序列式容器相比(a…

爆肝总结,Python接口自动化测试-接口关联实例,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 参数关联&#xf…

Python解释器安装

下载Python解释器 如果您从未安装过Python解释器&#xff0c;那么在编写Python代码前需要安装该解释器。什么是Python解释器呢&#xff1f; “Python解释器”就像是一个能够理解和执行Python编程语言的“翻译官”。你写的Python代码&#xff08;一系列指令&#xff09;需要有一…

Redis:持久化、线程模型、大 key

Redis持久化方式有什么方式&#xff1f; Redis 的读写操作都是在内存中&#xff0c;所以 Redis 性能才会高&#xff0c;但是当 Redis 重启后&#xff0c;内存中的数据就会丢失&#xff0c;那为了保证内存中的数据不会丢失&#xff0c;Redis 实现了数据持久化的机制&#xff0c…

宠物食品药品小程序有哪些功能

现在很多人都喜欢养宠物&#xff0c;这带动了宠物相关产业链&#xff0c;例如宠物医院、宠物清理、宠物食品、宠物玩具、宠物药品等。那么今天就介绍宠物食品药品小程序有哪些功能&#xff0c;以帮助您更好地为宠物行业的客户提供服务。 1. **商品展示**&#xff1a;宠物食品小…

二分查找注意事项

目录 1解题思路:首先二分查找分为左闭右闭和左闭右开两种情况&#xff0c;二种情况在细节处理上有所不同 2左闭右闭情况 3左闭右开 4总结&#xff1a; 1解题思路:首先二分查找分为左闭右闭和左闭右开两种情况&#xff0c;二种情况在细…

算法打卡day13|二叉树篇02|Leetcode 102.二叉树的层序遍历、226.翻转二叉树、101. 对称二叉树

在做题之前说明 Deque和Queue 在Java中&#xff0c;Deque和Queue是两种不同的数据结构接口&#xff0c;它们都继承自Collection接口&#xff1b;Deque是Queue的超集&#xff0c;提供了更多的操作和灵活性&#xff0c;以下它们之间存在一些关键的区别&#xff1a; 操作范围&…

【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug

文章目录 前言 时间阈值断点 信号阈值断点 周期步进 Signal Value Lable Data Inspector 分析和应用 总结 前言 近期在一些研发项目中使用Matlab/Simulink时&#xff0c;遇到了挺多费时费力的事情。所以利用晚上和周末时间&#xff0c;在这些方面深入研究了一下&#x…

GPT实战系列-LangChain的OutPutParser解析器

GPT实战系列-LangChain的OutPutParser解析器 LangChain GPT实战系列-LangChain如何构建基通义千问的多工具链 GPT实战系列-构建多参数的自定义LangChain工具 GPT实战系列-通过Basetool构建自定义LangChain工具方法 GPT实战系列-一种构建LangChain自定义Tool工具的简单方法…

leetcode 3.11

leetcode hot 100 二分查找1.寻找旋转排序数组中的最小值 矩阵1.搜索二维矩阵 II知识点&#xff1a;upper_bound, lower_bound知识点&#xff1a;二分查找 2.搜索二维矩阵 链表1.合并两个有序链表2.两数相加3. 删除链表的倒数第 N 个结点 二分查找 1.寻找旋转排序数组中的最小…

复习C语言基础中的基础:C语言发展、C89 C99有何区别、C语言特点

参考《C程序设计&#xff08;第五版&#xff09;》&#xff08;谭浩强&#xff09;一书&#xff1a; 1. 发展、C89 C99 2. 特点 记得时不时回顾一下背景特点&#xff0c;加深对C语言的理解。

git的实际运用

1. SSH配置和Github仓库克隆 注意博主在这里演示的SSH密钥生成方式&#xff0c;下面追加的五行不成功时可手动到.ssh下的config文件中添加即可 $ tail -5 config Host github.comHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/test 演示 2. 关联…

数据完整性

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据完整性 数据完整性是关系数据库的一个重要特征&#xff0c;一般包含实体完整性、参照完整性和用户自定义完整性 3 种 实体完整性 实体完整性&#xff1a;规定表中的每…

QML| QML 组件

# | QML 组件 | 组件是可重用的、封装好的QML类型,并提供了定义好的接口。组件一般使用一个.qml文件定义。前面讲到的使用QML文档定义对象类型,其实就是创建了一个组件。这种使用独立QML文件创建组件的方法这里不再讨论。除了使用单独的QML文件,还可以使用Component类型在一…