辅助的写与数据库交互的XML文件的类
现在企业级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文件的类的更多相关文章
- 转载 VC轻松解析XML文件 - CMarkup类的使用方法
VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...
- spring 多线程 写入数据库 和 写入 xml文件
最近工作中遇到一个需求 多线程先爬取页面 然后将爬取的结果持久化到数据库中 ,一些大文本的内容需要持久化到 xml文件中; 下面是运行后的结果: xml 文件写入结果: 数据库写入结果: 再来张项目结 ...
- 类似查询mysql数据库的查询XML的JS类
一个快捷操作XML数据库的Javascript接口对象,包含select.count.tables.fields等方法,能够像操作mysql等其它数据库一样操作XML数据库. if(document. ...
- 从数据库中生成XML文件
前台页面<%@ page language="java" contentType="text/html; charset=utf-8" pageEncod ...
- dtd文件中写的引用实体被xml文件引用后无法在浏览器中显示的问题
解决方案:把dtd文件由被xml文件外部引用改成被xml文件内部引用. 例子: 1.xml文件: <?xml version="1.0" encoding="UTF ...
- XML文件操作类--创建XML文件
这个类是在微软XML操作类库上进行的封装,只是为了更加简单使用,包括XML类创建节点的示例. using System; using System.Collections; using System. ...
- PHP对XML文件操作类讲解
<?phpclass XML{ private $dom; function __construct () { $this->dom = new D ...
- C# XML文件操作类XmlHelper
类的完整代码: using System;using System.Collections;using System.Xml; namespace Keleyi.Com.XmlDAL{public c ...
- Android中的几种解析XML文件的类
Ø DOM解析 优点: 1.XML树在内存中完整存储,因此可以直接修改其数据和结构. 2.可以通过该解析器随时访问XML树中的任何一个节点. 3.DOM解析器的API在使用上也相对比较简单. 缺点:如 ...
随机推荐
- C#程序集编译输出XML文档的作用
下图是ClassLib1类库的项目属性 /// <summary> /// 读取INI文件 /// </summary> /// <param name="Se ...
- 推荐一个css帮助手册的版本 同时提供chm和在线
版本保持更新 目录分类妥当 查阅很方便 就是习惯了jquery那种风格,略有不适应. 包括最新css3的内容 网址: http://css.doyoe.com/ chm下载地址: http://css ...
- DBA_Oracle Erp重启Database/Application/Concurrent/Apache(案例)
2014-12-27 Created By BaoXinjian
- RMAN_Oracle RMAN的常用Configure配置
2014-12-09 Created By BaoXinjian
- PLSQL_性能优化系列06_Oracle Soft Parse / Hard Parse软硬解析
2014-08-11 Createed By BaoXinjian
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)
转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...
- HTTP 错误 500.19 - Internal Server Error
ylbtech-Error-IIS: HTTP 错误 500.19 - Internal Server Error 1.A,错误代码返回顶部 错误摘要 HTTP 错误 500.19 - Interna ...
- Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义(转载)
From:http://dadekey.blog.51cto.com/107327/119938 我们先写一个简单的脚本,执行以后再解释各个变量的意义 # touch variable # vi ...
- spring ioc原理(看完后大家可以自己写一个spring)
控制反转/依赖注入 最近,买了本Spring入门书:spring In Action .大致浏览了下感觉还不错.就是入门了点.Manning的书还是不错的,我虽然不像哪些只看Manning书的人那样专 ...
- Jmeter-Maven-Plugin高级应用:Selecting Tests To Run
地址:https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki/Advanced-Configuration Selecting ...