简单的打铁代码如下:

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获取字段的注释的更多相关文章

  1. jdbc连接rac的oracle数据库

    jdbc连接rac的oracle数据库需要配置所有racIP,如下: DB1 =(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(H ...

  2. php oracle数据库clob和nclob字段

    php oracle数据库clob和nclob字段 nclob类型 1.nclob不能使用php的stream_get_contents来获取数据库的资源内容, 2.并且nclob只能使用to_cha ...

  3. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  4. JDBC读取新插入Oracle数据库Sequence值的5种方法

    Oracle的sequence实现非常灵活,所以也带来一些易用性问题,如何取到新插入记录生成的sequence值与其它数据库有较大差别,本文详国介绍了5种实现读取新插入记录sequence值的方法. ...

  5. 怎样利用JDBC连接并操作Oracle数据库

    之前学习.NET的时候.以前利用ODBC进行连接数据库,而在Java中通常採用JDBC连接数据库,这里以oracle数据库为例简单的总结一下利用JDBC怎样连接并操作数据库. 1.连接 public ...

  6. Oracle数据库在给表添加字段的sql中用comment报错

    原因:不同于mysql,Oracle数据库在添加表字段时不能直接用comment,而是单独写一个sql语句,如下: alter table SYS_USER add SENDMSG_LASTTIME ...

  7. Oracle数据库创建表ID字段的自动递增

    转载地址:http://blog.itpub.net/22880668/viewspace-1117343/ 将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建 ...

  8. Oracle数据库 如何根据某个字段名的值去查询存在的表列表

    declare v_sql varchar2(1000); data_count number; begin -- OWNER是模式名 tablespace_name是表空间 for cur_tabl ...

  9. Oracle数据库中字符型字段按数字排序

    今天在转换数据时,遇到了一个主键排序的问题.字符型的主键,保存的都是数字,数据导过来以后发现数据排序都是乱的,就想着按数字规则排序. 但发现to_number总是报错,就想着里面应该是有字符存在.后来 ...

随机推荐

  1. 部署python项目到linux服务器

    最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是M ...

  2. c# 比较字符串

  3. 使用Cloudera Manager搭建YARN集群及YARN HA

    使用Cloudera Manager搭建YARN集群及YARN HA 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用Cloudera Manager搭建YARN集群 1& ...

  4. ubbuntu---多媒体播放器VLC

    VLC多媒体播放器:Video LAN Client 信息载体:可见光通信技术(Visible Light Communication,VLC).@ https://baike.baidu.com/i ...

  5. 关于元素间的边距重叠问题与BFC

    一.边距重叠常见情况 1.垂直方向上相邻元素的重叠 (水平方向上不会发生重叠) 2. 垂直方向上父子元素间的重叠 二.BFC 1.什么是 BFC BFC(Block Formatting Contex ...

  6. 使用Restful风格中的post使用过遇到前端数据传送不到后端

    问题描述:使用postman进行请求时候,前端的数据,一直在后端接收不到,找了好多资料,竟然是因为一个注解的原因. 后端接收设置:@RequestParam@ReqeustBody设置的原因 因为sp ...

  7. JQuery实现品牌展示

    最近验收了ITOO,老师当时验收的时候对于界面的设计非常敏感,只要看了一个大体轮廓,就能给出我们建议,这是二十年积累的经验,我们要做的就是站在巨人的肩膀上,让我们成长更快! 老师说了一下关于界面设计的 ...

  8. python_面向对象——动态创建类和isinstance和issubclass方法

    # 给动态生产的类定义一个方法 def __init__(self,name): self.name = name print(self.name) def take(self,obj): print ...

  9. K Edit Distance

    Description Given a set of strings which just has lower case letters and a target string, output all ...

  10. bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制

    比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: ...