`
hyw520110
  • 浏览: 218624 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Mysql数据库导出导入命令:

    博客分类:
  • sql
阅读更多
解决的问题:要把原始数据库中的数据导出到其它的数据库表中去。

原始数据库可能是MYSQL, SQLSERVER或者其它的数据库,这些数据库的Schema是根据实体定义文件以及类型定义文件的。

数据要导入的数据库是HSQLDB,现有的ORM工具要求先建立对象到数据库结构的隐射,以及需要建立配置环境才能实现将对象隐射到数据库中的表结构中去。

因此,要解决数据导出导入问题,首先,要根据实体定义文件生成HSQL DB的Schema,执行建表操作,然后再把从原数据库中选择出来的实体插入到HSQL DB数据库中去。

因此,要解决的问题主要有两个:
1. 自动建立HSQL DB Schema
2. 自动将实体存储到HSQL DB

约束条件:
1. HSQL DB Schema和原数据库的Schema应该是类似的,能够兼容从原数据库中导入来的数据。数据域的名称是一样的。
2. 实体存储的时候可以借鉴ORM存储的方式。

解决技术:
1. Schema自动生成。新建HSQLDB.xml数据类型的映射文件,新建HSQL DB的Schema(create table)的语法,根据实体定义文件生成HSQL DB对应的Schema。

2. 实体存储。参考实体工具存储实体的方式。将实体看成JAVA BEAN,由于实体定义文件中定义了实体的域值。可以根据数据类型定义文件找到实体的域值所对应的JAVA TYPE。利用TYPE的nullSafeSet使得可以安全的设置PreparedStatement所对应的INSERT语句的参数。我最头疼的
Java代码 复制代码
  1. public void setString(PreparedStatement ps, int index, String value) throws SQLException{   
  2.     if(null!=value)   
  3.         ps.setString(index, value);   
  4.     else  
  5.         ps.setNull(index, Types.VARCHAR);   
  6. }   
  7.         public void setInteger(PreparedStatement ps, int index, Integer value) throws SQLException{   
  8.     if(null!=value)   
  9.         ps.setInt(index, value);   
  10.     else  
  11.         ps.setNull(index, Types.INTEGER);   
  12. }  
	public void setString(PreparedStatement ps, int index, String value) throws SQLException{
		if(null!=value)
			ps.setString(index, value);
		else
			ps.setNull(index, Types.VARCHAR);
	}
        	public void setInteger(PreparedStatement ps, int index, Integer value) throws SQLException{
		if(null!=value)
			ps.setInt(index, value);
		else
			ps.setNull(index, Types.INTEGER);
	}

通过
Java代码 复制代码
  1. property.nullSafeSet(ps, PropertyUtils.getProperty(element, fields[i].getName()), i+1);  
property.nullSafeSet(ps, PropertyUtils.getProperty(element, fields[i].getName()), i+1);


调用Concrete Type中的nullSafeSet就解决了这个问题,真的是太爽了。

两个问题都解决了。最后看一下我的设计,自认为还比较优美:)
AbstractDataExporter是抽象的数据导出类,有两个Template模板方法,定义了数据导出的步骤。具体的数据导出类,只要实现抽象方法就可以了,具体类相当简单。

AbstractDataExporter借助SchemaGenerator来完成Schema生成操作:),顺便也完成了Drop Table语句的生成,以及INSERT 语句的生成。这些方法子类都不需要重写。

Java代码 复制代码
  1. package ...   
  2. import ...   
  3.   
  4. /**  
  5.  * 抽象的数据导出器。  
  6.  * 将原始数据库中的数据,导出到HSQLDB中的一个原始数据库中去。  
  7.  * @author wanzhigang  
  8.  *  
  9.  */  
  10. public abstract class AbstractDataExporter {   
  11.   
  12.     protected String entityName; //数据库表所对应的实体名称    
  13.        
  14.     protected Connection connection;   
  15.        
  16.     public AbstractDataExporter(Connection connection, String entityName){   
  17.         this.connection = connection;   
  18.         this.entityName = entityName;   
  19.     }   
  20.        
  21.     /**  
  22.      * 对应的HSQL DB表的Schema。  
  23.      * @return  
  24.      */  
  25.     public String getSchema(){   
  26.         return SchemaGenerator.instance.generateHSQLSchema(entityName);   
  27.     }   
  28.        
  29.     /**  
  30.      * 对应的HSQL DB表的Drop Table语句。  
  31.      * @return  
  32.      */  
  33.     public String getDropTableSQL(){   
  34.         return SchemaGenerator.instance.generateDropTableSQL(entityName);   
  35.     }   
  36.        
  37.     /**  
  38.      * 对应的HSQL DB表的Insert语句。  
  39.      * @return  
  40.      */  
  41.     public String getInsert() {   
  42.         return SchemaGenerator.instance.generateInsertSQL(entityName);   
  43.     }   
  44.        
  45.     /**  
  46.      * 将数据导出到HSQLDB中去。  
  47.      * @throws DataExporterException  
  48.      */  
  49.     protected void exportData2HSQLDBTemplate(Integer[] projectIds) throws DataExporterException{   
  50.         if(!createHSQLTable()) throw new DataExporterException("CreateHSQLTable Error");           
  51.         List orginalDataList = importDataTemplate(projectIds);   
  52.         if(null==orginalDataList) throw new DataExporterException("ReadOrginalData Error");   
  53.         if(!insert2HSQLDB(orginalDataList)) throw new DataExporterException("InsertInto HSQLDB Error");   
  54.     }   
  55.   
  56.     /**  
  57.      * 将原始数据的实体插入到HSQLDB中去。  
  58.      * @param orginalDataList  
  59.      * @param insert  
  60.      * @return   
  61.      */  
  62.     protected boolean insert2HSQLDB(List orginalDataList){   
  63.         try {   
  64.             connection.setAutoCommit(false);   
  65.             for (Iterator iter = orginalDataList.iterator(); iter.hasNext();) {   
  66.                 BaseObject element = (BaseObject) iter.next();   
  67.                 PreparedStatement ps = connection.prepareStatement(getInsert());   
  68.                 if(!setInsertParameter(ps, element)) return false;   
  69.                 if(-1 == ps.executeUpdate()){   
  70.                     Debug.logError("Insert into HSQLDB error");   
  71.                     return false;   
  72.                 }   
  73.                 ps.close();   
  74.             }   
  75.             connection.commit();   
  76.             return true;   
  77.         } catch (SQLException e) {   
  78.             Debug.logError("SQL Exception in connect to HSQL DB");   
  79.             try {   
  80.                 connection.rollback();   
  81.             } catch (SQLException e1) {   
  82.                 e1.printStackTrace();   
  83.             }   
  84.             return false;   
  85.         }   
  86.     }   
  87.   
  88.     /**  
  89.      * 设置插入到HSQL DB数据库中INSERT语句对应的?的数值。  
  90.      * @param ps   
  91.      * @param element 要插入的数据实体  
  92.      */  
  93.     private boolean setInsertParameter(PreparedStatement ps, BaseObject element) {   
  94.         Entity entity =  (Entity) SchemaGenerator.instance.getEntityMap().get(entityName);   
  95.         Map fieldTypeDefMap = SchemaGenerator.instance.getFieldTypeDefMap();   
  96.         Field[] fields = entity.getField();   
  97.         for (int i = 0; i < fields.length; i++) {   
  98.             FieldTypeDef fieldTypeDef = (FieldTypeDef)fieldTypeDefMap.get(fields[i].getType());   
  99.             try {   
  100.                 PropertyMetaData property = new PropertyMetaData(fields[i].getName(),    
  101.                         TypeFactory.getType(fieldTypeDef.getJavaType())   
  102.                 );                 
  103.                 property.nullSafeSet(ps, PropertyUtils.getProperty(element, fields[i].getName()), i+1);        
  104.             } catch (TypeNotSupportException e) {   
  105.                 Debug.logError("Type Not Support.");   
  106.                 return false;   
  107.             }catch (JDBCException e) {   
  108.                 Debug.logError("JDBC Exception.");   
  109.                 return false;   
  110.             }catch (IllegalAccessException e) {   
  111.                 Debug.logError("IllegalAccessException. ");   
  112.                 return false;   
  113.             } catch (InvocationTargetException e) {   
  114.                 Debug.logError("InvocationTargetException.");   
  115.                 return false;   
  116.             } catch (NoSuchMethodException e) {   
  117.                 Debug.logError("NoSuchMethodException.");   
  118.                 return false;   
  119.             }          
  120.         }   
  121.         return true;   
  122.     }   
  123.   
  124.     /**  
  125.      * 从原始数据库中读取原始数据。是根据HQL来构造导出语句,还是根据Entity工具的Criteria来构造导出语句,应该由用户来选择。  
  126.      * @param projectIds 项目ID  
  127.      * @param select Select语句  
  128.      * @return 原始数据的实体列表  
  129.      */  
  130.     protected List importDataTemplate(Integer[] projectIds){   
  131.         String hql = createSelectHQL(projectIds);   
  132.         HqlReturnBuilder hqlRb = new HqlReturnBuilder(hql);   
  133.         try {   
  134.             return RecordContainer.doSelect(new Criteria(), hqlRb);   
  135.         } catch (QueryException e) {   
  136.             e.printStackTrace();   
  137.             return null;   
  138.         }   
  139.     }   
  140.   
  141.     /**  
  142.      * 构造从原始数据库中取数据的SELECT语句。  
  143.      * @param projectIds  
  144.      * @return  
  145.      */  
  146.     protected abstract String createSelectHQL(Integer[] projectIds);   
  147.   
  148.     /**  
  149.      * 创建HSQL表。  
  150.      * @return  
  151.      */  
  152.     protected boolean createHSQLTable(){   
  153.         PreparedStatement ps;   
  154.         try {   
  155.             ps = connection.prepareStatement(getDropTableSQL());   
  156.             ps.executeUpdate();   
  157.             ps.close();   
  158.             ps = connection.prepareStatement(getSchema());   
  159.             ps.executeUpdate();   
  160.             ps.close();   
  161.             return true;   
  162.         } catch (SQLException e) {   
  163.             e.printStackTrace();   
  164.             return false;   
  165.         }          
  166.     }   
  167. }  
package ...
import ...

/**
 * 抽象的数据导出器。
 * 将原始数据库中的数据,导出到HSQLDB中的一个原始数据库中去。
 * @author wanzhigang
 *
 */
public abstract class AbstractDataExporter {

	protected String entityName; //数据库表所对应的实体名称	
	
	protected Connection connection;
	
	public AbstractDataExporter(Connection connection, String entityName){
		this.connection = connection;
		this.entityName = entityName;
	}
	
	/**
	 * 对应的HSQL DB表的Schema。
	 * @return
	 */
	public String getSchema(){
		return SchemaGenerator.instance.generateHSQLSchema(entityName);
	}
	
	/**
	 * 对应的HSQL DB表的Drop Table语句。
	 * @return
	 */
	public String getDropTableSQL(){
		return SchemaGenerator.instance.generateDropTableSQL(entityName);
	}
	
	/**
	 * 对应的HSQL DB表的Insert语句。
	 * @return
	 */
	public String getInsert() {
		return SchemaGenerator.instance.generateInsertSQL(entityName);
	}
	
	/**
	 * 将数据导出到HSQLDB中去。
	 * @throws DataExporterException
	 */
	protected void exportData2HSQLDBTemplate(Integer[] projectIds) throws DataExporterException{
		if(!createHSQLTable()) throw new DataExporterException("CreateHSQLTable Error");		
		List orginalDataList = importDataTemplate(projectIds);
		if(null==orginalDataList) throw new DataExporterException("ReadOrginalData Error");
		if(!insert2HSQLDB(orginalDataList)) throw new DataExporterException("InsertInto HSQLDB Error");
	}

	/**
	 * 将原始数据的实体插入到HSQLDB中去。
	 * @param orginalDataList
	 * @param insert
	 * @return 
	 */
	protected boolean insert2HSQLDB(List orginalDataList){
		try {
			connection.setAutoCommit(false);
			for (Iterator iter = orginalDataList.iterator(); iter.hasNext();) {
				BaseObject element = (BaseObject) iter.next();
				PreparedStatement ps = connection.prepareStatement(getInsert());
				if(!setInsertParameter(ps, element)) return false;
				if(-1 == ps.executeUpdate()){
					Debug.logError("Insert into HSQLDB error");
					return false;
				}
				ps.close();
			}
			connection.commit();
			return true;
		} catch (SQLException e) {
			Debug.logError("SQL Exception in connect to HSQL DB");
			try {
				connection.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			return false;
		}
	}

	/**
	 * 设置插入到HSQL DB数据库中INSERT语句对应的?的数值。
	 * @param ps 
	 * @param element 要插入的数据实体
	 */
	private boolean setInsertParameter(PreparedStatement ps, BaseObject element) {
		Entity entity =  (Entity) SchemaGenerator.instance.getEntityMap().get(entityName);
		Map fieldTypeDefMap = SchemaGenerator.instance.getFieldTypeDefMap();
		Field[] fields = entity.getField();
		for (int i = 0; i < fields.length; i++) {
			FieldTypeDef fieldTypeDef = (FieldTypeDef)fieldTypeDefMap.get(fields[i].getType());
			try {
				PropertyMetaData property = new PropertyMetaData(fields[i].getName(), 
						TypeFactory.getType(fieldTypeDef.getJavaType())
				);				
				property.nullSafeSet(ps, PropertyUtils.getProperty(element, fields[i].getName()), i+1);		
			} catch (TypeNotSupportException e) {
				Debug.logError("Type Not Support.");
				return false;
			}catch (JDBCException e) {
				Debug.logError("JDBC Exception.");
				return false;
			}catch (IllegalAccessException e) {
				Debug.logError("IllegalAccessException. ");
				return false;
			} catch (InvocationTargetException e) {
				Debug.logError("InvocationTargetException.");
				return false;
			} catch (NoSuchMethodException e) {
				Debug.logError("NoSuchMethodException.");
				return false;
			}		
		}
		return true;
	}

	/**
	 * 从原始数据库中读取原始数据。是根据HQL来构造导出语句,还是根据Entity工具的Criteria来构造导出语句,应该由用户来选择。
	 * @param projectIds 项目ID
	 * @param select Select语句
	 * @return 原始数据的实体列表
	 */
	protected List importDataTemplate(Integer[] projectIds){
		String hql = createSelectHQL(projectIds);
		HqlReturnBuilder hqlRb = new HqlReturnBuilder(hql);
		try {
			return RecordContainer.doSelect(new Criteria(), hqlRb);
		} catch (QueryException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 构造从原始数据库中取数据的SELECT语句。
	 * @param projectIds
	 * @return
	 */
	protected abstract String createSelectHQL(Integer[] projectIds);

	/**
	 * 创建HSQL表。
	 * @return
	 */
	protected boolean createHSQLTable(){
		PreparedStatement ps;
		try {
			ps = connection.prepareStatement(getDropTableSQL());
			ps.executeUpdate();
			ps.close();
			ps = connection.prepareStatement(getSchema());
			ps.executeUpdate();
			ps.close();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}		
	}
}


下面是子类的示例:代码很简单吧:)

Java代码 复制代码
  1. public class ProjectInfoExporter extends AbstractDataExporter {    
  2.     public ProjectInfoExporter(Connection connection) {   
  3.         super(connection,"ProjectInfo");   
  4.     }   
  5.            
  6.     @Override  
  7.     protected String createSelectHQL(Integer[] projectIds) {   
  8.         String selectHQL = "from ProjectInfo project where project.projectId = ";   
  9.         StringBuffer sb = new StringBuffer(selectHQL).append(projectIds[0]);   
  10.         if(projectIds.length == 1){   
  11.             return sb.toString();   
  12.         }else{   
  13.             for (int i = 1; i < projectIds.length; i++) {   
  14.                 sb.append("or project.projectId = ").append(projectIds[i]);   
  15.             }   
  16.             return sb.toString();   
  17.         }   
  18.                
  19.     }   
  20. }  
public class ProjectInfoExporter extends AbstractDataExporter {	
	public ProjectInfoExporter(Connection connection) {
		super(connection,"ProjectInfo");
	}
		
	@Override
	protected String createSelectHQL(Integer[] projectIds) {
		String selectHQL = "from ProjectInfo project where project.projectId = ";
		StringBuffer sb = new StringBuffer(selectHQL).append(projectIds[0]);
		if(projectIds.length == 1){
			return sb.toString();
		}else{
			for (int i = 1; i < projectIds.length; i++) {
				sb.append("or project.projectId = ").append(projectIds[i]);
			}
			return sb.toString();
		}
			
	}
}


SchemaGenerator:通过解析实体定义xml,以及数据类型定义xml来得到相关的Schema以及INSERT, DROP TABLE语句:)

Java代码 复制代码
  1. package ...   
  2. import ...   
  3.   
  4. /**  
  5.  * JOB:自动生成HSQL DB相关的Schema,  
  6.  * @author wanzhigang  
  7.  *  
  8.  */  
  9. public class SchemaGenerator {   
  10.        
  11.     private Map entityMap;   
  12.     private Map fieldTypeDefMap;   
  13.        
  14.     private final static String module = SchemaGenerator.class.getName();   
  15.        
  16.     public static SchemaGenerator instance = new SchemaGenerator();   
  17.        
  18.     private SchemaGenerator() {   
  19.         this.entityMap = initializeEntityMap();   
  20.         this.fieldTypeDefMap = initializeFieldTypeDefMap();   
  21.     }   
  22.                
  23.        
  24.     /**  
  25.      * 取得Entity Map。  
  26.      * @return  
  27.      */  
  28.     private Map initializeEntityMap(){   
  29.         return XMLModelEntityReader.getModelReader().getEntityCache();   
  30.     }   
  31.        
  32.     /**  
  33.      * 取得FieldTypeDef Map.  
  34.      * @return  
  35.      */  
  36.     private Map initializeFieldTypeDefMap(){   
  37.         return XMLModelFieldTypeReader.getModelFieldTypeReader().getFieldTypeCache();   
  38.     }   
  39.        
  40.     public Map getEntityMap() {   
  41.         return entityMap;   
  42.     }   
  43.        
  44.     public Map getFieldTypeDefMap() {   
  45.         return fieldTypeDefMap;   
  46.     }   
  47.        
  48.        
  49.     /**  
  50.      * @param entityName 实体名称,实体定义文件中写好的实体名称。  
  51.      * @return 实体定义的HSQL Schema  
  52.      */  
  53.     public String generateHSQLSchema(String entityName){   
  54.         if(null==entityMap.get(entityName)){   
  55.             Debug.logError("no corresponding entity.");   
  56.             return null;   
  57.         }else{   
  58.             return getCreateTableSQLForHSQLDB((Entity)entityMap.get(entityName));   
  59.         }   
  60.     }   
  61.        
  62.     /**  
  63.      * 生成Insert的SQL语句。  
  64.      * @param entityName  
  65.      * @return  
  66.      */  
  67.     public String generateInsertSQL(String entityName){   
  68.         if(null == entityMap.get(entityName)){   
  69.             Debug.logError("no corresponding entity.");   
  70.             return null;   
  71.         }else{   
  72.             return getCreateInsertSQL((Entity)entityMap.get(entityName));   
  73.         }   
  74.     }   
  75.        
  76.     public String generateDropTableSQL(String entityName){   
  77.         Entity entity = (Entity)entityMap.get(entityName);   
  78.         if(null == entity){   
  79.             Debug.logError("no corresponding entity.");   
  80.             return null;   
  81.         }   
  82.         StringBuffer sb = new StringBuffer("DROP TABLE ");   
  83.         sb.append(getTableName(entity));   
  84.         sb.append(" IF EXISTS;");   
  85.         return sb.toString();      
  86.     }   
  87.        
  88.     private String getCreateInsertSQL(Entity entity) {   
  89.         StringBuffer sb = new StringBuffer("INSERT INTO ");   
  90.         sb.append(getTableName(entity));   
  91.         sb.append(" VALUES (");   
  92.         for (int i = 0; i < entity.getField().length; i++) {   
  93.             sb.append(
分享到:
评论

相关推荐

    MYSQL 数据库导入导出命令

    MySQL 数据库导入导出命令是数据库管理员和开发者经常使用的命令,用于将 MySQL 数据库导出到文件中,以便备份、还原或迁移到其他服务器。下面将详细介绍 MySQL 数据库导入导出的命令和方法。 数据库备份 数据库...

    JAVA跨数据库导出导入数据:SQL2000 导入到 MYSQL(附件)

    总的来说,JAVA跨数据库导出导入数据是一个技术性强且需要细心操作的过程,涉及到多个环节和技能。"ManyConn"提供的解决方案,可能是对这些复杂步骤的一种简化和封装,帮助开发者更高效地完成数据迁移任务。

    linux下导入导出mysql数据库及其导出数据命令大汇总

    Linux 下 MySQL 数据库导入导出命令大汇总 Linux 作为一个广泛应用于服务器操作系统的平台,MySQL 作为一个流行的关系数据库管理系统,在 Linux 下的使用非常广泛。因此,掌握 Linux 下 MySQL 数据库的导入导出命令...

    mysql数据库的导入导出

    综上所述,MySQL数据库的导入导出操作,涉及到mysqldump工具和source命令的熟练使用,以及SQL语法中ALTER TABLE命令用于调整表结构。在操作过程中,还需要注意字符集的匹配问题,以及在多表查询时为派生表添加别名以...

    MySQL数据库导出与导入及常见错误解决.pdf

    mysqldump 命令用于将数据库导出到一个文件中,mysql 命令用于将备份的数据库文件导入到 MySQL 服务器中,source 命令用于将备份的数据库文件导入到 MySQL 服务器中。 例如,要备份名为 jluibmclub 的数据库,可以...

    linux系统下MySQL数据库的导入导出

    ### Linux系统下MySQL数据库的导入导出 在Linux环境下管理和操作MySQL数据库是非常常见的需求,尤其在数据迁移、备份以及恢复等场景中尤为重要。本文将详细介绍如何在Linux系统中进行MySQL数据库的导入与导出,包括...

    mariadb导入导出mysql数据库的脚本:无需手动创建数据库,直接新建数据库+导入表结构+插入记录

    标签“mysql msyql导出数据库”暗示了这个过程涉及到从MySQL数据库导出数据,并可能应用于MariaDB。MySQL和MariaDB是两个兼容性极高的开源关系型数据库管理系统,它们的SQL语法大体相同,因此一个适用于MySQL的脚本...

    MYSQL导入导出数据库命令

    当你有一个SQL文件并想将其内容导入到MySQL数据库中时,可以使用`mysql`客户端工具。假设你已经有了`mydatabase_backup.sql`文件,你可以使用以下命令来导入数据: ```bash mysql -u [username] -p[password] ...

    java调用mysql命令 导入导出数据库

    在Java编程中,有时我们需要对MySQL数据库进行导入和导出操作,这通常涉及到数据库的备份、迁移或数据恢复。在给定的标题“java调用mysql命令 导入导出数据库”中,我们可以理解为使用Java来执行MySQL的命令行工具,...

    mysql数据库导入与导出(mysqldump与mysql).doc

    例如,以下命令可以将整个数据库导出到一个 SQL 文件中:mysqldump -u 用户名 -p 数据库名 &gt; d:\database.sql。 4. mysql 介绍: mysql 是一个用来将 SQL 文件导入到 MySQL 数据库中的工具。mysql 命令可以将 SQL ...

    mysql数据库导入,导出方法

    #### 一、MySQL数据库导出方法 ##### 1. 准备工作 - **确认MySQL服务状态**:首先,需要确保MySQL服务已经启动。可以通过以下命令检查MySQL服务是否正在运行: ```shell net start mysql ``` 如果服务没有...

    MySQL数据库:数据的导入与导出.pptx

    * 导入:将 *.accdb 数据文件加载到 MySQL 数据库中。 MySQL 与 SQLServer 的导入与导出 MySQL 数据库与 SQLServer 数据库之间可以实现数据的导入与导出。 * 导出:将数据从 MySQL 源数据库复制到 SQLServer 中。...

    mysql数据导入导出

    另外一种方式是直接使用 `mysql` 命令进行数据导入: ```bash mysql -u 用户名 -p 密码 数据库名 脚本文件路径 ``` 例如,要将 `foo.sql` 文件中的数据导入到 `databasefoo` 数据库,可以执行: ```bash mysql -u...

    mysql导入导出库命令.txt

    以上就是关于MySQL数据库导入导出命令的详细介绍。通过这些命令,我们可以方便地备份和恢复数据库,这对于日常的数据库管理来说非常重要。希望这些信息能够帮助你在实际工作中更好地管理和维护MySQL数据库。

    MySQL数据库快速导入导出

    自己用JAVA做的第一个swing程序,用来快速导入导出MySQL数据库,导入整个库6万条数据只需要5秒钟,处女作 见笑了。 使用方法:需要系统支持JAVA环境并安装了MySQL,直接运行DBdump.jar,填好相应项,按步骤导入导出...

Global site tag (gtag.js) - Google Analytics