使用jdk进行数据迁移(sqlite迁移mysql)
直接粘贴代码

注意:rewriteBatchedStatements=true(加快连接速度)
package com.wbg; import org.omg.Messaging.SYNC_WITH_TRANSPORT; import java.sql.*;
import java.util.ArrayList;
import java.util.List; public class DBSQLite {
//驱动
static String DBDRIVERSQLITE="org.sqlite.JDBC";
//文件绝对地址
static String DBURLSQLITE="B:\\lagou.db";
static Connection CONNSQLITE;
static PreparedStatement PSTATSQLITE; //驱动
static String DBDRIVERMYSQL="com.mysql.jdbc.Driver";
//数据库
static String DBURLMYSQL="jdbc:mysql://localhost:3306/ii?rewriteBatchedStatements=true";//comoany是数据库
static Connection CONNMYSQL;
static PreparedStatement PSTATMYSQL; static {
try {
Class.forName(DBDRIVERSQLITE);
CONNSQLITE= DriverManager.getConnection("jdbc:sqlite:"+DBURLSQLITE); Class.forName(DBDRIVERMYSQL);
CONNMYSQL=DriverManager.getConnection(DBURLMYSQL,"root","123456"); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获取数据库中所有表
*/
public static List<String> getTable(){
System.out.println("开始获取数据表");
//数据库
DatabaseMetaData md=null;
List<String> list=new ArrayList<>();
try {
//获取数据库
md = CONNSQLITE.getMetaData();
} catch (SQLException e) {
e.printStackTrace();
}
try {
//进行查询表
ResultSet rs=md.getTables(null,null,null,null);
if (rs!= null) {
list = new ArrayList<String>();
}
//往list添加查询到的表
while (rs.next()){
list.add(rs.getString("TABLE_NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("查询数据表成功");
return list;
}
/**
* 向mysql创建数据表
*/
public static void createTable(){
ResultSetMetaData rsmd = null;
//获取所有数据库
List<String> list=DBSQLite.getTable();
for (int i = 0; i < list.size(); i++) {
long srop=System.currentTimeMillis();
System.out.println("开始创建第" + (i + 1 )+ "数据表...");
//查询表
String sql = "select * from " + list.get(i);
int size = 0;
try {
PSTATSQLITE = CONNSQLITE.prepareStatement(sql);
//获取数据表
rsmd = PSTATSQLITE.getMetaData();
//创建语句
String create = "create table " + list.get(i) + "(";
//fh目的最后一个没有逗号
String fh = "";
//循环表中所有字段
size = rsmd.getColumnCount();
for (int j = 0; j < size; j++) {
//字段名 类型
create += fh + rsmd.getColumnName(j + 1) + " " + rsmd.getColumnTypeName(j + 1);
//判断长度是否不为0 比如varchar(10) integer
if (rsmd.getPrecision(j + 1) != 0) {
//不为0就给个长度
create += "(" + rsmd.getPrecision(j + 1) + ")";
}
fh = ",";
}
create += ");";
execute(create);
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("开始向(" + list.get(i) + ")数据表添加数据...");
if (insertTable( list.get(i), size)){
System.out.println("第" + (i + 1 ) + "个数据表数据录入完毕");
}
else {
System.out.println("第" + (i + 1 ) + "个数据表数据录入失败");
}
}
}
/**
* 向mysql数据表录入数据
* sql 查询语句 size 字段长度
*/
public static boolean insertTable(String sql,int size){
ResultSet rs=executeQuerySQLITE("select * from "+sql);
try {
String fh="";
String sqladd="insert into "+sql+" values(";
for (int i = 0; i < size; i++) {
sqladd+=(fh+"?");
fh=",";
}
sqladd+=")";
//关闭自动提交
CONNMYSQL.setAutoCommit(false);
PSTATMYSQL=CONNMYSQL.prepareStatement(sqladd); while (rs.next()){ for (int i = 0; i < size; i++) {
PSTATMYSQL.setObject(i+1,rs.getObject(i+1));
}
PSTATMYSQL.addBatch();
}
PSTATMYSQL.executeBatch();
//提交
CONNMYSQL.commit();
//打开自动提交
CONNMYSQL.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
return true;
}
public static ResultSet executeQuerySQLITE(String sql){
try {
PSTATSQLITE=CONNSQLITE.prepareStatement(sql);
return PSTATSQLITE.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void execute(String sql){
try {
PSTATMYSQL=CONNMYSQL.prepareStatement(sql);
PSTATMYSQL.execute();
} catch (SQLException e) {
System.out.println("创建数据库失败");
}
}
public static int executeUpdate(String sql ,Object[]in){
try {
PSTATMYSQL =CONNMYSQL.prepareStatement(sql);
for (int i = 0; i <in.length; i++){
PSTATMYSQL.setObject(i+1,in[i]);
}
return PSTATMYSQL.executeUpdate(); } catch (SQLException e) {
e.printStackTrace();
}
return 0;
} public static void main(String[] args) {
long start= System.currentTimeMillis();
System.out.println("开始迁移数据");
createTable();
System.out.println("迁移完毕,耗时:"+(System.currentTimeMillis()-start)/1000);
}
}
使用jdk进行数据迁移(sqlite迁移mysql)的更多相关文章
- sqlite迁移mysql(导入导出数据)
第一步,将数据导出 进入sqlite3->.open [打开文件路径]->.cd [要保存的路径]->.output [导出文件名字.sql]->.dump 等待导出成功后,就 ...
- mysql迁移之巨大数据量快速迁移方案
mysql迁移之巨大数据量快速迁移方案-增量备份及恢复 --chenjianwen 一.前言: 当mysql库的大小达到几十个G或者上百G,迁移起来是一件非常费事的事情,业务中断,导出导入耗费大量的时 ...
- Mysql学习总结(35)——Mysql两千万数据优化及迁移
最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...
- 从云数据迁移服务看MySQL大表抽取模式
摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...
- 一面数据: Hadoop 迁移云上架构设计与实践
背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时.全面的数据洞察.长期服务全球快消巨头(宝洁.联合利华.玛氏等),获得行业 ...
- zabbix数据库mariadb从服务器迁移到云mysql数据库的操作
zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...
- [saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库
saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean 执行org.saiku.service.Database类 ...
- Saiku数据库迁移H2迁移到Mysql(二十二)
Saiku数据库迁移H2迁移到Mysql Saiku默认使用H2数据库来存储saiku的用户与角色信息,我们可以根据角色来做saiku的权限控制,然后将角色分配给用户 ,该用户就会有对应的约束了! 由 ...
- 使用数据泵+dblink迁移数据库,适用于本地空间不足的情况
col name for a40 select name,locks,pins from v$db_object_cache where locks > 0 and pins > 0 an ...
随机推荐
- Turing Year 2012
Turing LectureFrom cryptanalysis to cognitive neuroscience - a hidden legacy of Alan Turinghttp://co ...
- 聊一聊IAR的workspace文件组织
抽空偶尔做个zigbee实验其实也挺好玩的,今天我就来总结一下嵌入式IAR Embedded Workbench这个非常有效的集成开发环境的文件组织. 每一个workspace由一般是由.c文件和一个 ...
- PHP用mysql数据库存储session
大部分使用php的人一旦应用到session都会使用cookie. cookie虽好可是它也会给我们带来一些隐患的. 隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当 ...
- phpstorm 10 注册码
phpstorm 10 注册码 注册时选择License server,填http://idea.lanyus.com,然后点击OK 网上看评论的结果,亲测,有用!!!
- Matlab 2013a 和 VS2010 混合编程
最近由于项目需求,某项目的算法是基于MATLAB完成的,在短时间内需要去调用算法功能.因此,基于MATLAB生成DLL, C 调用的方式完成. 环境:MATLAB 2013a + VS2010 + w ...
- [转].NET Core配置文件加载与DI注入配置数据
本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...
- 四、Oracle loop循环、while循环、for循环、if选择和case选择、更改读取数据、游标、触发器、存储过程
数据库的设计(DataBase Design): 针对于用户特定的需求,然后我们创建出来一个最使用而且性能高的数据库! 数据库设计的步骤: 01.需求分析 02.概念结构设计 03.逻辑结构设计 04 ...
- js动态控制导航栏样式
导航栏一般做为母版页,为了使增加用户体验,往往在用户进入某个页面给予导航栏相应的样式,这里可以用js动态添加 <div class="box_left fl"> < ...
- JAVA SE collection接口
collection接口:{Set,List,Queue} Set:无序集合,元素不可重复 List:有序集合,元素可重复 Queue:队列 Set{EnumSet ...
- 基于 MUI 构建一个具有 90 +页面的APP应用
前言 mui是一款接近原生App体验的前端框架,只需要掌握前端技术就可以开发APP应用,官方有提供功能比较全面的demo版本, 但在实战中总会遇到一些不可避免但坑,对于没有接触过mui的开发者,难免会 ...