使用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 ...
随机推荐
- java 静态变量生命周期(类生命周期)(转)
Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放 ...
- Java基本语法_循环练习系列(二)——万年历
写万年历大致可以分为以下几个步骤: 1.根据用户输入的年份判断该年是否是闰年. 2.根据用户输入的月份计算该月的天数. 3.计算输入的年份之前的总天数. 4.计算输入的月份之前的天数. 5.计算该月的 ...
- LeetCode 881.救生艇(C++)
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...
- Linux小工具:文件上传ftp服务器
工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...
- MySQL 8.0之后版本密码修改
MySQL刚刚安装完毕时 mysqld --initialize grep password /var/log/mysqld.log 获取临时密码 mysql -uroot -p 输入临时密码登录My ...
- C++ 虚函数、纯虚函数、虚继承
1)C++利用虚函数来实现多态. 程序执行时的多态性通过虚函数体现,实现运行时多态性的机制称爲动态绑定:与编译时的多态性(通过函数重载.运算符重载体现,称爲静态绑定)相对应. 在成员函数的声明前加上v ...
- c++ 控制台输入参数
#include <iostream>#include <string> using namespace std; int main(int argc,char **argv) ...
- output引用类型
1.创建存储过程,将参数avg设置为引用参数,可以对参数有反馈作用 ), @avg float output) as select @avg=AVG(price) from goods where g ...
- iOS开发实践之多线程(单例模式)
单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. 单例模式的使用场合:在这个应用程序中,共享一份资源(这份资源只需要创建 ...
- JavaScript常用字符串操作方法
1.concat() concat() 方法用于连接两个或多个字符串,并返回连接后的字符串.stringObject.concat() 与 Array.concat() 很相似. var str1=& ...