现在企业级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:打印对应的信息的时候,可自行选择打印的部分(建议,循环部分的信息,一类一类的打印这样更好处理)

辅助的写与数据库交互的XML文件的类的更多相关文章

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

    VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...

  2. spring 多线程 写入数据库 和 写入 xml文件

    最近工作中遇到一个需求 多线程先爬取页面 然后将爬取的结果持久化到数据库中 ,一些大文本的内容需要持久化到 xml文件中; 下面是运行后的结果: xml 文件写入结果: 数据库写入结果: 再来张项目结 ...

  3. 类似查询mysql数据库的查询XML的JS类

    一个快捷操作XML数据库的Javascript接口对象,包含select.count.tables.fields等方法,能够像操作mysql等其它数据库一样操作XML数据库. if(document. ...

  4. 从数据库中生成XML文件

    前台页面<%@ page language="java" contentType="text/html; charset=utf-8" pageEncod ...

  5. dtd文件中写的引用实体被xml文件引用后无法在浏览器中显示的问题

    解决方案:把dtd文件由被xml文件外部引用改成被xml文件内部引用. 例子: 1.xml文件: <?xml version="1.0" encoding="UTF ...

  6. XML文件操作类--创建XML文件

    这个类是在微软XML操作类库上进行的封装,只是为了更加简单使用,包括XML类创建节点的示例. using System; using System.Collections; using System. ...

  7. PHP对XML文件操作类讲解

    <?phpclass XML{    private $dom;        function __construct ()    {        $this->dom = new D ...

  8. C# XML文件操作类XmlHelper

    类的完整代码: using System;using System.Collections;using System.Xml; namespace Keleyi.Com.XmlDAL{public c ...

  9. Android中的几种解析XML文件的类

    Ø DOM解析 优点: 1.XML树在内存中完整存储,因此可以直接修改其数据和结构. 2.可以通过该解析器随时访问XML树中的任何一个节点. 3.DOM解析器的API在使用上也相对比较简单. 缺点:如 ...

随机推荐

  1. metaspolit教程

    网上的安装方式都是抄来抄去,我也抄了下,不过好歹自己试了下,有所不同 git clone https://github.com/rapid7/metasploit-framework.git vim ...

  2. 106. Construct Binary Tree from Inorder and Postorder Traversal

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  3. C# 理解lock

    本文为转载 .. 一. 为什么要lock,lock了什么? 当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步 ...

  4. Android Gradle实用技巧——多渠道打包

    友盟有很多不错的功能,例如渠道统计等. 想要做渠道统计,有一个要求就是要在manifest文件中添加各个渠道的配置.只有一两个渠道还好说,但是渠道多了的话,手动修改然后打包简直是噩梦. 幸好现在And ...

  5. XAMPP Error: Apache shutdown unexpectedly. 解决思路

    我建议首先 运行在cmd中运行 (安装目录)apache/bin/httpd.exe 之后就很好确定错误的具体原因了,而不是根据下面的那样猜端口,比如我遇到的问题,就是配置的路径不存在导致的. 参考资 ...

  6. python深入走路

    Python描述符(descriptor)解密 http://www.geekfan.net/7862/

  7. tcpdump学习

    #直接启动tcpdump将监视第一个网络接口上所有流过的数据包 -n不解析地址到nametcpdump -n #监视指定网络接口的数据包,不指定则为 eth0tcpdump -i eth1 #监视指定 ...

  8. 【Java】PrettyTime

    package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.D ...

  9. 深入Java集合学习系列:HashMap的实现原理

    1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...

  10. JAVA while循环,do-while循环,for循环

    一.while循环 实例: public class Test{ public static void main(String[] args){ int i = 1; while(i<30){ ...