使用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 ...
随机推荐
- JedisCluster 链接redis集群
先贴代码: <!-- redis客户端 --><dependency> <groupId>redis.clients</groupId> <a ...
- PlayMaker Int的两个数进行比较 Int Compare
Integer 1 和 Integer 2 进行比较,Integer 1 和 Integer 2 相等的时候 执行 ChangeToGreen; Integer 1 比 Integer 2 大的时 ...
- is 和 == 区别
== 和 is 的区别 == 比较 比较的是两个值 适用于 列表a = '[1:2]'b = '[1:2]'print(a == b) #True 字典a = '{1,2,3}'b = '{ ...
- Fedora14 mount出现错误时解决办法【亲测有效】
挂载时出现了如上图所示问题,看第一条英语提示,我刚开始以为是文件权限不够,改了权限之后,依旧存在这样的问题, 于是,我上网查阅了一些资料: 在解决之前,先让我们一起来了解一下nfs: NFS最大功能就 ...
- windows下自动更改IP的小工具(bat批处理文件)
每次上线,都要先上灰度环境再上到正式环境.在上到灰度环境时,访问灰度环境通过自动获取IP和更改指定dns来实现.具体如何实现,大家可自行百度. 新建一个文本文档,将其后缀改为bat,打开该文件,拷贝一 ...
- 深入.NET框架。
1.Microsoft.NET框架结构是一个面向网络,支持各种用户终端的开发平台. 2..NET框架的主要内容有CLR,FCL,ADO.NET,XML,ASP.NET,WinForms和WebSeri ...
- html实现钝角效果;html实现限制一行字数的显示,超出的部分用省略号(....)来代替
前端实现div框边角的钝化虽然简单,但是有时候突然想不到,特此写下几句实现方法,以便记忆. 实现div框四个角都钝角的操作:设置 div : border-radius=10px; 实现div框一个角 ...
- Java Exception & RTTI
Exception Try { ... ... } catch (Exception ex) { …; throw new Throwable(ex); } catch (Throwable ex) ...
- 也谈ThreadLocal
欢迎赐教博客地址(http://www.cnblogs.com/shizhongtao/p/5358411.html) 对于ThreadLocal使用,网上一堆一堆的.什么内存泄露,什么线程不安全.这 ...
- 【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑
目前正在开发自己的网站,技术上使用Angular JS + Express JS + Mongo DB.由于网站会有文章发布,因此需要有评论功能.评论功能也可以自己开发,但由于现在社会化评论插件很多, ...