使用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 ...
随机推荐
- 转 Comparison of Red Hat and Oracle Linux kernel versions and release strings
Originally derived from Red Hat Enterprise Linux (RHEL), Oracle Linux (OL) contains minor difference ...
- spark RDD运算机制
- 怎么为android控件边缘添加阴影
为控件设置一个有阴影感的背景图片即可,可以使用shape 在自定义shape中增加一层或多层,并错开,即可显示阴影效果.为增加立体感,按钮按下的时候,只设置一层.我们可以通过top, bottom, ...
- Murano Weekly Meeting 2015.10.20
Meeting time: 2015.October.20th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting sum ...
- jQuery源代码学习笔记_01
如何获取jQuery源代码 1.可以从GitHub上下载到没有合并和压缩的源代码 2.如果要查看兼容IE6-8的版本,请选择1.x-master分支 3.可以使用git clone也可以使用downl ...
- 用Windows Live Writer离线写博客
作为CSDN博客的菜鸟,我发现在线写博客很不方便,而且文字编辑也不方便,比如不能傻瓜化地修改字体和颜色."有志者自有千方百计,无志者只感千难万难."一番搜索后,我发现了Window ...
- SUN巡检命令
# hostname (主机名)# hostid# uname -X# uname -a # w (进程)# who# last# ps -eaf# /usr/ucb/ps -aux# prstat ...
- pat1040. Longest Symmetric String (25)
1040. Longest Symmetric String (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, ...
- 在C#.net中如何操作XML
在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...
- hql基础入门
[转]进入HQL世界 一个ORM框架是建立在面向对象的基础上的.最好的例子是Hibernate如何提供类SQL查询.虽然HQL的语法类似于SQL,但实际上它的查询目标是对象.HQL拥有面向对象语言的所 ...