【JDBC】使用properties连Oracle数据库,使用DatabaseMetaData获取字段的注释
简单的打铁代码如下:
package com.hy.propertyConn; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.log4j.Logger; import com.hy.DBParam; class DbParam{ public final static String Driver = "oracle.jdbc.driver.OracleDriver"; public final static String DbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; public final static String User = "ufo"; public final static String Pswd = "1234"; } class KeyValue implements Comparable<KeyValue>{ String key; Object value; @Override public int compareTo(KeyValue another) { return this.key.compareTo(another.key); } } public class Fetcher { private static Logger log = Logger.getLogger(Fetcher.class); public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ Class.forName(DBParam.Driver).newInstance(); Properties pro = new Properties(); //pro.setProperty("initialSize", "10"); //pro.setProperty("maxActive", "12"); pro.setProperty("user", DBParam.User);// 这里不是username或是usr! pro.setProperty("password", DBParam.Pswd);// 这里不是pswd pro.put("remarksReporting","true");// 这一句才能让rs.getString("REMARKS")起作用 conn = DriverManager.getConnection(DBParam.DbUrl, pro); stmt = conn.createStatement(); String sql="select * from testtb17 where id=114 "; ResultSet rs = stmt.executeQuery(sql); ResultSetMetaData rsMetadata = rs.getMetaData(); int count = rsMetadata.getColumnCount(); Map<String,String> nameCmtMap=getColumnCommentMap(conn,"testtb17".toUpperCase()); while (rs.next()) { List<KeyValue> kvList=new ArrayList<KeyValue>(); for (int i=0; i<count; i++) { int idx=i+1; KeyValue kv=new KeyValue(); kv.key = rsMetadata.getColumnLabel(idx);// 列名 kv.value=rs.getString(kv.key); kvList.add(kv); } Collections.sort(kvList); System.out.println(); StringBuilder sb=new StringBuilder(); int idx=0; for(KeyValue kv:kvList) { idx++; sb.append(fixSizeStr("#"+idx,4)+fixSizeStr(kv.key,15)+fixSizeStr(kv.value.toString(),20)+fixSizeStr(nameCmtMap.get(kv.key),15)+"\n"); } System.out.println(sb.toString()); } } catch (Exception e) { System.out.print(e.getMessage()); e.printStackTrace(); } finally { try { stmt.close(); conn.close(); } catch (SQLException e) { log.error("Can't close stmt/conn because of " + e.getMessage()); } } } /** * 取某表的字段及注释信息 * @param conn * @param table * @return * @throws SQLException */ private static Map<String,String> getColumnCommentMap(Connection conn,String table) throws SQLException { Map<String,String> map=new LinkedHashMap<String,String>(); DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs = dbmd.getColumns(null,"%",table.toUpperCase(),"%");// 注意要让表名大写 while(rs.next()) { //System.out.println(rs.getString("COLUMN_NAME")+":"+ rs.getString("REMARKS")); map.put(rs.getString("COLUMN_NAME"), rs.getString("REMARKS")); } return map; } /** * get a fix-length string,if less add space (对中文有误) * @param str * @param size * @return */ private static String fixSizeStr(String str, int size) { return String.format("%-"+size+"s", str); } }
输出:
#1 AGE 0 年龄 #2 CREATEDTIME 2019-06-16 10:21:46 创建时间 #3 ID 114 唯一标识 #4 NAME 0 名字
这段代码有时能起到一点作用。
--END-- 2019年12月5日20:58:05
参考网文:https://www.cnblogs.com/discuss/articles/1866940.html
【JDBC】使用properties连Oracle数据库,使用DatabaseMetaData获取字段的注释的更多相关文章
- jdbc连接rac的oracle数据库
jdbc连接rac的oracle数据库需要配置所有racIP,如下: DB1 =(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(H ...
- php oracle数据库clob和nclob字段
php oracle数据库clob和nclob字段 nclob类型 1.nclob不能使用php的stream_get_contents来获取数据库的资源内容, 2.并且nclob只能使用to_cha ...
- 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】
疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...
- JDBC读取新插入Oracle数据库Sequence值的5种方法
Oracle的sequence实现非常灵活,所以也带来一些易用性问题,如何取到新插入记录生成的sequence值与其它数据库有较大差别,本文详国介绍了5种实现读取新插入记录sequence值的方法. ...
- 怎样利用JDBC连接并操作Oracle数据库
之前学习.NET的时候.以前利用ODBC进行连接数据库,而在Java中通常採用JDBC连接数据库,这里以oracle数据库为例简单的总结一下利用JDBC怎样连接并操作数据库. 1.连接 public ...
- Oracle数据库在给表添加字段的sql中用comment报错
原因:不同于mysql,Oracle数据库在添加表字段时不能直接用comment,而是单独写一个sql语句,如下: alter table SYS_USER add SENDMSG_LASTTIME ...
- Oracle数据库创建表ID字段的自动递增
转载地址:http://blog.itpub.net/22880668/viewspace-1117343/ 将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建 ...
- Oracle数据库 如何根据某个字段名的值去查询存在的表列表
declare v_sql varchar2(1000); data_count number; begin -- OWNER是模式名 tablespace_name是表空间 for cur_tabl ...
- Oracle数据库中字符型字段按数字排序
今天在转换数据时,遇到了一个主键排序的问题.字符型的主键,保存的都是数字,数据导过来以后发现数据排序都是乱的,就想着按数字规则排序. 但发现to_number总是报错,就想着里面应该是有字符存在.后来 ...
随机推荐
- 浦发银行网上银行U盾证书无法更新的解决办法
浦发银行需要更新证书.很多浦发客户都会碰到题主一样更新证书失败的困扰.网银登录似乎一切正常,可是等待进入个人网银时却跳出提示,如下图: 没有选择,只能点击确定,然后就是: 再“确定”下去: 再确定就出 ...
- Python_列表操作2
1.使用sort()方法对列表进行永久性排序: colorsList=['hong','cheng','huang','lv'] colorsList.sort() #正序排序 print(color ...
- k8s 应用优先级,驱逐,波动,动态资源调整
k8s 应用优先级,驱逐,波动,动态资源调整 应用优先级 Requests 和 Limits 的配置除了表明资源情况和限制资源使用之外,还有一个隐藏的作用:它决定了 Pod 的 QoS 等级. 上一节 ...
- python获取第前多少天的日期
1. 显示昨天(前一天)的日期 from datetime import date, timedelta yesterday_date = (date.today() + timedelta(days ...
- c的链表实现
c的链表实现 复习了 单向链表.双向链表 ,代码中注释不多,但基本从函数名字就可以知道函数的作用. 双向链表中的前后节点中的思路是按照linux内核中思路写的. 环境 GCC 7.4.0 单向链表 # ...
- 苹果cms和海洋cms通用的百度主动推送工具
百度主动推送的代码,不需要每天手动去添加地址推送,只要浏览器打开推送请求,不要关掉浏览器,程序自动帮你推送.(该插件只推送内容页,支持动态.伪静态.静态页面的推送,但这三种地址规则需要去代码里面自行拼 ...
- DT7.0/6.0最简单实现主动推送方法
最近研究destoon内核开发,开发了一个大型的信息站点:http://www.xuetong365.com/ 但是新站如何提高收录和排名呢?网上有很多主动提交的方法,今天我分享一个自己原创的超级简 ...
- Kafka kSQL sql查询
背景 kafka早期作为一个日志消息系统,很受运维欢迎的,配合ELK玩起来很happy,在kafka慢慢的转向流式平台的过程中,开发也慢慢介入了,一些业务系统也开始和kafka对接起来了,也还是很受大 ...
- Greenplum 添加mirror步骤
原文链接:https://yq.aliyun.com/articles/695864 [TOC] 概述 新安装的greenplum集群只有primary节点,没有mirror.高可用性没得到保证.所以 ...
- Kubernetes 学习8 Pod控制器
一.回顾 1.Pod是标准的kubernetes资源,因此其遵循为其资源清单配置定义的基本格式,包含:apiVersion,kind,metadata,spec,status(只读) 2.spec的内 ...