现在企业级WEB应用中与数据库交互的XML文件都是通过插件自动生成的,不过有些时候修改比较老的项目的时候也是需要手动的来做这一动作的!如下代码就是一个实现上述的功能的辅助类,在此记录一下以备后用!

package com.cn.common.utils;import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import oracle.jdbc.OracleConnection;/*** 这个类主要用于手动的辅助写与数据库交互的XML文件,打印一些固定格式的信息,用于写增删改查的数据库SQL语句* @author Administrator**/
public class MetaDataTest {/*** 主方法,获得表的结构信息* @param args*/public static void main(String[] args){try {Class.forName("oracle.jdbc.driver.OracleDriver");String url = "THE URL";String username="THE USERNAME";String password="THE PASSWORD";try {Properties props =new Properties();props.put("remarksReporting","true");/** 获得数据库连接,通过URL/USERNAME/PASSWORD,注意,要确定数据的服务是开启的*/Connection conn = DriverManager.getConnection(url,username,password);/** 设置连接属性,使得可获取到列的REMARK(备注)*/((OracleConnection)conn).setRemarksReporting(true); DatabaseMetaData dmd = conn.getMetaData();System.out.println("=============================================The database infor======================================================");                // 数据库名:System.out.println("数据库名称:" + dmd.getDatabaseProductName());// 数据库版本号:System.out.println("数据库版本号  :"+ dmd.getDatabaseProductVersion());// 驱动程序System.out.println("数据库驱动程序 :" + dmd.getDriverName());// 驱动版本System.out.println("数据库驱动版本:" + dmd.getDriverVersion());
System.out.println("=============================================The users infor=========================================================");                //打印当前数据库的所有用户名称
                getAllSchemas(dmd);
System.out.println("=============================================The tables infor========================================================");                                //打印当前数据库用户下的所有表信息getAllTableList(dmd,"THE SCHEMA");
System.out.println("=============================================The table infor=========================================================");                                //打印当前用户当前表结构信息getTableColumns(dmd,"THE SCHEMA","THE TABLE");} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}}/** * 获得表或视图中的列信息*/  public static void getTableColumns(DatabaseMetaData dbMetaData,String schemaName, String tableName){  try{        ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");              while (rs.next()){  String tableCat = rs.getString("TABLE_CAT");//表目录(可能为空)              String tableSchemaName = rs.getString("TABLE_SCHEM");//表的架构(可能为空)     String tableName_ = rs.getString("TABLE_NAME");//表名  String columnName = rs.getString("COLUMN_NAME");//列名  int dataType = rs.getInt("DATA_TYPE"); //对应的java.sql.Types类型     String dataTypeName = rs.getString("TYPE_NAME");//java.sql.Types类型名称  int columnSize = rs.getInt("COLUMN_SIZE");//列大小int decimalDigits = rs.getInt("DECIMAL_DIGITS");//小数位数  int numPrecRadix = rs.getInt("NUM_PREC_RADIX");//基数(通常是10进制的) int nullAble = rs.getInt("NULLABLE");//是否允许为null  String remarks = rs.getString("REMARKS");//列描述String columnDef = rs.getString("COLUMN_DEF");//默认int sqlDataType = rs.getInt("SQL_DATA_TYPE");//sql数据类型  int sqlDatetimeSub = rs.getInt("SQL_DATETIME_SUB");   //SQL日期时间 int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH");   //char类型的列中的字节长度int ordinalPosition = rs.getInt("ORDINAL_POSITION");  //表中列的索引(从1开始)String propName = colNameToPropName(columnName);
System.out.println("=============================================The bean property infor=================================================");                                                    System.out.println("private String " + propName+";");
System.out.println("=============================================The column map infor====================================================");                    System.out.println("<result column=\""+columnName+"\" property=\""+propName+"\" jdbcType=\"NVARCHAR\" />");
System.out.println("=============================================The input property infor==================================================");System.out.println("#"+propName+"#,");
System.out.println("=============================================The map property  infor===============================================");System.out.println(columnName+"=#"+propName+"#,");
System.out.println("=============================================The bean property remarks infor=========================================");System.out.println("<tbl:th width=\"80\" delim=\"true\" field=\""+propName+"\">"+remarks+"</tbl:th>");
System.out.println("=============================================The property map infor==================================================");System.out.println("<tbl:td delim=\"true\">${element."+propName+"}</tbl:td>");/** * ISO规则用来确定某一列的为空性 * YES--如果该参数可以包括空值* NO--如果参数不能包含空值* 空字符串---如果参数为空性是未知的*/  String isNullAble = rs.getString("IS_NULLABLE");  /** * 指示此列是否是自动增长的* 1--如果该列是自动的* 2--如果不是自动递增的* 空字符串--如果不能确定它是否是自动增长的* 列是自动递增的参数是未知的*/
//                    String isAutoincrement = rs.getString("IS_AUTOINCREMENT");
System.out.println("=============================================The column map infor=====================================================");                      System.out.println(tableCat + "-" + tableSchemaName + "-" + tableName_ + "-" + columnName + "-"    + dataType + "-" + dataTypeName + "-" + columnSize + "-" + decimalDigits + "-" + numPrecRadix     + "-" + nullAble + "-" + remarks + "-" + columnDef + "-" + sqlDataType + "-" + sqlDatetimeSub     + charOctetLength + "-" + ordinalPosition + "-" + isNullAble + "-" +"");     }     } catch (SQLException e){  e.printStackTrace();     }  }  /**   * 获得数据库中所有用户名称   * @param dbMetaData */    public static void getAllSchemas(DatabaseMetaData dbMetaData){  try{  ResultSet rs = dbMetaData.getSchemas();   while (rs.next()){     String tableSchem = rs.getString("TABLE_SCHEM");     System.out.println(tableSchem);     }     } catch (SQLException e){  e.printStackTrace();     }     }     /** * 获得指定用户下面的表信息数据*/  public static void getAllTableList(DatabaseMetaData dbMetaData,String schemaName) {  try {  /** table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".  */String[] types = { "TABLE" };  ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);  while (rs.next()) {  String tableName = rs.getString("TABLE_NAME");  //表名称 String tableType = rs.getString("TABLE_TYPE");  //表类型String remarks = rs.getString("REMARKS");       //表备注System.out.println(tableName + "-" + tableType + "-" + remarks);  }  } catch (SQLException e) {  e.printStackTrace();  }  }/*** 将数据库表中的列名转换成JavaBean的属性名称,转换规则是采用驼峰式的命名规则* @param columnName* @return*/private static String colNameToPropName(String columnName){String result="";String name = columnName.toLowerCase();String[] data = name.split("_");for(int i=0;i<data.length;i++){if(i==0){result  = data[i];}else{result  += data[i].replaceFirst(data[i].substring(0, 1), data[i].substring(0, 1).toUpperCase());}}return result;}
}

说明

1:此小程序可直接使用,只要拿到对应的项目中或者新建一个小项目就可以啦,当然需要引入ORACLE的JAR包

2:根据自己的需要连接对应的数据库,并且需要指明那个用户下的那一张表,程序中红色字体部分已经明确指明啦!

3:打印对应的信息的时候,可自行选择打印的部分(建议,循环部分的信息,一类一类的打印这样更好处理)

转载于:https://www.cnblogs.com/godtrue/p/4110858.html

辅助的写与数据库交互的XML文件的类相关推荐

  1. 写了一个操作XML文件的类

    一个操作XML文件的类..部份功能在完善中~~~~ using System; using System.Collections.Generic; using System.Text; using S ...

  2. dom4j工具类_基于DOM4J的XML文件解析类

    XML文件解析分四类方式:DOM解析:SAX解析:JDOM解析:DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于ja ...

  3. [转载]VC轻松解析XML文件 - CMarkup类的使用方法

    VC轻松解析XML文件 - CMarkup类的使用方法 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyXML很好,可能字符集问题,我编译不了 ...

  4. php XML文件解释类

    XMLParser.class.php <?php /** XML 文件分析类 * Date: 2013-02-01 * Author: fdipzone * Ver: 1.0 * * func ...

  5. android xml导进数据库,Android通过xml文件配置数据库

    之前一段时间自己封装了两个数据库,一个是ORM数据库,另一个是事件流数据库,项目相应的地址如下: ORM数据库:https://github.com/wenjiang/SimpleAndroidORM ...

  6. xml文件写入mysql数据库_将XML文件插入到数据库

    Xml2OleDb简介 XML是互联网共享数据的最好的方法,XML格式的数据可以很轻松的集成到不同的Web应用中去.但如果你想将XML文件插入到数据库,怎么办?Xml2OleDb将向您说明往OleDb ...

  7. java 写 xml 文件 工具类_XML读写工具类

    摘要:①读取XML文件,生成pojo对象:②将对象信息保存到xml中. 步骤: ①新建一个普通的java类BasePage: packagecom.test.selenium.pages;import ...

  8. 一次代码重构之旅-快速读写xml文件工具类封装

    为了满足系统的灵活性,有些功能经常需要用到配置文件,一般是xml格式的居多.如何能快速读写配置文件呢? 以前都是用dom4j提供的api来读写xml文件,用dom4j读写配置文件总感觉像是在结构化的处 ...

  9. php中处理xml文件的类 simpleXML

    1 <?php 2 header("Content-Type:text/html;charset=utf-8");//此处必须输出html编码格式,虽然后面会输出xml的编码 ...

最新文章

  1. 归并排序相关题目(待编辑)
  2. 不可多得的Javascript(AJAX)开发工具 - Aptana
  3. jsf xhtml调用方法_JSF的工作方式以及调试方法–可以使用polyglot吗?
  4. AngularJS 计时器
  5. fastxml 大于符号不转换_JQuery框架及Ajax技术练习
  6. 100g光模块厂家排名_100G光模块固件设计示例
  7. 不搞虚的!快速把你拉入Docker 的门里
  8. Jenkins 无法运行 putty.exe问题解决
  9. Windows Phone 7 button控件
  10. 一步一步学linq to sql(七)并发与事物
  11. Python实现Mean Shift算法
  12. nssa和stub_华为路由器OSPF设置之NSSA和STUB
  13. 三、Reminders 读写
  14. Java之spilt()函数,trim()函数
  15. 如何使用信号量处理问题
  16. window在文件管理器中打开命令行窗口
  17. 面向6G网络自动化的知识驱动可解释人工智能(XAI);基于汽车事件数据的脉冲神经网络目标检测;对称分类方案下波导阵列中的BIC;PreMovNet:基于运动前脑电的抓取和提举手运动学估计
  18. 深度操作系统 机器学习_深度学习如何构建情感聊天机器人,第2部分对话系统...
  19. 新零售mysql设计(部门 职位 员工 角色 用户)表
  20. 解析C++隐藏与覆盖

热门文章

  1. Divide and conquer:Drying(POJ 3104)
  2. jquery简单实现树形结构收缩展开效果
  3. [转] 做个自强不息的青年
  4. 2345电脑管家_2345软件管家下载|2345软件管家 2.0 官方正式版
  5. python numpy.random模块中提供啦大量的随机数相关的函数
  6. python必读5本书籍_免费下载!5本从Python入手机器学习的必备电子书!(附链接)...
  7. 钉钉机器人发送图片 python_python封装钉钉Webhook机器人消息发送逻辑
  8. 利用位运算的模四算法
  9. ConcurrentLinkedQueue
  10. matlab ssgs工具箱,基于PI控制方式的1A开关电源MATLAB仿真研究