【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总是报错,就想着里面应该是有字符存在.后来 ...
随机推荐
- Ubuntu 用户权限相关命令
目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01. 用户 和 权限 的基本概念 1.1 基本概念 用户 是 Linux 系统工作中重要的一环,用户管理包 ...
- 编写订单支付api中遇到的问题
首先我是按照已经有的已经有的支付api去编写订单支付api,但是由于两者是有区别的,所以类似去搬用难免会出问题,首先我是套用已经写好的model,然后写相应的serializer,实现序列化之后就开始 ...
- ISCC之msc1(签到题)
V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K Flag: ISCC{N0_0ne_can_st0p_y0u} 签到题 八进制 ...
- 2019牛客多校第一场 A.Equivalent Prefixes
题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r ...
- 《发际线总是和我作队》第九次团队作业:Beta冲刺Scrum Meeting2
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目冲刺 团队名称 发际线总和我作队 作业学习目标 (1)掌握软件黑盒测试技术:(2)掌握软件 ...
- 五.Protobuf3 枚举
Protobuf3 枚举 定义消息类型时,您可能希望它的一个字段有一个预定义的值列表.例如,假设您希望为每个SearchRequest添加一个corpus字段,其中语料库可以是UNIVERSAL.WE ...
- 一般spring配置上下文
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- nginx 超时配置、根据域名、端口、链接 配置不同跳转
Location正则表达式location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...
- Xshell5 安装JDK
.执行命令yum -y list java*查看可安装java版本.执行成功后可以看见如下的结果 安装java-1.8全部相关 yum install -y java-1.8.0-openjdk* 使 ...
- Linux 用户和用户组管理之 修改用户名和用户组;修改用户密码
一.用户账号包括(查看已经存在的账号 | 添加用户账号 | 修改用户账号 | 删除用户账号) 查看存在的账号: more /etc/passwd #或者是 awk -F':' '{ print $1 ...