Java Eclipse在启动后会在目录下生成一个.metadata文件夹,这个文件夹的作用是干什么的,里面放了什么东西

Java Eclipse在启动后会在目录下生成一个.metadata文件夹,这个文件夹的作用是干什么的,里面放了什么东西,第1张

metadate是元数据。是对数据的标识——我们通常通过一组属性或元素来描述特定的资源,而这些属性或元素就是该资源的元数据。

元数据的作用在于:以一种统一和稳定的方式描述和组织存储在不同介质上的信息。元数据有助于查找和描述信息资源,从而可以改进对资源进行检索、管理和利用。

元数据还可以帮助组织电子资源,促进其互用性,验证其标识,以及确保对它们的长期保存。

(1) Statement —— SQL语句执行接口

Statement接口代表了一个数据库的状态,在向数据库发送相应的SQL语句时,都需要创建Statement接口或者PreparedStatement接口。在具体应用中,Statement主要用于 *** 作不带参数(可以直接运行)的SQL语句,比如删除语句、添加或更新。

(2) PreparedStatement —— SQL语句预编译接口

PreparedStatement也执行相应的SQL语句。它继承于Statement接口,除了具备Statement所有功能,还可以对SQL语句进行预处理。

主要方法:

① ResultSet executeQuery() throws SQLException

在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。从不返回 null;如果发生数据库访问错误或者 SQL 语句没有返回ResultSet 对象则抛出SQLException异常。

② int executeUpdate() throws SQLException

在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL INSERT、UPDATE 或 DELETE 语句;或者是一个什么都不返回的 SQL 语句,比如 DDL 语句。

返回值int表示影响的记录条数,一条都没有则返回0;

③ boolean execute()throws SQLException

在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。

有结果集则返回true, 没有结果集则返回false;

④各种set方法

将指定位置的参数设置为指定的类型。比如pssetString(3, “tarena”);

(3) ResultSet —— 结果集 *** 作接口

ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC *** 作的必需接口。

(4) ResultSetMetaData —— 元数据 *** 作接口

ResultSetMetaData是对元数据进行 *** 作的接口,可以实现很多高级功能。Hibernate运行数据库的 *** 作,大部分都是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。ResultSetMetaData接口可以通过数组的形式,遍历数据库的各个字段的属性,对于我们开发者来说,此机制的意义重大。

JDBC通过元数据(MetaData)来获得具体的表的相关信息,例如,可以查询数据库中有哪些表,表有哪些字段,以及字段的属性等。MetaData中通过一系列getXXX将这些信息返回给我们。

数据库元数据 Database MetaData 使用connectiongetMetaData()获得

MetaData包括: 包含了关于数据库整体元数据信息。

结果集元数据 Result Set MetaData 使用resultSetgetMetaData()获得

比较重要的是获得表的列名、列数等信息。

元数据对象:ResultSetMetaData meta = rsgetMetaData();

 字段个数:metagetColomnCount();

 字段名字:metagetColumnName();

 字段JDBC类型:metagetColumnType();

 字段数据库类型:metagetColumnTypeName();

前一段时间我们曾经给大家简单介绍了关于java10的特性以及发布日期等事情。今天,我们一起来正式了解一下java10编程开发语言的新特性都有哪些,以及针对这些特性的使用方法。

Java10新特性

这次发布的Java10,新带来的特性并不多。

根据官网公开资料,共有12个JEP(JDKEnhancementProposal特性加强提议),带来以下加强功能:

JEP286,var局部变量类型推断。

JEP296,将原来用Mercurial管理的众多JDK仓库代码,合并到一个仓库中,简化开发和管理过程。

JEP304,统一的垃圾回收接口。

JEP307,G1垃圾回收器的并行完整垃圾回收,实现并行性来改善坏情况下的延迟。

JEP310,应用程序类数据(AppCDS)共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。

JEP312,ThreadLocal握手交互。在不进入到全局JVM安全点(Safepoint)的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。

JEP313,移除JDK中附带的javah工具。可以使用javac-h代替。

JEP314,使用附加的Unicode语言标记扩展。

JEP317,能将堆内存占用分配给用户指定的备用内存设备。

JEP317,使用Graal基于Java的编译器,可以预先把Java代码编译成本地代码来提升效能。

JEP318,在OpenJDK中提供一组默认的根证书颁发机构证书。开源目前Oracle提供的的JavaSE的根证书,这样OpenJDK对开发人员使用起来更方便。

JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为\$FEATURE\$INTERIM\$UPDATE\$PATCH,分别是大版本,中间版本,升级包和补丁版本。

部分特性说明

1var类型推断。

这个语言功能在其他一些语言(C#、JavaScript)和基于JRE的一些语言(Scala和Kotlin)中,早已被加入。

在Java语言很早就在考虑,北大青鸟北京计算机学院发现早在2016年正式提交了JEP286提议。后来举行了一次公开的开发工程师调查,获得多建议的是采用类似Scala的方案,“同时使用val和var”,约占一半;二多的是“只使用var”,约占四分之一。后来Oracle公司经过慎重考虑,采用了只使用var关键字的方案。

用gdb查看core文件:

下面我们可以在发生运行时信号引起的错误时发生core dump了

发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行

gdb [exec file] [core file]

如:

gdb /test testcore

在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行

一、 通过SqlRowSetMetaData类

使用到的类或接口有如下几个:

orgspringframeworkjdbcsupportrowsetSqlRowSet接口:该对象和javaxsqlRowSet类相对应,它和RowSet的区别是SqlRowSet中的方法从来不会抛出SQLException异常,通过jdbcTemplate可以获得该对象的实例;

orgspringframeworkjdbcsupportrowsetSqlRowSetMetaData接口:是对应于SqlRowSet的元数据接口,和javasqlResultSetMetaData相一致,也只是从来不会抛出SQLException异常,通过SqlRowSet可以获得该类的实例;

具体使用实例如下:

SqlRowSet rowSet = jdbcTemplatequeryForRowSet("select  from user limit 0");  

SqlRowSetMetaData metaData = rowSetgetMetaData();  

int columnCount = metaDatagetColumnCount();  

for (int i = 1; i <= columnCount; i++) {    

    Map<String,String> fieldMap = new HashMap<String,String>();  

    fieldMapput("ColumnName", metaDatagetColumnName(i));  

    fieldMapput("ColumnType", StringvalueOf(metaDatagetColumnType(i)));  

    fieldMapput("ColumnTypeName", metaDatagetColumnTypeName(i));  

    fieldMapput("CatalogName", metaDatagetCatalogName(i));  

    fieldMapput("ColumnClassName", metaDatagetColumnClassName(i));  

    fieldMapput("ColumnLabel", metaDatagetColumnLabel(i));  

    fieldMapput("Precision", StringvalueOf(metaDatagetPrecision(i)));  

    fieldMapput("Scale", StringvalueOf(metaDatagetScale(i)));  

    fieldMapput("SchemaName", metaDatagetSchemaName(i));  

    fieldMapput("TableName", metaDatagetTableName(i));  

    fieldMapput("SchemaName", metaDatagetSchemaName(i));  

    Systemoutprintln(fieldMap);  

}

上述所用的信息都应列出来了,发现只有一些简单的信息,并没有涉及索引和其他约束等的信息。

二、通过RowCountCallbackHandler类

使用到的类或接口有如下几个:

orgspringframeworkjdbccoreRowCallbackHandler接口:用于处理结果集中的每一行数据;

orgspringframeworkjdbccoreRowCountCallbackHandler类:实现了RowCallbackHandler接口,其中简单的实现了对结果集元数据的获取,包括行数、列数、列名、列的类型等信息,顺便说一下这个类的实例只可以用一次;

在源代码中给出了简单的使用方式,如下:

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);  // reusable object  

  

RowCountCallbackHandler countCallback = new RowCountCallbackHandler();  // not reusable  

jdbcTemplatequery("select  from user", countCallback);  

int rowCount = countCallbackgetRowCount();

所有能获得的信息如下:

String sql = "select  from user";  

RowCountCallbackHandler rcch = new RowCountCallbackHandler();  

jdbcTemplatequery(sql, rcch);  

          

Systemoutprintln("column count :" + rcchgetColumnCount());  

Systemoutprintln("column count :" + rcchgetRowCount());  

          

for(int i=0; i<rcchgetColumnCount(); i++){  

    Systemoutprintln("column name :" + rcchgetColumnNames()[i]);  

    Systemoutprintln("column type :" + rcchgetColumnTypes()[i]);  

}

输出如下:

从输出可以看出有一个问题,列的类型只能用数字来标识,这与javasqlTypes相对应,我们可以通过一下的程序来获得字符串的形式:

String getTypeName(int type) throws SQLException {  

        switch (type) {  

            case TypesARRAY:  

                break;  

            case TypesBIGINT:  

                return "BIGINT";  

            case TypesBINARY:  

                return "BINARY";  

            case TypesBIT:  

                return "BIT";  

            case TypesBLOB:  

                return "BLOB";  

            case TypesBOOLEAN:  

                return "BOOLEAN";  

            //  

        }

由以上可知,该类的方法有限,也只能获得列名和列的类型的信息,关于索引和约束等也没有涉及

顾名思义,metaspace存储的就是"元数据"。谁的元数据?是Java类的元数据,ie Java类在VM中的表现形式。

其实和“metaspace是method area的实现”这个说法是一致的;method area是规范:存储编译后的class文件的类信息;真正实现的是metaspace, 那些信息就是元数据。所以两种说法是一致的。

Class文件常量池、运行时常量池,都存在method area中;字符串常量池存在本地内存中(注意并不是metaspace中)

对OOM:

以上就是关于Java Eclipse在启动后会在目录下生成一个.metadata文件夹,这个文件夹的作用是干什么的,里面放了什么东西全部的内容,包括:Java Eclipse在启动后会在目录下生成一个.metadata文件夹,这个文件夹的作用是干什么的,里面放了什么东西、在java.sql包含哪些接口、北大青鸟北京计算机学院分享java10编程语言都有哪些新特点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9778769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存