- 浏览: 370187 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
jiangli19192:
...
自己写的一个启动JBoss服务器的bat批处理 -
56553655:
最好这样:java -Xms3700M -Xmx3700M - ...
测试本机JVM支持的最大内存 -
lizhiy05:
学习一哈……
Web Services体系结构及相关概念 -
ghy200692162:
System.out.println("开始注册Js ...
基于OSGi的JSF Web组件开发问题求解 -
xiao888lin:
你的头像看起来很像我们宿舍老四。。。
测试本机JVM支持的最大内存
由于我们在开发过程中无法实时地与每个客户的数据库保持一致,因此,经过一段时间,出现数据库各个学校不尽统一的情况也在所难免,现上传一个今天刚写的分析两个不同的库之间表和字段是否一致的小程序与大家共享。
为了便于理解,现需要说明如下:
1.连接数据库的部分不要使用带上下文的,写个简单的数据库连接即可
2.程序中采用内部类来记录数据信息,同时对内部类的构造函数使用了多态
3.为了实现程序的通用,对于需要比较的数据库,我定义成了常量,因此,在程序中只需修改这两个常量的值,程序其他地方不需要做任何改动便可以分析出你想要的比对结果。
java 代码
- /*******************************************************************************
- * @author danlley
- * @version 1.06.06.12
- * @since 2006-06-12
- *
- Description: 此类用于分析客户库之间,或者开发库与客户库之间出现的不一致问题!
- * 要比较两个库中的数据之间差异,只需对常量:DATABASE_A
- * DATABASE_B
- * 修改成所需批对的数据库即可。
- * 注意: 在整个处理过程中,表和视图完全按照同一概念处理.
- *******************************************************************************/
- package cc.c37c.newscore.business;
- import java.util.Collection;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import org.danlley.ora.DBConnection;//用于没有通过上下文进行连接数据库(属于简单连接方式)
- public class CompareCertainDB{
- /**
- * 定义两个要进行比较的数据库名常量,可根据需要进行修改
- */
- private static final String DATABASE_A="WLJW";
- private static final String DATABASE_B="JWGL";
- Connection conn=null;
- PreparedStatement ps=null;
- ResultSet rs=null;
- /**
- * 说明:此方法用于比较两个不同库中是否有相同表名,相同字段名的字段中字段大小不一致的情况
- * 如果有,则返回一个集合类用于保存查询结果.
- * 其中,每条信息都保存在一个内部类 IntityClass 的属性 T_NAME , C_NAME ,
- * C_SIZE , CC_SIZE 中.
- * @return
- * @throws java.lang.Exception
- */
- public Collection com_comp_len_col_both_DB() throws Exception{
- try{
- ArrayList com_comp_len_col=new ArrayList();
- StringBuffer strSQL=new StringBuffer();
- strSQL.append("select a.atable_name,a.acolumn_name,a.adata_length,b.bdata_length from ");
- strSQL.append(" (");
- strSQL.append(" select table_name atable_name, column_name acolumn_name,data_length adata_length");
- strSQL.append(" from all_tab_columns where owner='WLJW'");
- strSQL.append(" )a,");
- strSQL.append(" (");
- strSQL.append(" select table_name btable_name, column_name bcolumn_name,data_length bdata_length ");
- strSQL.append(" from all_tab_columns where owner='JWGL'");
- strSQL.append(" )b ");
- strSQL.append("where a.acolumn_name=b.bcolumn_name and ");
- strSQL.append(" a.atable_name=b.btable_name and");
- strSQL.append(" a.adata_length<>b.bdata_length");
- conn=DBConnection.getConn();
- System.out.println(
- "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- System.out.println(strSQL.toString());
- System.out.println(
- "++++++++++++++++++++++++++++++++++++++++++++++");
- ps=conn.prepareStatement(strSQL.toString());
- rs=ps.executeQuery();
- while(rs.next()){
- String T_NAME=null; //表名
- String C_NAME=null; //字段名称
- String C_SIZE=null; //字段大小
- String CC_SIZE=null; //被比对字段大小
- T_NAME=rs.getString("atable_name");
- C_NAME=rs.getString("acolumn_name");
- C_SIZE=rs.getString("adata_length");
- CC_SIZE=rs.getString("bdata_length");
- IntityClass intityClass=new IntityClass(T_NAME,C_NAME,C_SIZE,CC_SIZE);
- com_comp_len_col.add(intityClass);
- }
- int size=com_comp_len_col.size();
- com_comp_len_col.add(new IntityClass("大小不一致的字段共有:"+size+"个!",null,null,null));
- return com_comp_len_col;
- } catch(Exception e){
- e.printStackTrace();
- e.getMessage();
- throw new Exception(e);
- } finally{
- DBConnection.close(rs);
- DBConnection.close(ps);
- DBConnection.freeConn(conn);
- }
- }
- /**
- * 说明:此方法用于比对在两个库同一名称的表中,字段名称在一个库中存在,而在另一个库中不存在的情况
- * @param type 用来决定两个库的比对方式,此参数由 DATABASE_A 和 DATABASE_B
- * 来取值.
- * 如果类型为 DATABASE_A ,则查找 DATABASE_A 库中存在而
- * DATABASE_B库中不存在的表.
- * 如果类型为 DATABASE_B ,则查找 DATABASE_B 库中存在,而 DATABASE_A
- * 库中不存在的情况.
- * @return
- * @throws java.lang.Exception
- */
- public Collection compCols_in_one_notin_other(String type) throws Exception{
- ArrayList diff_cols_li=new ArrayList();
- try{
- StringBuffer strSQL=new StringBuffer();
- String typeA="";
- String typeB="";
- /********************************************
- ****** 决定查询方式 *******
- ********************************************/
- if(CompareCertainDB.DATABASE_A.equals(type)){
- typeA=CompareCertainDB.DATABASE_A;
- typeB=CompareCertainDB.DATABASE_B;
- }
- if(CompareCertainDB.DATABASE_B.equals(type)){
- typeB=CompareCertainDB.DATABASE_A;
- typeA=CompareCertainDB.DATABASE_B;
- }
- strSQL.append("select table_name,column_name,data_type from ");
- strSQL.append(" (");
- strSQL.append(" select table_name,column_name,data_type from ");
- strSQL.append(" (");
- strSQL.append(" select table_name,column_name,data_type from all_tab_columns where owner='"+typeA+"'");
- strSQL.append(" )");
- strSQL.append(" where table_name in (select distinct(table_name) btablename from all_tab_columns where owner ='"+typeB+"')");
- strSQL.append(" )B ");
- strSQL.append(" where B.column_name not in (select column_name from all_tab_columns where owner ='"+typeB+"')");
- conn=DBConnection.getConn();
- System.out.println(
- "+++++++++++++++++++++++++++++++++++++++++++");
- System.out.println(strSQL.toString());
- System.out.println(
- "++++++++++++++++++++++++++++++++++++++++++++++++");
- ps=conn.prepareStatement(strSQL.toString());
- rs=ps.executeQuery();
- String diff_cols=null;
- while(rs.next()){
- String T_NAME=null;
- String C_NAME=null;
- String C_TYPE=null;
- T_NAME=rs.getString("table_name");
- C_NAME=rs.getString("column_name");
- C_TYPE=rs.getString("data_type");
- IntityClass intityClass=new IntityClass(T_NAME,C_NAME,C_TYPE);
- diff_cols_li.add(intityClass);
- }
- int size=diff_cols_li.size();
- diff_cols_li.add(new IntityClass(null,"共有 "+size+" 个字段",null)); //);
- return diff_cols_li;
- } catch(Exception e){
- e.printStackTrace();
- e.getMessage();
- throw new Exception(e);
- } finally{
- DBConnection.close(rs);
- DBConnection.close(ps);
- DBConnection.freeConn(conn);
- }
- }
- /**
- *
- Title: 内部类
- *
- Description:由于在处理过程中将会大量用到字段名称和字段类型,此处如果新建一个类
- * 去处理由于仅仅包含五个对象属性,因此有些得补偿失,所以采用内部类,
- * 这样:
- * 首先省去了建一个新的class
- * 解决了代码重复定义和使用的臃肿现象
- * 此内部类中包含五个对象属性:
- * T_NAME 表名
- * C_NAME 字段名称
- * C_TYPE 字段类型
- * C_SIZE 字段大小
- * CC_SIZE 被比对字段大小
- * @author danlley
- * @version 1.0
- */
- public static class IntityClass{
- /**
- * 以下三个属性主要用于用于比对字段类型,同时,除C_TYPE外,其余两属性还将用于
- * 比对字段大小
- */
- String T_NAME=null; //表名
- String C_NAME=null; //字段名称
- String C_TYPE=null; //字段类型
- /**
- * 下面3个字段与T_NAME,C_NAME一起用于比对字段大小
- */
- String C_SIZE=null; //字段大小
- String CC_SIZE=null; //被比对字段大小
- /**
- * 说明: 此方法用于比对字段类型
- * @param T_NAME 表名
- * @param C_NAME 字段名称
- * @param C_TYPE 字段类型
- */
- public IntityClass(String T_NAME,String C_NAME,String C_TYPE){
- this.T_NAME=T_NAME;
- this.C_NAME=C_NAME;
- this.C_TYPE=C_TYPE;
- }
- /**
- * 说明:此方法用于比对字段大小
- * @param T_NAME 表名
- * @param C_NAME 字段名称
- * @param C_SIZE 字段大小
- * @param CC_SIZE 被比对字段大小
- */
- public IntityClass(String T_NAME,String C_NAME,String C_SIZE,String CC_SIZE){
- this.T_NAME=T_NAME;
- this.C_NAME=C_NAME;
- this.C_SIZE=C_SIZE;
- this.CC_SIZE=CC_SIZE;
- }
- }
- /**
- * 说明:此方法用于比较并返回两个库中属于一个库,但又不属于另一个库的表信息
- * @param type 如果传入的参数为“DATABASE_A”,则找出WLJW中存在,但JWGL中不存在的表。
- * 如果传入的参数为“DATABASE_B”,则找出JWGL中存在,但WLJW中不存在的表。
- * @return
- * @throws java.lang.Exception
- */
- public Collection tabShldDel(String type) throws Exception{
- try{
- ArrayList dutyTabLi=new ArrayList();
- StringBuffer strSQL=new StringBuffer();
- String typeA="";
- String typeB="";
- /********************************************
- ****** 决定查询方式 *******
- ********************************************/
- if(CompareCertainDB.DATABASE_A.equals(type)){
- typeA=CompareCertainDB.DATABASE_A;
- typeB=CompareCertainDB.DATABASE_B;
- }
- if(CompareCertainDB.DATABASE_B.equals(type)){
- typeB=CompareCertainDB.DATABASE_A;
- typeA=CompareCertainDB.DATABASE_B;
- }
- strSQL.append("select atablename from ");
- strSQL.append(" (");
- strSQL.append(" select distinct(table_name) atablename from all_tab_columns where owner like '%"+typeA+"%'");
- strSQL.append(" )A ");
- strSQL.append(" where A.atablename not in ( ");
- strSQL.append("select distinct(table_name) btablename from all_tab_columns where owner ='"+typeB+"'");
- strSQL.append(" ) ");
- conn=DBConnection.getConn();
- System.out.println(
- "++++++++++++++++++++++++++++++");
- System.out.println(strSQL.toString());
- System.out.println(
- "++++++++++++++++++++++++++++++++++");
- ps=conn.prepareStatement(strSQL.toString());
- rs=ps.executeQuery();
- while(rs.next()){
- String tableName=rs.getString("atablename");
- dutyTabLi.add(tableName);
- }
- int size=dutyTabLi.size();
- dutyTabLi.add("共有 "+size+" 张表");
- return dutyTabLi;
- } catch(Exception e){
- e.printStackTrace();
- e.getMessage();
- throw new Exception(e);
- } finally{
- DBConnection.close(rs);
- DBConnection.close(ps);
- DBConnection.freeConn(conn);
- }
- }
- /**
- * 说明:用于返回两个库中的交集表信息
- * @return
- * @throws java.lang.Exception
- */
- public Collection commonTabLi() throws Exception{
- try{
- ArrayList comTabLi=new ArrayList();
- StringBuffer strSQL=new StringBuffer();
- strSQL.append("select atablename from ");
- strSQL.append(" ( ");
- strSQL.append(" select distinct(table_name) atablename from all_tab_columns where owner='"+CompareCertainDB.DATABASE_A+"'");
- strSQL.append(" )A ");
- strSQL.append("where A.atablename in (select distinct(table_name) btablename from all_tab_columns where owner ='"+
- CompareCertainDB.DATABASE_B+"')");
- conn=DBConnection.getConn();
- System.out.println(
- "++++++++++++++++++++++++++++++++");
- System.out.println(strSQL.toString());
- System.out.println(
- "++++++++++++++++++++++++++++++++++++++++");
- ps=conn.prepareStatement(strSQL.toString());
- rs=ps.executeQuery();
- String comTab=null;
- while(rs.next()){
- comTab=rs.getString("atablename");
- comTabLi.add(comTab);
- }
- int size=comTabLi.size();
- comTabLi.add("共有 "+size+" 张表");
- return comTabLi;
- } catch(Exception e){
- e.printStackTrace();
- e.getMessage();
- throw new Exception(e);
- } finally{
- DBConnection.close(rs);
- DBConnection.close(ps);
- DBConnection.freeConn(conn);
- }
- }
- /**
- * 说明:程序处理入口
- * @param args
- */
- public static void main(String[] args){
- try{
- CompareCertainDB compCertDB=new CompareCertainDB();
- System.out.println("==================================================");
- System.out.println(" 以下为"+CompareCertainDB.DATABASE_A+"中存在但在"+CompareCertainDB.DATABASE_B+"中不存在的表 ");
- System.out.println("==================================================");
- Collection inWLJWnotJWGL=compCertDB.tabShldDel(CompareCertainDB.DATABASE_A);
- Iterator iter_wljw=inWLJWnotJWGL.iterator();
- String tabinWLJW=null;
- while(iter_wljw.hasNext()){
- tabinWLJW=(String)iter_wljw.next();
- System.out.println(""+tabinWLJW);
- }
- System.out.println("==================================================\n\n\n\n");
- &nb
发表评论
-
让mybatis支持管理和操作多个不同的业务数据库实例
2017-05-07 21:25 6398在微服务大行其道的今天,一个工程中同时操作多个不同的业务数 ... -
集成https方式的rest服务
2017-04-23 01:25 1907虽然REST架构是Roy Fieldin ... -
构建安全的restful服务docker
2017-04-19 00:26 850说明:本例子基于上一篇构建restful服务的文章:htt ... -
Java设计设计模式之桥接模式(Bridge)
2017-03-11 19:19 0... -
Java设计设计模式之单例模式(Singleton)
2017-03-11 19:13 735单例模式在日常应用开发过程中被大量使用到,如在计算机系统中 ... -
Java设计设计模式之组合模式(Composition)
2017-03-11 17:32 1083那王麻子自从做了肉夹馍生意后,真是风生水起,分店开的跟下饺 ... -
Java设计设计模式之外观模式(Facade)
2017-03-05 19:53 795上一篇博客我们陈述了适配器模式,这篇文章的例子接上上一个设计 ... -
Java设计设计模式之适配器模式(Adaptor)
2017-03-05 15:29 1550我的博客自从2008年以 ... -
Java JNI 编程进阶
2008-12-17 09:56 4508JNI一直以来都很少去关注,但却是我心中的一个结,最近这几天刚 ... -
Inner class与匿名类相关问题汇总
2007-09-12 17:03 14461)如果存在3个类,一个是普通类A其中有个方法a(),接口B有 ... -
测试本机JVM支持的最大内存
2007-07-17 21:35 17403传说JVM是使用的最大内存一般Windows下1200-150 ... -
世界程序设计大赛优胜奖源码
2007-07-17 21:20 4212/*************16K的代码还有好听的音乐伴奏** ... -
JSP“抓”网页代码的程序
2007-07-17 13:35 1362... -
改进后的汉字截取处理程序(含测试用例)
2007-07-17 13:25 2046java 代码 package org.danl ... -
Sun HotSpot 1.4.1 JVM学习总结
2007-07-17 13:08 1624在Java 中gc是不被强制 ... -
2006-09-24
2007-07-17 13:05 963第一,谈谈final, finally, ... -
Java语言编码规范 -01
2007-07-17 13:04 1128原文出处http://java.sun.com/docs/co ... -
Java语言编码规范(2)
2007-07-17 13:03 10966.3 布局(Placement) 只在代码块的开始处声明变 ... -
JAVA面试题集
2007-07-17 12:52 1238JAVA面试题集 基础知 ... -
Java 基础问题全解答
2007-07-17 12:16 19031. 什么叫作抽象? 抽象是认识复杂现象过程中使用的思维 ...
相关推荐
AI面相分析小程序是一款基于人工智能技术的面相分析应用,后端采用PHP代码和MySQL数据库开发。该小程序可以通过上传用户的面部照片,进行面相分析,分析用户的性格、健康、财运等方面的特征,为用户提供面相分析报告...
软件工程实践案例分析+报告(微信小程序+mysql数据库+web后台管理).zip软件工程实践案例分析+报告(微信小程序+mysql数据库+web后台管理).zip软件工程实践案例分析+报告(微信小程序+mysql数据库+web后台管理)....
这个小程序设计的目标是为了方便用户对数据库备份进行管理和分析,确保数据的安全性和可用性。 在数据库管理中,备份通常有全备、增量备和差异备份等多种类型。全备份是完全复制所有数据库的数据,而增量备份只复制...
微信小程序毕业设计,微信小程序课程设计,基于微信小程序开发的,含有代码注释,新手也可看懂,可作为毕业设计,课程设计。 包含:项目源码、数据库脚本、部署说明等,该项目可以作为课程设计使用,前后端代码都在...
【微信小程序互动打卡小程序源码数据库】是一个针对微信平台开发的轻量级应用程序,主要用于实现用户之间的互动打卡功能。此项目适用于毕业设计、教学实践或个人项目开发,它结合了微信小程序的技术栈与数据库管理,...
在这个名为“一个MFC数据库编程(ODBC)小程序”的项目中,我们将深入探讨如何利用MFC和ODBC技术进行数据库操作。 首先,MFC通过CDatabase类提供了对ODBC接口的封装,使得开发者可以使用C++的对象模型来操作数据库。...
微信小程序是一种轻量级的应用开发平台,主要用于在微信内运行应用程序,无需下载安装即可使用。...通过分析和实践这个项目,可以深入了解微信小程序的API使用、Servlet的请求处理机制以及数据库的连接与操作。
微信小程序项目实战,微信小程序课程设计,基于微信小程序开发的,含有简单代码注册,下载下来简单部署即可使用。 包含:项目源码、数据库脚本、部署说明等,该项目可以作为课程设计使用,前后端代码都在里面。 ...
该资源包包含的是一个完整的网络小说平台的源代码,涵盖了小程序的前端、后端以及数据库相关的文件。这个项目对于想要学习或开发类似应用的IT从业者来说,是一个宝贵的实践材料。 首先,我们要关注的是"前端"部分。...
毕业设计: 基于小程序的精准扶贫数据收集(源码 + 数据库 + 说明文档) 第2章 系统分析 3 2.1 开发工具及技术 3 2.1.1 系统开发环境 3 2.1.2 Mysql数据库简介 3 2.1.3 微信小程序开发者工具 3 2.2 系统可行性分析 3 ...
在本文中,我们将深入探讨“小程序云开发云函数数据库活动报名”这一主题,这涉及到微信小程序的云开发技术,以及如何使用云函数和数据库来实现活动报名功能。首先,我们来了解一下微信小程序的基础知识。 微信小...
以图数据库为例,虽然在整体数据库市场中占比较小,但其在特定领域的应用,如社交网络分析、推荐系统和欺诈检测等,表现出极高的潜力。Neo4j作为图数据库的领头羊,以其强大的图形建模能力和高性能在业界享有盛誉。...
Java小程序+access数据库是开发一个简单的学生成绩管理系统的核心技术组合。这个系统是为初学者设计的,旨在帮助他们理解如何使用Java编程语言与数据库进行交互,以实现数据的存储、查询和管理。 首先,Java是一种...
源码数据库包含了整个小程序的开发资源,是理解并进一步扩展这个小程序的关键。 1. **微信小程序开发**:微信小程序的开发环境基于腾讯自家的开发工具WeChat Developer Tools,它提供了代码编辑、预览、调试和发布...
在这个“微信小程序医院预约挂号小程序源码数据库”中,我们可以深入探讨以下几个关键知识点: 1. **微信小程序开发**:微信小程序采用的是微信自己的开发框架WXML(WeiXin Markup Language)和WXSS(WeiXin Style ...
根据提供的文件信息,本文主要探讨了基于GPS的家教微信小程序的数据库分析与设计。通过这份文档,我们可以了解到开发一个家教微信小程序所需关注的关键数据库设计原则、实现功能、市场需求分析以及微信小程序的应用...
描述中的信息与标题一致,再次确认了这是关于微信小程序的源码和数据库,特别是针对在线阅读功能的实现。这意味着源码可能包括了用户界面设计、书籍数据管理、阅读体验优化等方面的内容。 【标签解析】 标签“毕业...
学习者可以通过分析和运行这个程序,理解数据库查询的原理,并掌握如何在实际环境中实现这些查询。同时,提供的辅助文件如Readme和说明文档可以帮助用户更好地理解和使用这个程序,从而提升他们的数据库应用技能。
这篇论文主要讨论了微信小程序二手物品交易小程序的设计和实现,涵盖了多个方面的知识点,包括微信小程序的概念和特点、开发技术、需求分析、系统设计思想、数据库设计、小程序的测试和维护等。
"微信小程序精准扶贫数据收集小程序平台源码数据库论文" 微信小程序精准扶贫数据收集小程序平台源码数据库论文是基于微信小程序开发的一款精准扶贫数据收集小程序平台的设计和实现。该小程序平台利用微信小程序的...