java使用jdbc连接oracle,实现自定义sql查询,加载字段注释
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查询,加载字段注释相关推荐
- idea如何给oracle添加数据_intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作...
intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作 发布时间:2018-07-04 10:09, 浏览次数:2532 , 标签: intelij idea jav ...
- Java编程 JDBC连接Oracle数据库
Part1 JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- 我的第五个程序 java的JDBC连接mysql数据库 实现输入查询
import java.sql.*; import java.util.Scanner;public class JDBCTest {public static void main(String[] ...
- Java用JDBC连接MySQL并进行简单查询
写在前面 *********************************************************************************************** ...
- 通过JDBC连接Oracle数据库时进行查询操作时产生BigDecimal转换异常的处理
使用MySQL的时候不太会出现这样的情况,因为MySQL的数据类型比较明确,都有对应的类型可以进行操作,而Oracle的基本数据类型都是number类型的,从Oracle查到的数据到Java中很容易产 ...
- Java JDBC连接oracle、SQL server、My Sql数据库的驱动
JAVA创建以JDBC连接数据库的程序 ①加载JDBC驱动程序: 1.oracle---------JDBC try{//加载oracle的驱动类Class.forName("oracle. ...
- 【Java】JDBC连接MySQL/SQLServer/Oracle三种数据库
JDBC连接MySQL数据库 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcepti ...
- Java案例:利用JDBC连接Oracle数据库
Java案例:利用JDBC连接Oracle数据库 一.准备工作 1.启动SQL Developer,设置java.exe路径 2.在Oracle SQL Developer里,新建数据库连接 连接名: ...
- java jdbc连接oracle数据库连接 不抛出异常,JDBC连接Oracle发生异常的原因
当你通过JDBC连接Oracle数据库时发生了异常首先应该确认你的JRE是否配置正确,一般oracle10g,JRE1.4以上应当使用ojdbc14.jar. 其次你要确定你的Java语法是否错误,这 ...
最新文章
- [剑指offer] 二叉搜索树的后序遍历序列
- linux 下获取程序的绝对路径
- 网络编程学习笔记(TCP套接口选项)
- 对学习JAVA的总结 第一次课
- 【数学建模】数模day13-灰色系统理论I-灰色关联与GM(1,1)预测
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
- Oracle中分区表中表空间属性
- Babylon-AST初探-代码更新删除(Update Remove)
- HTML+CSS+JS实现 ❤️电商商品图片幻灯片特效❤️
- Linux命令之crontab命令
- ES6之let原理+回调函数等待队列——五个完全相同的按钮,点第i个按钮弹出i
- win10自动切换日夜模式
- es创建索引库报错 :Types cannot be provided in put mapping requests, unless the include_type_na
- 计算机ppt试题训练,教案计算机试题.ppt
- 软件工程设计图(总体设计、概要设计、详细设计)
- python提取文件中含某一字符串的行,并写入新的文件中
- 基于MVC的简易图形编辑器
- Pygame制作音乐播放器
- 双目活体检测:人证核验一体机
- 食品加工设备远程管理维护解决方案