现在企业级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. 共享内存是最快的一种IPC方式

    在linux进程间通信的方式中,共享内存是一种最快的IPC方式.因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限 ...

  2. python简要

    python用冒号代替{}开启语句块 /usr/bin/python 加在脚本的头部, ./脚本 help("str") : 查看命令帮助 '''三引号可以打印换行字符串 prin ...

  3. c++ std::sort函数调用经常出现的invalidate operator<错误原因以及解决方法

    在c++编程中使用sort函数,自定义一个数据结构并进行排序时新手经常会碰到这种错误. 这是为什么呢?原因在于什么?如何解决? 看下面一个例子: int main(int, char*[]) { st ...

  4. Hololens开发笔记之Gaze凝视射线

    凝视是HoloLens首要输入方式,形式功能类似于桌面系统的光标,用于选择操作全息对象.然而在Unity中并没有明确的Gaze API或者组件. 概念上来说,Gaze是通过用户头部两眼之间发出一条向前 ...

  5. 【jQuery】关于选择器中的 :first 、 :first-child 、 :first-of-type

    [:first] <!DOCTYPE html><html lang="zh-CN"><head>    <title>test&l ...

  6. Linux系统时间设置(转载)

    Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...

  7. c# winform快捷键设置

    设置 Form 的 KeyPreview=true 然后在Form 的案件事件里判断按钮类型进行分别调用就可以了 private void Form1_KeyDown(object sender, K ...

  8. oracle decode

    decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...

  9. PreparedStatement批量(batch)插入数据

    JDBC操作数据库的时候,需要一次性插入大量的数据的时候,如果每次只执行一条SQL语句,效率可能会比较低.这时可以使用batch操作,每次批量执行SQL语句,调高效率. public Boolean ...

  10. JAVA中的策略模式

    现在我们有一个虚基类-鸭子(abstract Duck). 有真鸭子,野鸭子,橡皮鸭子继承了该类.虚基类有swing方法,毕竟游泳是所有的鸭子都应有的功能.还有一个虚方法display,这个方法在子类 ...