辅助的写与数据库交互的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:打印对应的信息的时候,可自行选择打印的部分(建议,循环部分的信息,一类一类的打印这样更好处理)

转载于:https://www.cnblogs.com/godtrue/p/4110858.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

160 - 8 Andrnalin.1

环境&#xff1a; Windows xp sp3 打开&#xff0c;就一个Key输入框&#xff0c;输入&#xff1a;goodname&#xff0c;点OK&#xff0c;弹出一个 不明文字的框&#xff0c;反正肯定不对。 查壳&#xff0c;无壳的vb程序。OD载入&#xff1a; 查找字串&#xff0c;翻到最下…

C++ 虚函数表解析

C 虚函数表解析 陈皓 http://blog.csdn.net/haoel 前言 C中的虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”&#x…

160 - 9 Andrnalin.2

环境&#xff1a; Windows xp sp3 打开&#xff0c;这次升级了&#xff0c;有个Name和一个Key&#xff0c;输入&#xff1a; Name&#xff1a;goodname Key&#xff1a;12345678 肯定错误。拿到错误信息的字符串 查壳&#xff0c;无壳的VB程序。 直接OD载入&#xff0c;字…

[PALAPALA] 无题 - 外来的和尚会念经

手机, 现代人响当当的必须品, 尤其在移动App流行的大环境之下显得更为重要. 我, 并不是一个重度依赖手机的机粉. 但我对手机的差异化敏感度很高... 安卓手机, 我不喜欢, 因为满大街泛滥&#xff0c;折腾过多... 苹果手机, 我不喜欢, 因为满大街泛滥&#xff0c;bug过多..... 相…

HTTP协议 (四) 缓存

HTTP协议 (四) 缓存 阅读目录 缓存的概念缓存的好处Fiddler可以方便地查看缓存的header如何判断缓存新鲜度通过最后修改时间&#xff0c;判断缓存新鲜度与缓存相关的headerETag浏览器不使用缓存直接使用缓存&#xff0c;不去服务器端验证如何设置IE不使用缓存公有缓存和私有缓存…

160 - 10 Andrénalin.3

环境&#xff1a; Windows xp sp3 打开&#xff0c;是只有一个key&#xff0c;输入个goodname试试&#xff0c;错误。。。记下错误信息 查壳&#xff0c;无壳的VB程序。 查找字符串&#xff1a; 00402036 UNICODE "kXy^rO|*yXo*m\kMuOn*" 00402090 UNICODE &qu…

160 - 11 Andrnalin.4

环境&#xff1a; Windows xp sp3 打开&#xff0c;这次的界面炫酷多了&#xff0c;就像输保险箱密码。 旁边一个“UNREGISTRIERT”表示还没注册 输入个666666&#xff0c;没反应又没有确认按钮&#xff0c;可以猜测是用timer来检测输入的正确性 查壳&#xff0c;无壳的VB程…

ZooKeeper启动过程2:FastLeaderElection

前一篇文章中说到&#xff0c;启动ZooKeeper集群时&#xff0c;需要分别启动集群中的各个节点&#xff0c;各节点以QuorumPeer的形式启动&#xff0c;最后到达startLeaderElection和lookForLeader。 先说startLeaderElection 首先&#xff0c;初始化节点自身的currentVote【当前…

C++编程调试秘笈(第1次阅读)

阅读时间&#xff1a; 2017-4-17 --- 2017-4-19 第一次阅读《C编程调试秘笈》&#xff0c;可能是因为对项目开发的经验不足&#xff08;最近只是在做简单的五子棋&#xff09;&#xff0c;使得对里面很多的知识点了解得不是很深。 《C编程调试秘笈》讲的内容个人觉得与调试的技…

Web Component 文章

周末无意中了解了Web Component的概念。 http://blog.amowu.com/2013/06/web-components.html http://www.v2ex.com/t/69389 http://www.infoq.com/cn/news/2013/06/webcomponents Shadow DOM http://www.toobug.net/article/what_is_shadow_dom.html http://www.html5rocks.co…

遮罩效果 css3

CSS3提供了遮罩效果&#xff0c;这是以前CSS2中比较难实现的一个新特性&#xff0c;配合SVG或者canvas同样也可以实现遮罩效果&#xff0c;他的效果就如下图所示: 简单的说就是在一个层上面加一个过滤层&#xff0c;过滤层透明度越低&#xff0c;底层就显示的越多&#xff0c;反…

调试九法(第1次阅读)

阅读时间&#xff1a; 2017年4月19日 --- 2017年4月22日 第一次看到这本书的时候&#xff0c;是在网上看到它被评论得十分优秀&#xff0c;只要掌握了书中的方法&#xff0c;就能找到所有的BUG。我就是这样被吸引过来的。 因为是调试9法&#xff0c;所以总共讲了调试的时候注意…

Oracle11g密码区分大小写导致database link无法连接

Oracle11g的密码默认是区分大小写的&#xff0c;该特性通过初始化参数sec_case_sensitive_logon控制&#xff0c;默认TRUE表示区分大小写。但是Oracle11g之前的版本密码都是不区分大小写的&#xff0c;所以在Oracle10g等以前版本创建到Oracle11g的database link时&#xff0c;可…

OC-深浅复制

【OC学习-26】对象的浅拷贝和深拷贝——关键在于属性是否可被拷贝 对象的拷贝分为浅拷贝和深拷贝&#xff0c;浅拷贝就是只拷贝对象&#xff0c;但是属性不拷贝&#xff0c;拷贝出来的对象和原来的对象共用属性&#xff0c;即指向同一个属性地址。深拷贝则相当于不仅拷贝了一个…

计算机科学导论(第一次阅读)

时间&#xff1a; 2017年4月22日----2017年4月26 这是一本计算机入门书籍&#xff0c;粗略地描述了计算机各个方面的内容。当然对于一些十分复杂的知识&#xff0c;也仅仅是大概描述了这方面知识的一些了解知识。

配置SQLServer,允许远程连接

需要别人远程你的数据库&#xff0c;首先需要的是在一个局域网内&#xff0c;或者连接的是同一个路由器&#xff0c;接下来就是具体步骤&#xff1a; &#xff08;一&#xff09;首先是要检查SQLServer数据库服务器中是否允许远程链接。其具体操作为&#xff1a; &#xff08;1…

弹出打开/保存文件对话框 选择文件夹对话框

打开/保存文件对话框: CFileDialog::CFileDialog(BOOL bOpenFileDialog, //为TRUE则显示打开对话框&#xff0c;为FALSE则显示保存对话文件对话框LPCTSTR lpszDefExt NULL, //默认的文件扩展名LPCTSTR lpszFileName NULL, //默认的文件名DWORD dwFlags OFN_HIDEREADONLY | O…

SharePoint 2013的100个新功能之网站管理(一)

一&#xff1a;设置盘 网站操作现在被替换为新的&#xff08;设置&#xff09;盘子。一些新的操作像添加一个应用、添加一个页面或设计管理器被添加而像创建网站则从菜单中移除了。 二&#xff1a;移除以其他用户身份登录 在SharePoint 2013中&#xff0c;从用户欢迎菜单中移除…

160 - 13 badboy

偷懒了很久也是时候要继续开始学习了。 环境&#xff1a; windows xp sp3 工具&#xff1a; VB Decompiler v8.3 这次是个vb文件&#xff0c;所以尝试一下用这个的感觉。 打开文件之后发现有两个CrackMe选择&#xff0c;分别是1.0版本和2.0版本。 打开vb decompiler&#…

VBS操作剪切板

VBS操作剪切板 设置剪切板的内容 Dim Form, TextBox Set Form CreateObject("Forms.Form.1") Set TextBox Form.Controls.Add("Forms.TextBox.1").Object TextBox.MultiLine True TextBox.Text "忘记了&#xff0c;喜欢一个人的感觉" TextBo…