子查询 封装属性创建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.hqwc.cn/news/538338.html

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

相关文章

八数码(C++)

原题在这里P1379 八数码难题 思路&#xff1a; 本题的思路很有意思&#xff0c;首先我们知道0是可以和上下左右交换位置的&#xff08;前提是不出边界&#xff09; 不难看出我们可以把这个二维数组给转化为一个相对应的字符串来表示当前的状态&#xff0c;每进行一次&#xff…

wxss和css的区别

目录 1. 语法差异 2. 尺寸单位 3. 样式导入 WXSS 示例代码&#xff1a; CSS 示例代码&#xff1a; 4. 组件和属性的支持 总结 WXSS (WeiXin Style Sheets) 和 CSS (Cascading Style Sheets) 都是用于描述文档样式的语言&#xff0c;但它们在微信小程序和网页开发中有一些…

英飞凌电源管理PMIC的安全应用

摘要 本篇文档主要用来介绍英飞凌电源管理芯片TLF35584的使用&#xff0c;基于电动助力转向应用来介绍。包含一些安全机制的执行。 TLF35584介绍 TLF35584是英飞凌推出的针对车辆安全应用的电源管理芯片&#xff0c;符合ASIL D安全等级要求&#xff0c;具有高效多电源输出通道&…

413 Request Entity Too Large 问题如何解决

遇到“413 Request Entity Too Large”错误通常意味着你尝试上传或提交到服务器的数据量超过了服务器能够处理的限制。这个问题通常与Web服务器的配置相关&#xff0c;比如Nginx或Apache。这个问题出现在使用Nginx作为Web服务器的环境中。这里有几种解决方法&#xff1a; 1. 调…

【UE5】非持枪趴姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态趴姿移动的动画混合空间 在BlendSpace文件夹中单击右键选择 动画(Animation) 中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_NormaProne 打开BS_NormaProne 水平轴表示角色的方向&#xff0c;命名为Directi…

【刷题训练】反转字符串i 和 ii(区间部分翻转)

344.反转字符串 题目要求 示例 1&#xff1a; 输入&#xff1a;s [“h”,“e”,“l”,“l”,“o”] 输出&#xff1a;[“o”,“l”,“l”,“e”,“h”] 示例 2&#xff1a; 输入&#xff1a;s [“H”,“a”,“n”,“n”,“a”,“h”] 输出&#xff1a;[“h”,“a”,“n”,…

paraview处理openfoam对称模型

paraview处理openfoam对称模型 步骤如下: 导入对称模型,以openfoam中xx\tutorials\incompressible\SRFSimpleFoam\mixer中的搅拌器为例;使用ctrl+space,查找transform,在Filters中也能找到;经过三次transform,可以移动旋转出对称的其他3部分;经过此三次移动旋转,并不能…

C#文件交互

C#是一种流行的编程语言&#xff0c;广泛应用于开发各种类型的应用程序&#xff0c;包括需要进行文件交互的应用程序。文件交互是指应用程序与计算机文件系统进行交互&#xff0c;包括读取、写入、创建、删除和修改文件等操作。在C#中&#xff0c;文件交互通常通过.NET框架提供…

工业界真实的推荐系统(小红书)-召回-改进双塔模型-自监督学习

课程特点&#xff1a;系统、清晰、实用&#xff0c;原理和落地经验兼具 b站&#xff1a;https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义&#xff1a;https://github.com/wangsh…

傅立叶之美:深入研究傅里叶分析背后的原理和数学

一、说明 T傅里叶级数及其伴随的推导是数学在现实世界中最迷人的应用之一。我一直主张通过理解数学来理解我们周围的世界。从使用线性代数设计神经网络&#xff0c;从混沌理论理解太阳系&#xff0c;到弦理论理解宇宙的基本组成部分&#xff0c;数学无处不在。 当然&#xff0c…

蓝桥杯前端Web赛道-水果消消乐

蓝桥杯前端Web赛道-水果消消乐 题目链接&#xff1a;2.水果消消乐 - 蓝桥云课 (lanqiao.cn) 题目要求可查看题目文件夹中的effect.gif文件。 下面开始分析题目需要我们做什么 首先显而易见的是&#xff0c;当点到相同的水果的时候&#xff0c;对于的格子消失&#xff1b;如…

想要自己制作一款游戏,需要掌握哪些基本技能?

你是否曾经沉浸在游戏的世界中&#xff0c;感受到游戏带来的无限乐趣&#xff1f;你是否曾经梦想能够亲手制作一款属于自己的游戏&#xff0c;为玩家带来独特的体验&#xff1f;然而&#xff0c;要实现自己的游戏创作梦想&#xff0c;并不是一件轻松的事情。需要掌握各种技能和…