首页 > 编程知识 正文

memento database,access获取本地表字段值

时间:2023-05-05 06:49:10 阅读:61889 作者:375

在日常工作中,您可能会遇到结构化的功能,例如,需要基于元数据项动态生成模板(如表和单元格)。 它们必须获取数据库表中字段的长度、类型和格式等信息。 在这里,我将以kxdls的身份与大家分享自己的实现过程。

背景

项目为spring boot微服务项目,数据库信息由yml文件组成,实现方法采用JDBC的数据库元数据方式。

介绍

我们最初学习JAVA的时候,第一次连接数据库的时候都是用JDBC方式连接的。 虽然不会写具体的代码,但现在也同样采用连接方式。 代码如下。

@ restcontrollerpublicclassdatametacontroller { @ autowiredprivatedatasourcepropertiesdatasourceproperties; @getmapping(test ) (public void getColumns ) ) throws SQLException, classnotfoundexception { connection conn=driver manager.getconnection (数据源属性. geturl ),数据源属性resultset RS=metadata.get columns (conn.get catalog (,data source properties.getusername ),'表名',' % ' ); while(RS.next ) ) system.out.println ) (column _ name : (RS.getstring ) ) ); }}建议使用时全部大写,阻止mysql和Oracle之间的直接差异

关于以上代码,我来说明写代码之前不熟悉的几点:

1 .关于驱动程序管理器为什么可以不运行Class.forName,百度学习并总结了以下https://www.cn blogs.com/w-wfy/p/6180865.html

2 .典型的internet参考示例告诉我们在调用getConnection时直接在程序中写入驱动程序连接信息,但在某些情况下我们的配置文件是加密的。 那么,如果我明确地写在程序中,就会失去价值,所以我用一个叫DataSourceProperties的类读取了我们的配置信息。

使用Connection的getMetaData获取元数据信息时,调用getColumns方法时,为什么会有人写%? 跟踪以下代码找到了以下代码:

这意味着,如果没有具体指定具有特定查询的字段,则可以使用默认的全量查询,感兴趣的人可以看到具体实现的逻辑。 (oracle.jdbc.driver包的getColumns方法,本人大致从头到尾都在查看),核心sql语句如下所示:

selecta.* from all _ tab _ columnsawhereowner='用户名' and TABLE_NAME='表名'最后详细说明getColumns方法

方法参数:

请直接用Connection实例对象中的getCatalog )方法的返回值填充参数说明catalog (数据库名称)。 方案模式) )在Oracle中,登录名必须大写。 否则,无法获取对应的数据。 使用DataSourceProperties中的getUsername (),直接键入tableNamePattern ) (表名) (要搜索的表名columnNamePattern ) (列名),键入具体名称,然后为null

名称说明TABLE_NAMEString表名COLUMN_NAMEString列名DATA_TYPEint类型代码值、与java.sql.Types对应的SQL类型TYPE_NAMEString类型例如,COLUMN_SIZEString列(如Oracle:Vacle NUMBER )的大小DECIMAL_DIGITSint小数部分的位数。 不适用的类型返回是否允许nullNULLABLEint使用nullREMARKSString构建表的注释信息。 有关Oracle comment的信息COLUMN_DEFString默认值IS_AUTOINCREMENTString是ORDINAL_POSITIONint表中列的索引(是否从1开始)注释

虽然这次只在Oracle11上进行了测试,但MySQL在以前的项目中使用过,目前没有发现任何问题。 如果有几个错误,请向执着的黑米指出

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。