`
jsx112
  • 浏览: 315315 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【解决问题】完成从Mysql到SQLite数据库的整体迁移

 
阅读更多

若要实现成功迁移要保证:

1.服务器端创建Mysql数据库的时候要讲究 1, 不要加注记(因为我的java程序没有去处理,注记也叫注视) 2、编码为UTF-8

2.利用工具生成.sql文件.需要更改的地方有:

                       

1.  SET FOREIGN_KEY_CHECKS=0;  该句需要删除

2. .sql文件定义主键是:

CREATE TABLE `dishes` (

  `id` int(11) NOT NULL AUTO_INCREMENT,….. ,PRIMARY KEY (`id`));

在SQLite中只要写int(11) PRIMARY KEY NOT NULL 即可实现autoincrement

3.       ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8 这句话不能要

4.       COMMENT (注记) 之后的内容,包括它都不能要

 

举个例子吧

/*
MySQL Data Transfer
Source Host: 192.168.1.151
Source Database: test
Target Host: 192.168.1.151
Target Database: test
Date: 2011-8-31 18:00:18
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for dishes
-- ----------------------------
DROP TABLE IF EXISTS `dishes`;
CREATE TABLE `dishes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `d_enname` varchar(255) NOT NULL,
  `d_name` varchar(255) NOT NULL,
  `d_price` float NOT NULL,
  `d_image` varchar(255) DEFAULT NULL,
  `d_taste` varchar(255) NOT NULL,
  `d_cook` varchar(255) NOT NULL,
  `d_spiciness` int(11) NOT NULL DEFAULT '0',
  `d_calories` int(11) NOT NULL DEFAULT '0',
  `d_time` int(11) NOT NULL DEFAULT '0',
  `mc_id` int(11) NOT NULL,
  `mt_id` int(11) NOT NULL,
  `mit_id` int(11) NOT NULL,
  `d_ingredients` varchar(255) NOT NULL,
  `r_id` int(11) DEFAULT '0',
  `version_id` int(11) DEFAULT '0',
  `d_content` varchar(255) DEFAULT NULL,
  `discount_price` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8;

 

红色的部分,包括倒数第三行那个"," 都需要删掉或者修改的。改动以后的结果是:

/*
MySQL Data Transfer
Source Host: 192.168.1.151
Source Database: test
Target Host: 192.168.1.151
Target Database: test
Date: 2011-8-31 18:00:18
*/

-- ----------------------------
-- Table structure for dishes
-- ----------------------------
DROP TABLE IF EXISTS `dishes`;
CREATE TABLE `dishes` (
  `id` int(11) PRIMARY KEY NOT NULL,
  `d_enname` varchar(255) NOT NULL,
  `d_name` varchar(255) NOT NULL,
  `d_price` float NOT NULL,
  `d_image` varchar(255) DEFAULT NULL,
  `d_taste` varchar(255) NOT NULL,
  `d_cook` varchar(255) NOT NULL,
  `d_spiciness` int(11) NOT NULL DEFAULT '0',
  `d_calories` int(11) NOT NULL DEFAULT '0',
  `d_time` int(11) NOT NULL DEFAULT '0',
  `mc_id` int(11) NOT NULL,
  `mt_id` int(11) NOT NULL,
  `mit_id` int(11) NOT NULL,
  `d_ingredients` varchar(255) NOT NULL,
  `r_id` int(11) DEFAULT '0',
  `version_id` int(11) DEFAULT '0',
  `d_content` varchar(255) DEFAULT NULL,
  `discount_price` float DEFAULT NULL);

这样的.sql文件可以使用SQLite Expert 直接导入sql文件(前提是你已经自己创建了一个数据库).

OK,那些表已经完全迁移过来了。

另外,附着我写的关于自动修改该.sql文件代码如下,(注意源文件要改名为test.sql,目标文件为result.sql,放在E盘下,当然自己可以手动去改)

import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileWriter;  
import java.io.InputStreamReader;  
  
public class ConvertScript {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        try {  
            read("E:/test.sql","E:/result.sql");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    public static void read(String sourcePath,String destionPath) throws Exception {  
        InputStreamReader read = new InputStreamReader (new FileInputStream(new File(sourcePath)), "UTF-8");   
        FileWriter fw = new FileWriter(new File(destionPath));  
        BufferedReader reader = new BufferedReader(read);  
        BufferedWriter writer = new BufferedWriter(fw);  
          
        String s = null;  
        StringBuilder sb = new StringBuilder();  
        while((s = reader.readLine()) != null) {  
            String replace = null;  
            String result = null;  
            if(s.contains("SET FOREIGN_KEY_CHECKS=0;")) {  
                replace = "SET FOREIGN_KEY_CHECKS=0;";  
                result = "\r\n";  
            } else if(s.contains("NOT NULL AUTO_INCREMENT")) {  
                replace = "NOT NULL AUTO_INCREMENT";  
                result = "PRIMARY KEY NOT NULL";  
            } else if(s.contains("PRIMARY KEY (`id`)")) {  
                replace = "";  
            } else if(s.contains("ENGINE=InnoDB AUTO_INCREMENT") || s.contains(") ENGINE=InnoDB DEFAULT CHARSET=utf8")) {  
                s = ");";  
            }   
              
            if(s.equals(");")) {  
                String resultStr = sb.toString();  
                sb = new StringBuilder();  
                sb.append(resultStr.substring(0, resultStr.lastIndexOf(",")));  
            }  
              
            if(replace != null && result != null)  
                s = s.replace(replace, result);  
            if(!"".equals(replace)) {  
                sb.append(s).append("\r\n");  
            }  
              
        }  
        System.out.println(sb.toString());  
        writer.write(sb.toString());  
        reader.close();  
        writer.close();  
          
    }  
      
}  

 

分享到:
评论

相关推荐

    pbootcms数据sqlite转mysql数据库

    标题 "pbootcms数据sqlite转mysql数据库" 涉及的是一个常见的数据库迁移过程,从SQLite数据库系统转换到MySQL数据库系统。这个过程在网站或应用的开发和维护中经常遇到,尤其是在更换数据库服务或者需要更强大的...

    Java代码 MySql导出到SqlLite

    【Java代码 MySql导出到SqlLite】是一种技术实践,它涉及到使用Java编程语言来实现一个功能,该功能能够将MySQL数据库中的数据高效地导出到SQLite数据库文件中。这一过程通常用于数据迁移、备份或者在不同环境之间...

    PyPI 官网下载 | sqlite3-to-mysql-1.4.5.tar.gz

    在进行数据库迁移时,需要注意的是,由于SQLite与MySQL之间可能存在数据类型不匹配的问题,`sqlite3-to-mysql`库会自动尝试进行适配。然而,某些特定的数据类型可能需要用户手动调整,例如SQLite的`TEXT`类型在MySQL...

    mysql2sqlite异构数据转.rar

    MySQL到SQLite的异构数据转换是一项常见的任务,特别是在Android开发中,由于SQLite是Android系统内置的轻量级数据库,而MySQL则常用于服务器端。这个压缩包文件“mysql2sqlite异构数据转.rar”提供了实现这种同步的...

    Qt4访问sqlite数据库.doc

    1. **免配置**:SQLite数据库作为一个独立的文件存在,只需将其通过FTP上传到服务器,即可开始使用,无需额外的服务器支持。 2. **备份简单**:由于数据库就是一个文件,备份只需复制这个文件即可。 3. **大容量**:...

    《Linux高级系统编程》教学教案—10SQLite数据库.pdf

    通过本章的学习,学生将能够熟练运用SQLite解决实际问题,为今后的Linux高级系统编程项目提供强大的数据存储支持。同时,理解SQLite的工作原理也有助于理解其他数据库系统,提升整体的数据库应用能力。

    集成sqlite的wordpress

    3. **便携性**:SQLite数据库文件可随WordPress安装文件一起复制,便于备份和迁移。 4. **资源消耗少**:相比于MySQL,SQLite占用更少的内存和CPU资源,对服务器硬件要求较低。 **集成SQLite的步骤** 1. **准备PDO...

    基于CI框架和sqlite数据库的开源CMS - 印趣通开源CMS

    1. **轻量级**:SQLite数据库体积小,无需额外服务器,易于部署和迁移。 2. **独立性**:可以嵌入到应用程序中,减少依赖,降低运维复杂性。 3. **事务支持**:支持ACID(原子性、一致性、隔离性和持久性)事务,...

    sqlite3迁移mysql可能遇到的问题集合

    在将SQLite3数据库迁移至MySQL的过程中,可能会遇到一系列问题,这些问题主要集中在语法差异、数据格式兼容性、特殊字符处理以及效率方面。以下是对这些问题的详细分析及解决方案: 1. **SQLite3特有的语句在MySQL...

    Go-migrate-在Golang中的数据库迁移处理

    它支持多种主流数据库系统,包括MySQL、PostgreSQL、Cassandra和SQLite,这使得它成为一个灵活且跨平台的解决方案。 首先,让我们详细了解Go-migrate的工作原理。数据库迁移通常涉及对数据库结构的变更,如添加或...

    Go-pravasan-Go编写的简单数据库迁移工具

    Go-pravasan是一款基于Go语言开发的轻量级数据库迁移工具,主要针对MySQL数据库,但开发者计划在未来扩展其兼容性,以支持Postgres、SQLite和MongoDB等其他流行数据库系统。在软件开发过程中,数据库迁移是至关重要...

    中文SQLite参考书册

    通过阅读这本“中文SQLite参考书册”,开发者可以深入理解SQLite的工作原理,学习如何高效地使用SQLite来设计和管理数据库,解决实际开发中的问题。无论你是初学者还是经验丰富的开发者,这本书都会是你宝贵的参考...

    WordPress插件sqlite-integration-181压缩包及使用说明

    1. 数据库迁移:如果你的网站已经在使用MySQL,转换到SQLite可能需要数据迁移。确保你有数据库备份,并使用合适的工具进行迁移,如PHP脚本或专门的数据迁移插件。 2. 兼容性:虽然大多数WordPress插件和主题与SQLite...

    pgloader异构迁移mysql到postgres

    pgloader作为一款强大的异构数据库迁移工具,特别适用于将MySQL数据库的数据迁移到PostgreSQL中。本文将详细介绍pgloader的安装、部署以及迁移过程,帮助你顺利进行数据库迁移。 一、pgloader安装与部署 pgloader...

    mysql数据工具(含密钥)

    综上所述,"mysql数据工具(含密钥)"中的Navicat是一个强大的数据库管理解决方案,它简化了MySQL的使用,提供了便捷的操作和丰富的功能,无论是数据库设计、数据管理还是性能优化,都是MySQL用户不可或缺的利器。...

    嵌入式数据库SQlite和JAVA

    嵌入式数据库正好解决了这一问题。它们的特点在于不需要独立运行的数据库引擎,而是通过程序直接调用API来实现数据的存取操作。这种设计不仅简化了部署流程,还显著减少了系统的占用空间。此外,嵌入式数据库的体积...

    DBDBMigration .bd文件 sqllite文件转换成其他数据库格式工具例:sql server 2008

    然而,有时我们需要将这些SQLite数据库迁移到更复杂的数据库系统,如SQL Server 2008,这是一个功能强大的企业级数据库管理系统,适合大型应用程序和多用户环境。或者,我们可能需要将数据导入到MySQL,一个流行的...

    PHP访问数据库ppt课件.ppt

    在本书的第11.5节中为读者介绍了SQLite数据库,与MySQL相比SQLite数据库使用更为方便。因为其不需要配置、不需要安装也不需要管理员,只需要提供一个数据库文件即可。而且SQLite的迁移也更为方便,只需要把相关的...

    Phinx一个数据库迁移管理库

    Phinx支持多种数据库系统,包括MySQL、PostgreSQL、SQLite和SQL Server等,这使得它成为一个非常通用的解决方案。通过使用Phinx,开发者可以在数据库层面进行版本控制,例如创建新的表、修改已有表的结构、添加索引...

    Python的Flask框架与数据库连接的教程

    为了解决这一问题,教程介绍了SQLAlchemy-migrate工具,这是一个数据库迁移的解决方案,允许开发者在数据库结构变更时进行版本控制,而不需要手动迁移数据。 在配置部分,教程指导我们如何配置Flask应用程序使用...

Global site tag (gtag.js) - Google Analytics