若要实现成功迁移要保证:
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();
}
}
分享到:
相关推荐
sqlite数据库转mysql数据库
Wordpress改SqLite数据库操作。解决服务器放多个WP站数据库资源占用过大问题。内附一些插件,及具体操作办法
SQlite数据库工具 供比较两个SQLite数据库所用。
关于Sqlite的所有操作已经单独创建了专门的跨平台【.NETCore3.1】类库包含相应的帮助类,可以直接生成后拿到任何项目中直接使用,高效简单,省去了从头开发Sqlite数据库的时间,将更多的精力用于业务内容;...
SQLite数据库加密解密小工具,只用于.Net中使用SQLite时的加密和加密
php读取SQLite数据库, php读取SQLite数据库,php读取SQLite数据库
前情提要:Android 数据库(SQLite) 【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】 https://blog.csdn.net/weixin_44949135/article/details/105955663 Android ...
最简单实用的数据库连接,及对数据库的读写操作,包括SqlServer,MySQL和SQlite三种数据库的操作。简单实用,非常有价值。
sqlite数据库迁移到mysql数据库sqlite迁移到mysql sqlitetomysql
能得找bug找了大半天,但是还是坚持的心态把问题给解决了,比如需要哪几个文件,需要sqlite3.dll、sqlite3.lib、sqlite3i.h、sqlite3.hDbsqlite.h、Dbsqlite.cpp这些都是已经封装好的,把这些文件发到工程的同一目录...
Sqlite数据库加密、解密工具,主要是用于进行给Sqlite数据库进行加密,修改密码的工具
Qt中SQlite数据库加密SqliteCipher 操作实例,打开多个数据库,附着数据库跨库查询, 对应说明:https://blog.csdn.net/woguanni/article/details/120524602
Android实验报告Sqlite数据库操作.pdf
linux下 连接sqlite数据库以及mysql的使用方法 附有代码
SQLITE数据库查询时中文乱码;
SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库Oracle、MySQL、SQLServer之间的增量的、双向的数据同步功能。在文章中对SQLite DBSync 的体系结构、...
sqlite数据库文件经多次添加删除操作后 文件占用磁盘空间过大 c++压缩文件代码 sqlite数据库文件经多次添加删除操作后 文件占用磁盘空间过大 c++压缩文件代码 测试调用TestFunction.h文件 bool commit_vacuum...
本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下: 这里演示读写数据库并在窗体(Form)中显示其数据,其方式为: 读: Database(SQLite) -> DataAdapter -> DataSet -> ...
delphi7用ASGSQlite3访问sqlite数据库实例: 1、用aducom sqlite3连接数据库,操作非常简单,跟用ado访问一样 2、用Navicat制作数据库,显示正常,但数据库中是乱码,不影响程序运行时的显示。 3、支持在设计时显示...
最好用的SQLite数据库打开工具,找了好久才找到,以是上传资源共享出来以便大家下载