plsql如何执行单个语句_在单个try-with-resources语句中仔细指定多个资源

plsql如何执行单个语句

Java 7最有用的新功能之一是引入了try-with-resources语句 [AKA 自动资源管理 ( ARM )]。 try-with-resources语句的吸引力在于它承诺 “确保在语句末尾关闭每个资源”。 在这种情况下,“资源”是实现AutoCloseable及其close()方法并在try-with-resources语句的“ try”子句中实例化的任何类。

Java语言规范 [JLS]在14.20.3节 (在这种情况下为Java SE 10 JLS )中详细描述了try-with-resource语句 。 JLS声明“ try -with-resources语句是使用局部变量(称为resources )进行参数化的,这些局部变量在try块执行之前进行了初始化,并在执行try之后以与初始化时相反的顺序自动关闭块。”

JLS明确指定可以相对于单个try -with-resources语句定义多个资源,并且它指定如何指定多个资源。 具体地说,它表明try可以跟随一个“ ResourceSpecification ,其由一个”的“ ResourceList ,其由一个或多个“的” 资源 “秒。 当声明的资源多于一个时,多个资源用分号( ; )分隔。 用分号分隔的列表指定多个资源非常重要,因为try -with-resources语句将不支持(不会自动关闭)未以此方式声明的任何候选资源。

try -with-resources语句中指定多个资源时,最可能的错误源是“嵌套”“资源”的实例化,而不是显式地实例化每个变量的局部变量,而在每个实例化之间不使用分号。 以下示例将说明差异。

接下来显示两个荒谬但说明性的类。 每个类都实现AutoCloseable ,因此可以与try -with-resources结合使用,并且在与try -with-resources语句正确使用时将自动调用其close()方法。 命名它们以反映可以使用InnerResource的实例实例化OuterResource

InnerResource.java

package dustin.examples.exceptions;import static java.lang.System.out;public class InnerResource implements AutoCloseable
{public InnerResource(){out.println("InnerResource created.");}public InnerResource(final RuntimeException exceptionToThrow){throw  exceptionToThrow != null? exceptionToThrow: new RuntimeException("InnerResource: No exception provided.");}@Overridepublic void close() throws Exception{out.println("InnerResource closed.");}@Overridepublic String toString(){return "InnerResource";}
}

OuterResource.java

package dustin.examples.exceptions;import static java.lang.System.out;public class OuterResource implements AutoCloseable
{private final InnerResource wrappedInnerResource;public OuterResource(final InnerResource newInnerResource){out.println("OuterResource created.");wrappedInnerResource = newInnerResource;}public OuterResource(final InnerResource newInnerResource,final RuntimeException exceptionToThrow){wrappedInnerResource = newInnerResource;throw  exceptionToThrow != null? exceptionToThrow: new RuntimeException("OuterResource: No exception provided.");}@Overridepublic void close() throws Exception{out.println("OuterResource closed.");}@Overridepublic String toString(){return "OuterResource";}
}

现在,可以使用刚刚定义的两个类来证明在用分号分隔的列表中的同一try -with-resources语句中正确声明每个实例的实例与在外部资源的构造函数中错误地嵌套内部资源的实例之间的区别。 后一种方法效果不理想,因为就调用其AutoCloseable.close()方法而言,没有本地定义变量的内部资源不会被视为“资源”。

下一个代码清单演示了在try -with-resources语句中实例化“资源”的错误方法。

try -with-resources语句中实例化资源的错误方法

try (OuterResource outer = new OuterResource(new InnerResource(), new RuntimeException("OUTER")))
{out.println(outer);
}
catch (Exception exception)
{out.println("ERROR: " + exception);
}

执行上述代码后,输出“ InnerResource created”。 可以看到,但是从未显示与资源关闭相关的输出。 这是因为InnerResource的实例是在对OuterResource类的构造函数的调用中实例化的,并且从未在try -with-resource语句的资源列表中分配给其自己的单独变量。 对于真正的资源,这意味着资源没有正确关闭。

下一个代码清单演示了在try -with-resources语句中实例化“资源”的正确方法。

try -with-resources语句中实例化资源的正确方法

try(InnerResource inner = new InnerResource();OuterResource outer = new OuterResource(inner, new RuntimeException("OUTER")))
{out.println(outer);
}
catch (Exception exception)
{out.println("ERROR: " + exception);
}

当执行上面紧接的代码时,输​​出将包括“ InnerResource created”。 并且“ InnerResource已关闭。” 因为InnerResource实例已在try -with-resources语句中正确分配给变量,因此即使实例化期间发生异常,也将正确调用其close()方法。

Java教程的try-with-resources语句部分包括几个示例,这些示例正确地将try -with-resources中的资源指定为以分号分隔的单个变量定义。 一个示例通过java.util.zip.ZipFile和java.io.BufferedWriter展示了这种正确的方法,而另一个示例通过java.sql.Statement和java.sql.ResultSet的实例展示了这种正确的方法。

在JDK 7中引入try -with-resources是对该语言的一种受欢迎的补充,它使Java开发人员可以更轻松地编写不太可能泄漏或浪费资源的资源安全的应用程序。 但是,当在单个try -with-resources语句中声明多个资源时,重要的是要确保每个资源都单独实例化并分配给在try的资源说明符列表中声明的自己的变量,以确保每个资源都是正确关闭。 一种快速的检查方法是确保对于try指定的n个 AutoCloseable实现资源,应该有n-1个分号来分隔这些实例化的资源。

翻译自: https://www.javacodegeeks.com/2018/08/carefully-specify-multiple-resources.html

plsql如何执行单个语句

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

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

相关文章

Spring Cloud Feign 负载均衡

一、Feign负载均衡介绍 Feign本身集成了Ribbon依赖和自动配置,因此不需要额外引入依赖,也不需要再注册RestTemplate对象 Feign内置的ribbon默认设置了请求超时时长,默认是1000,可以修改 ribbon内部有重试机制,一旦超…

Linux 命令之 pwunconv -- 关闭投影密码

文章目录命令介绍命令介绍 pwunconv 命令与 pwconv 功能相反,用来关闭用户的投影密码。它会将密码从 /etc/shadow 文件内,重新回存到 /etc/passwd 文件中。换句话说,pwunconv 命令将文件 /etc/shadow 中的数据同步到文件 /etc/passwd 中&…

apache ignite_Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别

apache igniteApache Ignite在世界范围内得到广泛使用,并且一直在增长。 诸如Barclays,Misys,Sberbank(欧洲第三大银行),ING,JacTravel之类的公司都使用Ignite来增强其架构的功能,这…

Spring Cloud Feign 熔断器支持

一、实现步骤 在配置文件application.yml中开启feign熔断器支持编写FallBack处理类,实现FeignClient客户端在FeignClient注解中,指定FallBack处理类。测试 1. 在配置文件application.yml中开启feign熔断器支持:默认关闭 # 开启Feign的熔断功…

system health_可重复使用的MicroProfile Health探针

system healthMicroProfile Health API是一种非常基本的API,它基于一个或多个Health Probe报告您的服务状态。 在某些服务器或群集控制器需要决定是否以及何时重新启动实例的情况下,这非常有用。 在应用程序中使用MicroProfile Health API就像实现一个&…

Linux 命令之 visudo -- 编辑/etc/sudoers文件

文章目录命令介绍常用选项参考示例编辑文件 /etc/sudoers检查 /etc/sudoers 文件的语法错误、所有者和模式命令介绍 使用 visudo 命令可以打开 /etc/sudoers 文件进行编辑。当然 vim 也可以编辑该文件,但是不建议这样做,因为使用命令 visudo 编辑文件 /…

Spring Cloud Feign 请求压缩 、Feign的日志级别配置

一、Spring Cloud Feign 请求压缩 #开启压缩compression:request:enabled: true # 开启请求压缩#最小触发压缩的大小min-request-size: 2048#触发压缩数据类型,(注意不能使用"" ,)mime-types: text/xml, application/xml, applicat…

Linux 命令之 sudoedit -- 以另外一个用户身份编辑文件

文章目录命令介绍常用选项参考示例以用户 root 身份来编辑指定的文件以其它用户身份编辑指定的文件命令介绍 查看使用帮助,感觉和命令 sudo 完全一样。 [mysqlhtlwk0001host ~]$ sudoedit -h sudoedit - 以其他用户身份编辑文件usage: sudoedit [-AknS] [-r role]…

文档在线签名_为什么需要为文档和合同切换到在线签名

文档在线签名嘿,怪胎, 今天,我们为您带来一些不同。 无论您是开发人员,经理还是设计师,这都会提高您的生产力和效率。 对于公司和个人而言,良好地管理文书工作是强大基础的最重要部分之一。 将工作流程从…

网关 Spring Cloud Gateway

一、 Gateway 简介 Spring Cloud Gateway 是Spring Cloud团队的一个全新项目,基于Spring 5.0、SpringBoot2.0、Project Reactor 等技术开发的网关。 旨在为微服务架构提供一种简单有效统一的API路由管理方式。 Spring Cloud Gateway 作为SpringCloud生态系统中的网…

Linux命令之su -- 用于切换当前用户身份到其他用户身份

文章目录命令介绍特别重要常用选项su 命令存在的安全隐患参考示例切换成指定的用户身份,但是环境变量不变切换成指定的用户身份,并且改成对应用户的环境变量切换成指定的用户,并告知新的 shell 不要去读取启动文件切换成指定的用户执行命令&a…

apache ignite_Apache Ignite变得简单:第一个Java应用程序

apache ignite在本文中,我们将更进一步,让您完成第一个Ignite应用程序的创建,以从分布式缓存中进行读写操作。 作为第一个示例,我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存…

Linux 命令之 sudo -- 以其他用户身份来执行命令

文章目录命令介绍原理相关文件通配符和命令 su 的比较常用选项几个重要选项的解读-k 选项-s 选项-i 选项su、sudo su、sudo -i 的区别查看日志文件参考示例以用户 mysql 的身份执行命令 pwd以用户 root 的身份执行命令 pwd以 root 的权限执行上一条命令以 root 的权限编辑指定的…

openjdk和jdk_JDK 11:发行候选更新和OpenJDK JDK 11 LTS

openjdk和jdkJDK 11 计划于 2018年9月25日星期二发布,以实现全面可用性 。OpenJDK jdk-dev邮件列表上的Mark Reinhold消息于2018 年8月16日宣布“ JDK 11现在处于发布候选阶段 。” 但是,Reinhold在2018年8月17日同一封邮件列表中的消息中提供了更新的详…

Linux系统通过文件/etc/sudoers设置用户使用sudo的权限/用户使用sudo的授权配置

文章目录sudo 权限配置说明如何修改 sudo 会话有效期设置输入密码时显示星(*)号别名规则如何定义别名及使用别名配置权限为什么配置的命令要使用绝对路径参考示例授权用户 test 可以重启服务器授权群组可以使用 sudo 切换成任何用户身份,执行…

system.gc 性能_使用这些先进的GC技术提高应用程序性能

system.gc 性能应用程序性能是我们关注的重点,垃圾收集优化是取得小而有意义的进步的好地方 自动化垃圾收集(与JIT HotSpot编译器一起)是JVM中最先进,最有价值的组件之一,但是许多开发人员和工程师对垃圾收集&#…

Linux 命令之 who -- 打印当前登录用户/显示目前登入系统的用户信息。

文章目录命令介绍常用选项参考示例打印用户登录信息打印全面的信息打印系统登录进程显示登录系统的所有用户名称和总人数命令介绍 who 命令用来打印当前登录用户信息,包含了系统的启动时间 、 活动进程 、 使用者 ID、使用终端等信息,是系统管理员了解系…

SpringCloud全局过滤器自定义

一、实现步骤: 在gateway_service工程编写全局过滤器类GlobalFilter,Ordered编写业务逻辑代码访问接口测试,加token和不加token。 二、业务逻辑代码 package com.william.filters;import org.springframework.cloud.gateway.filter.GatewayFilterChain…

Linux 命令之 whoami -- 打印当前有效的用户名称

文章目录命令介绍参考示例命令介绍 whoami 命令用于打印当前有效的用户名称,相当于执行 id -un 命令。 参考示例 [roothtlwk0001host ~]# whoami root

java流写入数据库_使用Java流查询数据库

java流写入数据库在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够使用现有数据库中的数据,而无需编写一行SQL(或类似的语言,如HQL),而无需花费数小时将所有内容放在一起。 准备好应用…