现在企业级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. VBA标准模块与类模块

    大家通过之前的介绍,已知道怎么将一个空模块插入VBA的工程中.从插入模块中可以看到,模块有有两种——标准模块与类模块.类模块是含有类定义的特殊模块,包括其属性和方法的定义.在后面会有介绍与说明. 随着 ...

  2. [linux basic]--线程

    /************************************************************************* > File Name: thread1.c ...

  3. 在html中添加缩放meta

    见代码(html) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://w ...

  4. Akka(一) - akka的wordcount

    1. 启动类 object Application extends App{ val _system = ActorSystem("HelloAkka") //构建akka容器 v ...

  5. [JS]Javascript的函数总结

    Javascript中不存在函数重载,同名的函数将被最后一个覆盖. function test(a,b){ this.x = 1;} function test(a){ this.x = 2;} fu ...

  6. Educational Codeforces Round 15 Road to Post Office

    Road to Post Office 题意: 一个人要从0走到d,可以坐车走k米,之后车就会坏,你可以修或不修,修要花t时间,坐车单位距离花费a时间,走路单位距离花费b时间,问到d的最短时间. 题解 ...

  7. python(5)字符串处理 (sub,replace,find,index,upper,strip,split,sub翻页

    一,sub和replace的用法 re.sub 函数进行以正则表达式为基础的替换工作 re.sub替换到目标字符串中的a,b或者c,并全部替换 另加上sub翻页操作: re.sub('start=\d ...

  8. [实变函数]2.3 开集 (open set), 闭集 (closed set), 完备集 (complete set)

    1        $$\beex \bea E\mbox{ 是开集}&\lra E^o=E\\        &\lra \forall\ P_0\in E,\ \exists\ U( ...

  9. 微信支付开发若干问题总结,API搞死人(谢谢ζั͡ޓއއއ๓http://www.thinkphp.cn/code/1620.html)血淋淋的教训,第二次栽这里了

    近日,我研究了微信支付的API,我是用简化版的API,首先简述一下流程: 1.通过APP_ID,APP_SCRECT获取网页授权码code, 2.利用code获取用户openid/userinfo 3 ...

  10. Java多线程之阻塞I/O如何中断

    阻塞的I/O线程在关闭线程时并不会被打断,需要关闭资源才能打断. 1.执行socketInput.close();阻塞可中断.2.执行System.in.close();阻塞没有中断. package ...