java数据库编程——元数据(metadata)+web 与企业应用中的连接管理

【0】README

1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java数据库编程——元数据(metadata)+web 与企业应用中的连接管理 的基础知识 ;
2)for database connection config, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/database.properties


【1】元数据(metadata)

1)元数据定义:关于数据库及其表的结构的详细信息; (干货——元数据定义)
2)三类元数据:数据库的元数据, 结果集的元数据, 预备语句参数的元数据; (干货——元数据类型)
3)如果要了解更多信息,从数据库连接中获取一个 DatabaseMetadata对象:
DatabaseMetaData data = conn.getMetadata();

  • 3.1)现在就可以获得某些元数据了, 如
    ResultSet rs = meta.getTables(null, null, null, new String[]{TABLE”});
    将返回一个包含所有数据库表信息的结果集;

4)数据库元数据还有第二个重要应用:

4.1)数据库是非常复杂的, sql 标准为数据库的多样性提供了很大的空间。 DatabaseMatadata 接口中有上百个方法可以用于查询数据库中的相关信息,包括一些奇特的名字进行调用的方法, 如:
meta.supportsCatalogInPrivilegeDefinitions() 和 meta.nullPlusNonNullIsNull();
4.2)DatabaseMetaData 接口用于提供有关数据库的数据, 第二个元数据接口 ResultSetMetaData则用于提供结果集的相关信息。 每当通过查询得到一个结果集时,我们都可以获得该结果集的列数以及每一列的名字, 类型, 和字段宽度。 下面是一个典型循环:

ResultSet mrs = stat.executeQuery(“select * from table”);
ResultSetMetaData meta = mrs.getMetaData();
// index starts from 1 not 0.
for(int i=1; i<=meta.getColumnCount(); i++)
{
String columnName = meta.getColumnLabel(i);
int columnWidth = meta.getColumnDisplaySize(i);
}

5)看个荔枝(查看列名和列宽度)

  • 5.1)for souce code, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/DBMetadataTest.java
  • 5.2)key source code at a glance:
public static void main(String[] args){try{try(Connection conn = getConnection()){String sql = "select * from student";Statement stat = conn.createStatement();ResultSet rs = stat.executeQuery(sql);ResultSetMetaData metadata = rs.getMetaData();// index starts from 1 not 0.for (int i = 1; i <= metadata.getColumnCount(); i++){// 返回该列所建议的名称.String colName = metadata.getColumnLabel(i);int colWidth = metadata.getColumnDisplaySize(i);// 返回给定序列号的列的最大宽度.System.out.println("colName = " + colName + ", colWidth = " + colWidth);}}}catch(Exception e){e.printStackTrace();}
  • 5.3)relative printing results as follows:
    这里写图片描述

【2】web 与企业应用中的连接管理

1)problem+solution:

  • 1.1)problem: 使用 database.properties 文件可以对数据库连接进行简单的设置,但不适用于规模较大的应用, 仅适用于 小型测试程序;
  • 1.2)solution: 在 web 或企业中部署JDBC应用时, 数据库连接管理与 java 名字和目录接口(JNDI)是集成在一起的。 遍布企业的数据源的属性可以存储在一个目录中,采用这种方式使得我们可以集中管理用户名, 密码, 数据库名和 JDBC URL;
    (干货——引入JNDI==Java Name and Directory Interface,java 名字和目录接口)

Attention)

  • A1)我们不再使用 DriverManager, 而是使用 JNDI 访问来定位数据源; (干货——不再使用 DriverManager, 而是使用 JNDI 访问来定位数据)
  • A2)数据源就是一个能够提供简单的 JDBC 连接和更多高级服务的接口, 比如执行涉及多个数据库的分布式事务;
  • A3) javax.sql 标准扩展包定义了 DataSource 接口;
  • A4)在 java EE 容器中, 甚至不必编程进行 JNDI 查找, 只需在 DataSource 域上使用 Resource 注解, 但加载应用时, 这个数据源引用将被设置;如,
    @Resource(name=”jdbc/corejava”)
    private DataSource source;

    • A4.1)当然了, 我们必须配置数据源。如果你编写的数据库程序将在 servlet 容器中运行, 如 tomcat, 或应用服务器中运行, 如GlassFish, 那么必须将 数据库配置信息(包括JNDI名字, JDBC URL, 用户名和密码) 放置在配置文件中, 或在管理员 GUI 中进行设置;

2)problem+solution (干货——这个problem+solution引入了 数据库连接池 的概念 )

  • 2.1) problem:涉及建立数据库连接所需的开销问题: 我们的数据库程序给出了两种策略来获取数据库连接: 1,在程序开头建立到数据库的单个连接; 2,在每次需要时都打开一个新连接;

    • 2.1.1)但这两种方式都不令人满意: 因为数据库资源是有限的资源, 如果用户要离开应用一段时间, 那么它占用的连接就不应该保持开放状态; 另一方面, 每次查询都获取连接并在随后关闭它的代价也是相当高的;
  • 2.2)solution: 建立数据库连接池。

    • 2.2.1)这意味着数据库连接在物理上并未被关闭, 而是保留在一个队列中并被反复重用;

3)连接池是一种非常重要的服务:

  • 3.1) JDBC规范为实现者提供了用以实现连接池服务的手段;
  • 3.2)不过, JDK本身并未实现这项服务,
  • 3.3)数据库供应商提供的JDBC驱动程序也没有提供这项服务;
  • 3.4)相反, web 容器和应用server 的开发商通常会提供连接池服务的实现; (干货—— web 容器和应用server 的开发商提供连接池服务)

4)连接池的使用对程序员来说是完全透明的:

  • 4.1)getConnection方法:  可以通过获取数据源并调用 getConnencion 方法来得到连接池中的连接;
  • 4.2)close方法:使用完连接后, 需要调用 close 方法, 该方法并不在物理上关闭连接,而只是告诉连接池已经使用完该连接了。

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

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

相关文章

托管 非托管_如何在托管的Kubernetes上备份Neo4J

托管 非托管在下面的视频中&#xff0c;我将解释如何对在托管Kubernetes环境中运行的Neo4J实例进行完整和增量备份。 我们将使用其他Pod进行远程备份&#xff0c;并将备份数据存储在托管环境提供的持久卷上。 如果您想知道如何将Neo4J部署到托管Kubernetes&#xff0c;请查看以…

java国际化——Locale+数字格式

【0】README 1&#xff09; 本文部分文字描述转自 core java volume 2 &#xff0c; 测试源代码均为原创&#xff0c; 旨在理解 java国际化——Locale数字格式 的基础知识 &#xff1b; 2&#xff09; java 编程语言是第一个设计成为全面支持国际化的语言。 2.1&#xff09;…

Linux指令类型(一)change指令

一、change指令 chattr chgrp chmod chown chfn chsh chroot 二、ch指令详细介绍 &#xff08;1&#xff09;chattr 全名&#xff1a;change attribute 作用&#xff1a;chattr命令用于改变文件属性 语法&#xff1a;chattr [-RV][-v<版本编号>]…

restful rest_HATEOAS的RESTful服务。 REST:刷新器

restful rest在这篇文章中&#xff0c;我们将介绍有关HATEOAS的RESTful服务的综合文章。 REST&#xff1a;刷新器。 1.简介 “不好了&#xff01; 请&#xff0c;不要再发表有关REST的文章&#xff01;” 你们中的许多人可能会尖叫&#xff0c;这是正确的。 已经出版了太多的…

Unicode® Character Name Index

【0】README 0.1&#xff09; there are unicodes for varients of alphabet a, for that of b, c, or d and so on, please visit http://unicode.org/charts/charindex.html [A] A WITH ACUTE, LATIN CAPITAL LETTER 00C1 A WITH ACUTE, LATIN SMALL LETTER 00E1 A WITH…

java8 hash算法

一、hash算法哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值&#xff0c;这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母&#xff0c;随后的哈希都将产生不同的值。要找到散列为同…

exchanger_如何通过示例在Java中使用Exchanger

exchanger大家好&#xff0c;如果您在并发Java应用程序中工作&#xff0c;那么您可能听说过java.util.concurrent包的Exchanger类。 Java中的Exchanger是Java 1.5中与CountDownLatch &#xff0c; CyclicBarrier和Semaphores一起引入的另一个并发或同步实用程序。 顾名思义&…

Java Enumeration接口与Iterator接口

一、Enumeration接口 Enumeration接口中定义了一些方法&#xff0c;通过这些方法可以枚举&#xff08;一次获得一个&#xff09;对象集合中的元素。 这种传统接口已被迭代器取代&#xff0c;虽然Enumeration 还未被遗弃&#xff0c;但在现在代码中已经被很少使用了。尽管如此&a…

java国际化——日期和时间+排序

【0】README 1&#xff09; 本文部分文字描述转自 core java volume 2 &#xff0c; 测试源代码均为原创&#xff0c; 旨在理解 java国际化——日期和时间排序 的基础知识 &#xff1b; 【1】日期和时间 1&#xff09;当格式化日期和时间时&#xff0c;需要考虑4个与 Locale …

jvm 垃圾收集算法_JVM垃圾收集和优化

jvm 垃圾收集算法总览 在对系统进行性能相关问题的故障排除时&#xff0c;内存优化是一个需要深入分析每个系统在内存中存储的内容&#xff0c;存储时间和访问方式的场所。 这篇文章是要对背景信息进行注释&#xff0c;并在此工作中要注意一些要点&#xff0c;这些工作要针对基…

数据库SQL索引

一、索引的意义 表中创建索引&#xff0c;以便更加快速高效地查询数据。 用户无法看到索引&#xff0c;它们只能被用来加速搜索/查询。 注释&#xff1a;更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间&#xff0c;这是由于索引本身也需要更新。因此&#x…

java国际化——消息格式化+文本文件和字符集

【0】README 1&#xff09; 本文部分文字描述转自 core java volume 2 &#xff0c; 测试源代码均为原创&#xff0c; 旨在理解 java国际化——消息格式化文本文件和字符集 的基础知识 &#xff1b; 2&#xff09; 由于本文涉及到的源代码都比较简单&#xff0c;所以直接将全…

java 8 新功能详解_Java 8和Java 14之间的新功能

java 8 新功能详解从版本9开始&#xff0c;Java每6个月就有一次新功能&#xff0c;因此很难跟踪这些新更改。 互联网上的大多数信息都描述了最近2个Java版本之间的变化。 但是&#xff0c;如果您的情况与我相似&#xff0c;则说明您使用的不是Java的最新版本&#xff0c;而是使…

Tomcat配置虚拟内存

一、Tomcat启动参数JAVA_OPTS参数说明   -server 启用jdk 的 server 版&#xff1b;   -Xms java 虚拟机初始化时的堆最小内存&#xff1b;   -Xmx java 虚拟机可使用堆的最大内存&#xff1b;   -XX: PermSize 非堆内存永久保留区域   -XX:MaxPermS…

ISO语言代码和国家代码+Locale常量+ISO货币符号

【1】ISO语言代码和国家代码 【2】Locale常量 【3】ISO货币符号

djl和ljl_使用Spring Boot和DJL进行深度学习

djl和ljl总览 这是Spring Boot上的另一篇文章 &#xff0c;该文章将展示如何使用Deep Java Library &#xff08;DJL&#xff09;构建示例Web应用程序&#xff0c; Deep Java Library &#xff08;DJL&#xff09;是Java的开源深度学习库&#xff0c;用于诊断X射线图像上的COVI…

java BigDecimal八种舍入模式

一、BigDecimal介绍java.math.BigDecimal不可变的immutable、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成。标度(scale)如果为零或正数&#xff0c;则标度是小数点后的位数。如果为负数&#xff0c;则将该数的非标度值乘以10的…

java国际化——资源包

【0】README 1&#xff09; 本文部分文字描述转自 core java volume 2 &#xff0c; 旨在理解 java国际化——资源包 的基础知识 &#xff1b; 2&#xff09; 本文源代码idea 转自&#xff1a; &#xff08;利用properties 文件进行国际化&#xff09;https://docs.oracle.co…

ui自动化测试测试报告_您需要了解的有关UI测试的所有信息

ui自动化测试测试报告让我们从一个问题开始。 用户在网站上进行互动的第一件事是什么&#xff1f; 接口&#xff0c;当然。 网站的外观是在用户身上产生“第一印象”的第一件事。 交互式Web应用程序可以为用户带来成败&#xff0c;这就是为什么越来越多的人选择对其Web应用程序…

Tomcat解决HTTP GET中文乱码

一、中文乱码原因 Tomcat默认是按ISO-8859-1进行URL解码&#xff0c;ISO-8859-1并未包括中文字符&#xff0c;中文字符不能被正确解析了。 二、配置编码 在tomcat的conf/server.xml下的connetor属性中增加URIEncoding或者useBodyEncodingForURI属性 &#xff08;1&#xff0…