现在企业级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. nodejs小问题:express不是内部或外部命令

    来源:http://jingyan.baidu.com/article/922554468a3466851648f419.html 一时兴起想学习点东西,准备在heroku上部署一个Node.js的小 ...

  2. 【solr】solr5.0整合tomcat

    1.下载 solr版本必须和lucene版本一致,这个链接http://archive.apache.org/dist/lucene/是apache子项目库,在这里可以下载lucene,我这里使用的是 ...

  3. Sublime Text 介绍、用法、插件等

    个人常用插件: AlignmentBracket Highlighter 此插件能完成括号高亮匹对DocBlockrEmmentNodejsPackage ControlPrefixr   CSS3中 ...

  4. 在指定路径下查找并打印mdb类型文件

    1 #encoding:utf8 import os fpath = 'D:\Download\LP传奇-麒麟传说\Date' rfile = '' files = [] mdbFiles = [] ...

  5. linux下安装mysql数据库与相关操作

    如下命令都是用root身份安装,或者在命令前加上sudo 采用yum安装方式安装 yum install mysql #安装mysql客户端 yum install mysql-server #安装m ...

  6. socket 发送发送HTTP请求

    socket方式: $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //socket_set_option($socket, SOL_S ...

  7. c语言-枚举

    自定义枚举数据类型:一般在函数返回值调用过程中,被调用函数具体实现中可以直接return 枚举列表中的常量值而不用定义具体的枚举数据,调用方则需用枚举具体的数据变量来接收返回结果,而不能用#defin ...

  8. jq鼠标点击滚动锚点

    鼠标点击滚动锚点 //滚动锚点 $('.menus-c ul li a').click(function(){ //alert(); $('html, body').animate({ scrollT ...

  9. Axis2的下载和安装

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  10. sql server异地备份数据库

    --注意:异地备份数据库,需要先开启备份文件夹的网络共享,数据库选择master --打开允许执行xp_cmdshell exec master..xp_cmdshell 'net use \\192 ...