java使用jdbc连接oracle,实现自定义sql查询,加载字段注释

第一步、加载驱动

引用包

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

声明属性

代码示例

static final String DRIVER = "oracle.jdbc.OracleDriver";static final String URL = "jdbc:oracle:thin:@localhost/orcl";static final String USER = "sott";static final String PWD = "tiger";static Map<String, String> columnCommentMap = new HashMap<String, String>();// key:字段名,value:字段注释

加载字段注释,保存到HashMap

 /*** 加载数据库字段注释* * @auther zhuteng* @time 2019年7月26日*/public static void getColumnCommentInfo() throws Exception{StringBuffer sql = new StringBuffer();// sqlsql.append("select a.COLUMN_NAME ,b.comments ");sql.append("from cols a ");sql.append("left join user_col_comments b ");sql.append("on (a.TABLE_NAME = b.table_name and a.COLUMN_NAME=b.column_name) ");sql.append("left join user_tab_comments c ");sql.append("on (a.TABLE_NAME=c.table_name) ");sql.append("where not exists ");sql.append("(");sql.append("select d.OBJECT_NAME ");sql.append("from user_objects d ");sql.append("where d.OBJECT_TYPE = 'table' ");sql.append("and d.TEMPORARY = 'y' ");sql.append("and d.OBJECT_NAME = a.TABLE_NAME ");sql.append(")");sql.append("and b.comments is not null ");sql.append("order by a.TABLE_NAME,a.COLUMN_ID");Class.forName(DRIVER); // 加载驱动程序Connection connection = DriverManager.getConnection(URL, USER, PWD);// 连接数据库PreparedStatement pst = connection.prepareStatement(sql.toString());// 创建sql查询对象ResultSet result = pst.executeQuery(); // 执行查询while (result.next()){columnCommentMap.put(result.getString(1), result.getString(2));}// 关闭connection.close();pst.close();}

封装sql查询方法

/*** 根据sql查询数据* * @auther zhuteng* @time 2019年7月25日*/public static JSONObject excuteQuery(String sql) throws Exception{getColumnCommentInfo();//查询字段注释信息,保存到HashMapClass.forName(DRIVER); // 加载驱动程序Connection connection = DriverManager.getConnection(URL, USER, PWD);// 连接数据库PreparedStatement pst = connection.prepareStatement(sql);// 创建sql查询对象ResultSet result = pst.executeQuery(); // 执行查询ResultSetMetaData rsmd = result.getMetaData();JSONArray tableTitle = new JSONArray();// 表格头for (int i = 1; i <= rsmd.getColumnCount(); i++){JSONObject tableTitle_Th = new JSONObject();// 表格头单元格tableTitle_Th.put("columncomment", columnCommentMap.get(rsmd.getColumnName(i)));// 字段名注释tableTitle_Th.put("columnname", rsmd.getColumnName(i));// 字段名tableTitle_Th.put("tablename", rsmd.getTableName(i));// 表名tableTitle_Th.put("columnclassname", rsmd.getColumnClassName(i));// JAVA_数据类型tableTitle_Th.put("columntypename", rsmd.getColumnTypeName(i) + "(" + rsmd.getColumnDisplaySize(i) + ")");// DB_数据类型tableTitle.add(tableTitle_Th);// 保存到数组}JSONObject table = new JSONObject();// 所有查詢的數據JSONArray tableBody = new JSONArray();// 表格内容while (result.next()){JSONArray tableRow = new JSONArray();// 表内容单元格for (int i = 1; i <= rsmd.getColumnCount(); i++){String classname = rsmd.getColumnClassName(i);// 数据类型switch (classname){case "java.math.BigDecimal":{tableRow.add(result.getBigDecimal(i));break;}case "java.lang.Boolean":{tableRow.add(result.getBoolean(i));break;}case "java.lang.Byte":{tableRow.add(result.getByte(i));break;}case "java.util.Date":{Date date = result.getDate(i);String time = "";if (date != null){time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}tableRow.add(time);break;}case "java.sql.Date":{java.sql.Date date = result.getDate(i);String time = "";if (date != null){time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}tableRow.add(time);break;}case "java.sql.Timestamp":{Timestamp date = result.getTimestamp(i);String time = "";if (date != null){time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}tableRow.add(time);break;}case "java.lang.Double":{tableRow.add(result.getDouble(i));break;}case "java.lang.Float":{tableRow.add(result.getFloat(i));break;}case "java.lang.Integer":{tableRow.add(result.getInt(i));break;}case "java.lang.Long":{tableRow.add(result.getLong(i));break;}case "java.lang.String":{tableRow.add(result.getString(i));break;}default:{System.out.println("未识别的数据类型:" + classname);}}}tableBody.add(tableRow);}// 关闭connection.close();pst.close();table.put("tableTitle", tableTitle);table.put("tableBody", tableBody);return table;}

测试

public static void main(String[] args) throws Exception{JSONObject table = excuteQuery("select * from t_h_user");JSONArray tableTitle = table.getJSONArray("tableTitle");JSONArray tableBody = table.getJSONArray("tableBody");System.out.print("sortnum\t");for (int j = 0; j < tableTitle.size(); j++){JSONObject tableTitle_Th = (JSONObject) tableTitle.get(j);System.out.print(tableTitle_Th.get("columnname") + "(" + tableTitle_Th.get("columncomment") + ")" + "\t");}System.out.println("\n------------------------------------------------------------------------------------------------------------------------");for (int i = 0; i < tableBody.size(); i++){JSONArray row = (JSONArray) tableBody.get(i);System.out.print((i + 1) + "\t");for (int j = 0; j < row.size(); j++){System.out.print(row.get(j) + "\t");}System.out.println();}}

完整代码


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;public class MainTest
{static final String DRIVER = "oracle.jdbc.OracleDriver";static final String URL = "jdbc:oracle:thin:@localhost/orcl";static final String USER = "wcy";static final String PWD = "11";static Map<String, String> columnCommentMap = new HashMap<String, String>();// 字段名,字段注释/*** 加载数据库字段注释* * @auther zhuteng* @time 2019年7月26日*/public static void getColumnCommentInfo() throws Exception{StringBuffer sql = new StringBuffer();// sqlsql.append("select a.COLUMN_NAME ,b.comments ");sql.append("from cols a ");sql.append("left join user_col_comments b ");sql.append("on (a.TABLE_NAME = b.table_name and a.COLUMN_NAME=b.column_name) ");sql.append("left join user_tab_comments c ");sql.append("on (a.TABLE_NAME=c.table_name) ");sql.append("where not exists ");sql.append("(");sql.append("select d.OBJECT_NAME ");sql.append("from user_objects d ");sql.append("where d.OBJECT_TYPE = 'table' ");sql.append("and d.TEMPORARY = 'y' ");sql.append("and d.OBJECT_NAME = a.TABLE_NAME ");sql.append(")");sql.append("and b.comments is not null ");sql.append("order by a.TABLE_NAME,a.COLUMN_ID");Class.forName(DRIVER); // 加载驱动程序Connection connection = DriverManager.getConnection(URL, USER, PWD);// 连接数据库PreparedStatement pst = connection.prepareStatement(sql.toString());// 创建sql查询对象ResultSet result = pst.executeQuery(); // 执行查询while (result.next()){columnCommentMap.put(result.getString(1), result.getString(2));}// 关闭connection.close();pst.close();}/*** 根据sql查询数据* * @auther zhuteng* @time 2019年7月25日*/public static JSONObject excuteQuery(String sql) throws Exception{getColumnCommentInfo();// 查询字段注释信息,保存到HashMapClass.forName(DRIVER); // 加载驱动程序Connection connection = DriverManager.getConnection(URL, USER, PWD);// 连接数据库PreparedStatement pst = connection.prepareStatement(sql);// 创建sql查询对象ResultSet result = pst.executeQuery(); // 执行查询ResultSetMetaData rsmd = result.getMetaData();JSONArray tableTitle = new JSONArray();// 表格头for (int i = 1; i <= rsmd.getColumnCount(); i++){JSONObject tableTitle_Th = new JSONObject();// 表格头单元格tableTitle_Th.put("columncomment", columnCommentMap.get(rsmd.getColumnName(i)));// 字段名注释tableTitle_Th.put("columnname", rsmd.getColumnName(i));// 字段名tableTitle_Th.put("tablename", rsmd.getTableName(i));// 表名tableTitle_Th.put("columnclassname", rsmd.getColumnClassName(i));// JAVA_数据类型tableTitle_Th.put("columntypename", rsmd.getColumnTypeName(i) + "(" + rsmd.getColumnDisplaySize(i) + ")");// DB_数据类型tableTitle.add(tableTitle_Th);// 保存到数组}JSONObject table = new JSONObject();// 所有查詢的數據JSONArray tableBody = new JSONArray();// 表格内容while (result.next()){JSONArray tableRow = new JSONArray();// 表内容单元格for (int i = 1; i <= rsmd.getColumnCount(); i++){String classname = rsmd.getColumnClassName(i);// 数据类型switch (classname){case "java.math.BigDecimal":{tableRow.add(result.getBigDecimal(i));break;}case "java.lang.Boolean":{tableRow.add(result.getBoolean(i));break;}case "java.lang.Byte":{tableRow.add(result.getByte(i));break;}case "java.util.Date":{Date date = result.getDate(i);String time = "";if (date != null){time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}tableRow.add(time);break;}case "java.lang.Double":{tableRow.add(result.getDouble(i));break;}case "java.lang.Float":{tableRow.add(result.getFloat(i));break;}case "java.lang.Integer":{tableRow.add(result.getInt(i));break;}case "java.lang.Long":{tableRow.add(result.getLong(i));break;}case "java.lang.String":{tableRow.add(result.getString(i));break;}}}tableBody.add(tableRow);}// 关闭connection.close();pst.close();table.put("tableTitle", tableTitle);table.put("tableBody", tableBody);return table;}public static void main(String[] args) throws Exception{JSONObject table = excuteQuery("select * from t_h_user");JSONArray tableTitle = table.getJSONArray("tableTitle");JSONArray tableBody = table.getJSONArray("tableBody");System.out.print("sortnum\t");for (int j = 0; j < tableTitle.size(); j++){JSONObject tableTitle_Th = (JSONObject) tableTitle.get(j);System.out.print(tableTitle_Th.get("columnname") + "(" + tableTitle_Th.get("columncomment") + ")" + "\t");}System.out.println("\n------------------------------------------------------------------------------------------------------------------------");for (int i = 0; i < tableBody.size(); i++){JSONArray row = (JSONArray) tableBody.get(i);System.out.print((i + 1) + "\t");for (int j = 0; j < row.size(); j++){System.out.print(row.get(j) + "\t");}System.out.println();}}
}

与web前端一起使用效果更好。

java使用jdbc连接oracle,实现自定义sql查询,加载字段注释相关推荐

  1. idea如何给oracle添加数据_intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作...

    intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作 发布时间:2018-07-04 10:09, 浏览次数:2532 , 标签: intelij idea jav ...

  2. Java编程 JDBC连接Oracle数据库

    Part1 JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...

  3. 我的第五个程序 java的JDBC连接mysql数据库 实现输入查询

    import java.sql.*; import java.util.Scanner;public class JDBCTest {public static void main(String[] ...

  4. Java用JDBC连接MySQL并进行简单查询

    写在前面 *********************************************************************************************** ...

  5. 通过JDBC连接Oracle数据库时进行查询操作时产生BigDecimal转换异常的处理

    使用MySQL的时候不太会出现这样的情况,因为MySQL的数据类型比较明确,都有对应的类型可以进行操作,而Oracle的基本数据类型都是number类型的,从Oracle查到的数据到Java中很容易产 ...

  6. Java JDBC连接oracle、SQL server、My Sql数据库的驱动

    JAVA创建以JDBC连接数据库的程序 ①加载JDBC驱动程序: 1.oracle---------JDBC try{//加载oracle的驱动类Class.forName("oracle. ...

  7. 【Java】JDBC连接MySQL/SQLServer/Oracle三种数据库

    JDBC连接MySQL数据库 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcepti ...

  8. Java案例:利用JDBC连接Oracle数据库

    Java案例:利用JDBC连接Oracle数据库 一.准备工作 1.启动SQL Developer,设置java.exe路径 2.在Oracle SQL Developer里,新建数据库连接 连接名: ...

  9. java jdbc连接oracle数据库连接 不抛出异常,JDBC连接Oracle发生异常的原因

    当你通过JDBC连接Oracle数据库时发生了异常首先应该确认你的JRE是否配置正确,一般oracle10g,JRE1.4以上应当使用ojdbc14.jar. 其次你要确定你的Java语法是否错误,这 ...

最新文章

  1. [剑指offer] 二叉搜索树的后序遍历序列
  2. linux 下获取程序的绝对路径
  3. 网络编程学习笔记(TCP套接口选项)
  4. 对学习JAVA的总结 第一次课
  5. 【数学建模】数模day13-灰色系统理论I-灰色关联与GM(1,1)预测
  6. WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
  7. Oracle中分区表中表空间属性
  8. Babylon-AST初探-代码更新删除(Update Remove)
  9. HTML+CSS+JS实现 ❤️电商商品图片幻灯片特效❤️
  10. Linux命令之crontab命令
  11. ES6之let原理+回调函数等待队列——五个完全相同的按钮,点第i个按钮弹出i
  12. win10自动切换日夜模式
  13. es创建索引库报错 :Types cannot be provided in put mapping requests, unless the include_type_na
  14. 计算机ppt试题训练,教案计算机试题.ppt
  15. 软件工程设计图(总体设计、概要设计、详细设计)
  16. python提取文件中含某一字符串的行,并写入新的文件中
  17. 基于MVC的简易图形编辑器
  18. Pygame制作音乐播放器
  19. 双目活体检测:人证核验一体机
  20. 食品加工设备远程管理维护解决方案

热门文章

  1. LINUX系统不识别NTFS格式的硬盘
  2. 套息交易是如何获利的
  3. Java集合框架(JCF)归纳总结
  4. 站长网图王采访51la 杨队QQ群对话记录
  5. 谁说批改网不可以复制粘贴?来自李扬的博客
  6. 右上角倒角css,如何实现倒角CSS边角而不是圆角?
  7. java死锁代码演示
  8. matlab调用VC++生成的DLL
  9. Kali Linux 查看桌面环境
  10. 如何告别「伪勤奋」?高冷冷