java怎么复制别人的数据库_java-如何在不使用Apache DDLUtils的情况下使用JDBC将模式从一个数据库复制到另一个数据库?...

我在MySQL中有一个数据库,我想以编程方式在FileMaker Pro中创建所有相同的表和字段.我可以使用JDBC自己完成此操作,但我希望已经有了可以执行此操作的库.

我研究了来自Apache的DDLUtils,但无法弄清楚如何构建它(它在构建系统中使用Maven,尝试构建时会出现致命错误).

解决方法:

我自己编写了代码,但事实证明并没有那么难.这是为了生成MySQL模式.我尚未测试FileMaker,但应该非常相似.

package com.prosc.db;

import java.sql.DatabaseMetaData;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.HashSet;

import java.util.Set;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

* Created by IntelliJ IDEA. User: jesse Date: 11/21/11 Time: 1:34 PM

*/

public abstract class SchemaGenerator {

private static final Logger log = Logger.getLogger( SchemaGenerator.class.getName() );

public String createDatabaseSql( String databasename ) {

return "CREATE DATABASE " databasename;

}

/** This should return the String required to create a new table

* @param tableName The name of the table in the source database. This is also used as the name of the table to generate.

* @param metaData A JDBC metadata object from the source database (where the schema is being created from, not where it's being written to)

* */

public String createTableSql( DatabaseMetaData metaData, String tableName ) throws SQLException {

ResultSet columnsMetadata = metaData.getColumns( null, null, tableName, null );

Set pkNames = new HashSet(3);

try {

ResultSet pkResultSet = metaData.getPrimaryKeys( null, null, tableName );

while( pkResultSet.next() ) {

pkNames.add( pkResultSet.getString( 4 ) );

}

} catch( Exception e ) {

log.log( Level.WARNING, "Could not determine primary keys; will need to be manually configured", e );

}

StringBuffer sql = new StringBuffer();

sql.append( "CREATE TABLE " tableName " (" );

String delim = "";

while( columnsMetadata.next() ) {

sql.append( delim );

delim = ", ";

String columnName = columnsMetadata.getString( 4 );

String sqlTypename = columnsMetadata.getString(6);

int typeCode = columnsMetadata.getInt( 5 );

String targetTypename = targetTypename( sqlTypename, typeCode );

if( targetTypename == null ) {

log.info( "Unknown typename for type code " typeCode "; SQL type name is " sqlTypename );

continue;

}

int columnSize = columnsMetadata.getInt( 7 );

boolean nullsProhibited = "NO".equalsIgnoreCase( columnsMetadata.getString(18) );

int precision = columnsMetadata.getInt( 9 );

appendFieldCreationClause( sql, columnName, targetTypename, columnSize, precision, nullsProhibited, pkNames.contains( columnName ), metaData.getIdentifierQuoteString(), columnsMetadata );

}

sql.append( ")" );

return sql.toString();

}

public void appendFieldCreationClause( StringBuffer buffer, String columnName, String targetTypename, int columnSize, int precision, boolean nullsProhibited, boolean isPrimaryKey, String identifierQuoteString, ResultSet columnMetaData ) {

if( isPrimaryKey ) {

targetTypename = "INT";

precision = 0;

}

buffer.append( identifierQuoteString columnName identifierQuoteString " " targetTypename );

if( columnSize > 0 ) {

buffer.append( "(" columnSize );

if( precision > 0 ) {

buffer.append( "," precision );

}

buffer.append( ")" );

}

if( "id".equalsIgnoreCase( columnName ) ) {

buffer.append( " UNIQUE" );

}

if( nullsProhibited ) {

buffer.append( " NOT NULL" );

}

if( isPrimaryKey ) {

buffer.append( " AUTO_INCREMENT" );

buffer.append( " PRIMARY KEY" );

}

}

public String targetTypename( String sqlTypename, int typeCode ) {

return sqlTypename;

}

}

来源:https://www.icode9.com/content-2-497401.html

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

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

相关文章

iptables 基础

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如上图所示,如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包…

jqgrid学习(1)

grid_id:表格id options:参数 参数描述默认值gridModel当为ture我们会使用colModel中的属性构造查询条件,所用到的参数:name, index, edittype, editoptions, search.还有一个参数:defval:查询条件的默认值&#xff1b…

Oracle11g远程连接配置 visual studio 2003

服务器端 配置:oracle11g R2 x64 1.设置监听 a.启动栏 -> 开始 -> 程序 -> Oracle-OraDb11g_home1 -> 配置和移植工具 -> Net Manager b.Oracle Net 配置 -> 本地 -> 监听程序 -> LISTENER ,查看是否有本地地址在监听&#xff…

JAVA思维导图学习笔记_8张思维导图,55天学习笔记,帮你入门JavaSE

学完了Java中的基础语法,也就是JavaSE。对其做了一个详细的梳理,也便于以后回顾。其中有些知识点被自己遗漏了,比如正则表达式这些,只能以后找机会补上了。01前言对于计算机基础知识的了解、以及Java相关的软件安装。相关笔记02基…

Laravel笔记记录

1.获取当前控制器和action名称 request()->route()->getAction()转载于:https://www.cnblogs.com/fpcing/p/10935867.html

使用MemoryStream和FileStream

使用MemoryStream和FileStream编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。在.NET中,使用抽象基类System.IO.Stream代表流,它提供Read和Wr…

java servlet异步_厉害了,Servlet3的异步处理机制

Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下。主要增加了以下特性:1、异步处理支持2、可插性支持3、注解支持,零配置,可不用配置web.xml...异步处理是什么鬼?直接操起键盘干。WebServ…

WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列...

WordPress后台默认是不显示文章、分类等信息ID的&#xff0c;查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现&#xff1a; <?php /** *为WordPress后台的文章、分类等显示ID From wpdaxue.com …

进程调试--进程启动VS自动附加

程序启动VS自动附加到进程调试 1、 打开注册表regedit 2、 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file execution options 3、 新建QQ.exe【需要调试的进程名】 4、 右键修改字符串值 5、 F2修改新生成的默认值----debugger 6、右键debugger…

[转]20年来我得到的20条编程经验

1、解决问题时估算你所需要的时间。Cmon,admit it! 我曾见过一些程序员为了解决一个特殊的问题而连续坐在显示器前面8小时&#xff0c;我会像下一个会成为这样的程序员一样感到内疚。为自己定一个时间表吧&#xff0c;每1小时&#xff0c;30分钟&#xff0c;甚至15分钟。如果在…

Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1->2->3->4->5->NULL and k 2,return 4->5->1->2->3->NULL. 注意下k>size的情况&#xff0c;即倒数的k%size个。 代码&#xff1a; c…

C#4.0和VS2010新特性(三)

VS2010之所以那么强大&#xff0c;究其原因是其背后有着强大的C#4.0作为后台支撑。和以往的所有版本相比&#xff0c;C#4.0的动态性大大增强——dynamic就是一个非常明显的例子&#xff1a;&#xff08;一&#xff09;dynamic初探&#xff1a; 以前因为某些特殊原因&#xff0c…

java spark环境配置文件_JAVA, SCALA, HADOOP, SPARK里的JAVA_HOME和环境变量设置

/etc/profile里添加的内容&#xff1a;export JAVA_HOME/jdkexport HADOOP_HOME/hadoopexport SCALA_HOME/scalaexport SPARK_HOME/sparkexport PATH$PATH:$JAVA_HOME/binexport PATH$PATH:$SPARK_HOME/binexport PATH$PATH:$HADOOP_HOME/binexport PATH$PATH:$SCALA_HOME/bine…

#20175201 实验五 网络编程与安全

一、实验五 网络编程与安全-1 1.实验要求&#xff1a; 两人一组结对编程&#xff1a; &#xff08;1&#xff09;参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA &#xff1b; &#xff08;2&#xff09;结对实现中缀表达式转后缀表达式的功能 MyBC.java&#xff1b…

轻轻松松,一键获取3000个外链

轻轻松松&#xff0c;一键获取3000个外链 http://report.loganrockmarketing.com/backlinker/idx.html 打开以上网址&#xff1a; 在方框里输入你要推广的网址&#xff08;不要加前面的http://) 然后点击start/continue backlinking按钮 接下来&#xff0c;坐享其成吧。转载于:…

Scala学习思维导图

转载于:https://blog.51cto.com/thunderkeg/1605365

使用git上传代码到github远程仓库

一、新建代码库注册好github登录后&#xff0c;首先先在网页上新建代码库。 点击右上角“&#xff0b;”→New repository 进入如下页面&#xff1a;按照要求填写完成后&#xff0c;点击按钮创建代码库创建成功。 接下来我们查看一下刚刚创建好的代码库&#xff0c;点击右上角的…

java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...

首先&#xff0c;在开始搭建MyEclipse的开发环境之前&#xff0c;还有三步工具的安装需要完成&#xff0c;只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建。1、安装工具第一步&#xff0c;下载并安装JDK&#xff0c;到官网上下载安装即可&#xff0c;之后需…

对于大型公司项目平台选择j2ee的几层认识

对于大型公司项目平台选择j2ee的几层认识&#xff08;一&#xff09; 对于大型公司项目平台选择j2ee的几层认识&#xff08;二&#xff09; 对于大型公司项目平台选择j2ee的几层认识(三) 对于大型公司项目平台选择j2ee的几层认识(四)转载于:https://www.cnblogs.com/Wolves/arc…

当前项目规划

3.2、当前项目规划 完成项目最基本的用户权限管理&#xff0c;即添加用户&#xff0c;添加角色&#xff0c;用户登录后根据权限的不同获取不同的菜单。转载于:https://www.cnblogs.com/seem111111/p/10945125.html