直接粘贴代码

注意:rewriteBatchedStatements=true(加快连接速度)

  1. package com.wbg;
  2.  
  3. import org.omg.Messaging.SYNC_WITH_TRANSPORT;
  4.  
  5. import java.sql.*;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. public class DBSQLite {
  10. //驱动
  11. static String DBDRIVERSQLITE="org.sqlite.JDBC";
  12. //文件绝对地址
  13. static String DBURLSQLITE="B:\\lagou.db";
  14. static Connection CONNSQLITE;
  15. static PreparedStatement PSTATSQLITE;
  16.  
  17. //驱动
  18. static String DBDRIVERMYSQL="com.mysql.jdbc.Driver";
  19. //数据库
  20. static String DBURLMYSQL="jdbc:mysql://localhost:3306/ii?rewriteBatchedStatements=true";//comoany是数据库
  21. static Connection CONNMYSQL;
  22. static PreparedStatement PSTATMYSQL;
  23.  
  24. static {
  25. try {
  26. Class.forName(DBDRIVERSQLITE);
  27. CONNSQLITE= DriverManager.getConnection("jdbc:sqlite:"+DBURLSQLITE);
  28.  
  29. Class.forName(DBDRIVERMYSQL);
  30. CONNMYSQL=DriverManager.getConnection(DBURLMYSQL,"root","123456");
  31.  
  32. } catch (ClassNotFoundException e) {
  33. e.printStackTrace();
  34. } catch (SQLException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. /**
  39. * 获取数据库中所有表
  40. */
  41. public static List<String> getTable(){
  42. System.out.println("开始获取数据表");
  43. //数据库
  44. DatabaseMetaData md=null;
  45. List<String> list=new ArrayList<>();
  46. try {
  47. //获取数据库
  48. md = CONNSQLITE.getMetaData();
  49. } catch (SQLException e) {
  50. e.printStackTrace();
  51. }
  52. try {
  53. //进行查询表
  54. ResultSet rs=md.getTables(null,null,null,null);
  55. if (rs!= null) {
  56. list = new ArrayList<String>();
  57. }
  58. //往list添加查询到的表
  59. while (rs.next()){
  60. list.add(rs.getString("TABLE_NAME"));
  61. }
  62. } catch (SQLException e) {
  63. e.printStackTrace();
  64. }
  65. System.out.println("查询数据表成功");
  66. return list;
  67. }
  68. /**
  69. * 向mysql创建数据表
  70. */
  71. public static void createTable(){
  72. ResultSetMetaData rsmd = null;
  73. //获取所有数据库
  74. List<String> list=DBSQLite.getTable();
  75. for (int i = 0; i < list.size(); i++) {
  76. long srop=System.currentTimeMillis();
  77. System.out.println("开始创建第" + (i + 1 )+ "数据表...");
  78. //查询表
  79. String sql = "select * from " + list.get(i);
  80. int size = 0;
  81. try {
  82. PSTATSQLITE = CONNSQLITE.prepareStatement(sql);
  83. //获取数据表
  84. rsmd = PSTATSQLITE.getMetaData();
  85. //创建语句
  86. String create = "create table " + list.get(i) + "(";
  87. //fh目的最后一个没有逗号
  88. String fh = "";
  89. //循环表中所有字段
  90. size = rsmd.getColumnCount();
  91. for (int j = 0; j < size; j++) {
  92. //字段名 类型
  93. create += fh + rsmd.getColumnName(j + 1) + " " + rsmd.getColumnTypeName(j + 1);
  94. //判断长度是否不为0 比如varchar(10) integer
  95. if (rsmd.getPrecision(j + 1) != 0) {
  96. //不为0就给个长度
  97. create += "(" + rsmd.getPrecision(j + 1) + ")";
  98. }
  99. fh = ",";
  100. }
  101. create += ");";
  102. execute(create);
  103. } catch (SQLException e) {
  104. e.printStackTrace();
  105. }
  106. System.out.println("开始向(" + list.get(i) + ")数据表添加数据...");
  107. if (insertTable( list.get(i), size)){
  108. System.out.println("第" + (i + 1 ) + "个数据表数据录入完毕");
  109. }
  110. else {
  111. System.out.println("第" + (i + 1 ) + "个数据表数据录入失败");
  112. }
  113. }
  114. }
  115. /**
  116. * 向mysql数据表录入数据
  117. * sql 查询语句 size 字段长度
  118. */
  119. public static boolean insertTable(String sql,int size){
  120. ResultSet rs=executeQuerySQLITE("select * from "+sql);
  121. try {
  122. String fh="";
  123. String sqladd="insert into "+sql+" values(";
  124. for (int i = 0; i < size; i++) {
  125. sqladd+=(fh+"?");
  126. fh=",";
  127. }
  128. sqladd+=")";
  129. //关闭自动提交
  130. CONNMYSQL.setAutoCommit(false);
  131. PSTATMYSQL=CONNMYSQL.prepareStatement(sqladd);
  132.  
  133. while (rs.next()){
  134.  
  135. for (int i = 0; i < size; i++) {
  136. PSTATMYSQL.setObject(i+1,rs.getObject(i+1));
  137. }
  138. PSTATMYSQL.addBatch();
  139. }
  140. PSTATMYSQL.executeBatch();
  141. //提交
  142. CONNMYSQL.commit();
  143. //打开自动提交
  144. CONNMYSQL.setAutoCommit(true);
  145. } catch (SQLException e) {
  146. e.printStackTrace();
  147. }
  148. return true;
  149. }
  150. public static ResultSet executeQuerySQLITE(String sql){
  151. try {
  152. PSTATSQLITE=CONNSQLITE.prepareStatement(sql);
  153. return PSTATSQLITE.executeQuery();
  154. } catch (SQLException e) {
  155. e.printStackTrace();
  156. }
  157. return null;
  158. }
  159. public static void execute(String sql){
  160. try {
  161. PSTATMYSQL=CONNMYSQL.prepareStatement(sql);
  162. PSTATMYSQL.execute();
  163. } catch (SQLException e) {
  164. System.out.println("创建数据库失败");
  165. }
  166. }
  167. public static int executeUpdate(String sql ,Object[]in){
  168. try {
  169. PSTATMYSQL =CONNMYSQL.prepareStatement(sql);
  170. for (int i = 0; i <in.length; i++){
  171. PSTATMYSQL.setObject(i+1,in[i]);
  172. }
  173. return PSTATMYSQL.executeUpdate();
  174.  
  175. } catch (SQLException e) {
  176. e.printStackTrace();
  177. }
  178. return 0;
  179. }
  180.  
  181. public static void main(String[] args) {
  182. long start= System.currentTimeMillis();
  183. System.out.println("开始迁移数据");
  184. createTable();
  185. System.out.println("迁移完毕,耗时:"+(System.currentTimeMillis()-start)/1000);
  186. }
  187. }

使用jdk进行数据迁移(sqlite迁移mysql)的更多相关文章

  1. sqlite迁移mysql(导入导出数据)

    第一步,将数据导出 进入sqlite3->.open [打开文件路径]->.cd [要保存的路径]->.output [导出文件名字.sql]->.dump 等待导出成功后,就 ...

  2. mysql迁移之巨大数据量快速迁移方案

    mysql迁移之巨大数据量快速迁移方案-增量备份及恢复 --chenjianwen 一.前言: 当mysql库的大小达到几十个G或者上百G,迁移起来是一件非常费事的事情,业务中断,导出导入耗费大量的时 ...

  3. Mysql学习总结(35)——Mysql两千万数据优化及迁移

    最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...

  4. 从云数据迁移服务看MySQL大表抽取模式

    摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...

  5. 一面数据: Hadoop 迁移云上架构设计与实践

    背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时.全面的数据洞察.长期服务全球快消巨头(宝洁.联合利华.玛氏等),获得行业 ...

  6. zabbix数据库mariadb从服务器迁移到云mysql数据库的操作

    zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...

  7. [saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库

    saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean 执行org.saiku.service.Database类 ...

  8. Saiku数据库迁移H2迁移到Mysql(二十二)

    Saiku数据库迁移H2迁移到Mysql Saiku默认使用H2数据库来存储saiku的用户与角色信息,我们可以根据角色来做saiku的权限控制,然后将角色分配给用户 ,该用户就会有对应的约束了! 由 ...

  9. 使用数据泵+dblink迁移数据库,适用于本地空间不足的情况

    col name for a40 select name,locks,pins from v$db_object_cache where locks > 0 and pins > 0 an ...

随机推荐

  1. java 静态变量生命周期(类生命周期)(转)

    Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放 ...

  2. Java基本语法_循环练习系列(二)——万年历

    写万年历大致可以分为以下几个步骤: 1.根据用户输入的年份判断该年是否是闰年. 2.根据用户输入的月份计算该月的天数. 3.计算输入的年份之前的总天数. 4.计算输入的月份之前的天数. 5.计算该月的 ...

  3. LeetCode 881.救生艇(C++)

    第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...

  4. Linux小工具:文件上传ftp服务器

    工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...

  5. MySQL 8.0之后版本密码修改

    MySQL刚刚安装完毕时 mysqld --initialize grep password /var/log/mysqld.log 获取临时密码 mysql -uroot -p 输入临时密码登录My ...

  6. C++ 虚函数、纯虚函数、虚继承

    1)C++利用虚函数来实现多态. 程序执行时的多态性通过虚函数体现,实现运行时多态性的机制称爲动态绑定:与编译时的多态性(通过函数重载.运算符重载体现,称爲静态绑定)相对应. 在成员函数的声明前加上v ...

  7. c++ 控制台输入参数

    #include <iostream>#include <string> using namespace std; int main(int argc,char **argv) ...

  8. output引用类型

    1.创建存储过程,将参数avg设置为引用参数,可以对参数有反馈作用 ), @avg float output) as select @avg=AVG(price) from goods where g ...

  9. iOS开发实践之多线程(单例模式)

    单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. 单例模式的使用场合:在这个应用程序中,共享一份资源(这份资源只需要创建 ...

  10. JavaScript常用字符串操作方法

    1.concat() concat() 方法用于连接两个或多个字符串,并返回连接后的字符串.stringObject.concat() 与 Array.concat() 很相似. var str1=& ...