记一次使用java代码的方式从mysql数据库导入多张表到postgresql数据库的记录
2020-01-13 18:47
309 查看
由于本人是一个java开发人员,所以用了java的方式
步骤
1 。拷贝一些基础数据 连接两个数据库 ,拷贝能考的
需要注意的是mysql数据库的时间格式和postgresql 不一样,我这边做了转换。
//声明Connection对象 Connection con; String driver = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2B8"; String user = "root"; String password = "root"; Connection con2; String driver2 = "org.postgresql.Driver"; String url2 = "jdbc:postgresql://localhost:5432/escort_dh"; String user2 = "postgresql"; String password2 = "root"; try { //加载驱动程序 Class.forName(driver); con = DriverManager.getConnection(url,user,password); Class.forName(driver2); con2 = DriverManager.getConnection(url2,user2,password2); if(!con.isClosed()){ System.out.println("成功连接到数据库1!"); } if (!con2.isClosed()){ System.out.println("成功连接到数据库2!"); } //2.创建statement类对象,用来执行SQL语句!! Statement statement = con.createStatement(); //要执行的SQL语句 String sql = "select no,card,inputTime,removed,enabled from escortgoods"; //要执行的SQL语句 String sql2 = "insert into et_escort_goods (id,no,type,node,card_ids,create_time,create_by,update_time,update_by,removed,enabled) " + "values(?,?,null,null,?,?,1,null,null,?,?)"; //3.ResultSet类,用来存放获取的结果集!! ResultSet rs = statement.executeQuery(sql); PreparedStatement pst = con2.prepareStatement(sql2); int i = 226; while(rs.next()){ System.out.println(i); System.out.print(rs.getLong(1)+" "); System.out.print(rs.getString(2)+" "); System.out.print(rs.getString(3)+" "); System.out.print(rs.getLong(4)+" "); System.out.print(rs.getLong(5)+" "); // System.out.print(rs.getString(2)+"\n"); ++i; String str = rs.getString(3); pst.setLong(1,i); pst.setString(2,rs.getString(1)); pst.setString(3,rs.getString(2)); //时间转换 if (str==null){ pst.setDate(4,rs.getDate(3)); }else { DateFormat format= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=format.parse(str); Timestamp sqlDate = new Timestamp(date.getTime()); pst.setTimestamp(4,sqlDate); } boolean fouth = true; if (rs.getLong(4)==0){ fouth= false; } boolean fifth = true; if (rs.getLong(5)==0){ fifth = false; } pst.setBoolean(5,fouth); pst.setBoolean(6,fifth); pst.executeUpdate(); } System.out.println("完成"); rs.close(); con.close(); con2.close(); }catch(ClassNotFoundException e) { //数据库驱动类异常处理 System.out.println("对不起,找不到驱动程序!"); e.printStackTrace(); } catch(SQLException e) { //数据库连接失败异常处理 e.printStackTrace(); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); }
步骤 2 对外键进行拷贝,首先搞清楚外键的关系,我这边由于mysql表中的数据是uuid加密的,所以无法对应拷贝。所以我这边比较麻烦
//声明Connection对象 Connection con; String driver = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2B8"; String user = "root"; String password = "root"; Connection con2; String driver2 = "org.postgresql.Driver"; String url2 = "jdbc:postgresql://localhost:5432/test"; String user2 = "postgresql"; String password2 = "root"; try { //加载驱动程序 Class.forName(driver); con = DriverManager.getConnection(url,user,password); Class.forName(driver2); con2 = DriverManager.getConnection(url2,user2,password2); if(!con.isClosed()){ System.out.println("成功连接到数据库1!"); } if (!con2.isClosed()){ System.out.println("成功连接到数据库2!"); } //2.创建statement类对象,用来执行SQL语句!! Statement statement = con.createStatement(); //要执行的SQL语句 String sql = "select card,goods from card"; //要执行的SQL语句 String sql2 = "UPDATE good SET id = ? WHERE no = ?"; //3.ResultSet类,用来存放获取的结果集!! ResultSet rs = statement.executeQuery(sql); PreparedStatement pst = con2.prepareStatement(sql2); int i = 1; while(rs.next()){ System.out.println(i); System.out.print(rs.getString(1)+" "); System.out.print(rs.getString(2)+" "); ++i; // Connection con3 = DriverManager.getConnection(url,user,password); //2.创建statement类对象,用来执行SQL语句!! String sql3 = "select no from escortgoods where id = ? "; PreparedStatement preparedStatement = con.prepareStatement(sql3); preparedStatement.setString(1,rs.getString(2)); ResultSet resultSet = preparedStatement.executeQuery(); int id = 0 ; while (resultSet.next()){ // Connection con4 = DriverManager.getConnection(url2,user2,password2); //2.创建statement类对象,用来执行SQL语句!! String sql4 = "select idfrom goodswhere no= ? "; // System.out.print(rs.getString(2)+"\n"); PreparedStatement preparedStatement1 = con2.prepareStatement(sql4); preparedStatement1.setString(1,resultSet.getString(1)); ResultSet resultSet1 = preparedStatement1.executeQuery(); while (resultSet1.next()){ id = resultSet1.getInt(1); break; } break; } System.out.println("id:"+id); if (id==0){ continue; } pst.setInt(1,id); pst.setString(2,rs.getString(1)); pst.executeUpdate(); } System.out.println("完成"); rs.close(); con.close(); con2.close(); }catch(ClassNotFoundException e) { //数据库驱动类异常处理 System.out.println("对不起,找不到驱动程序!"); e.printStackTrace(); } catch(SQLException e) { //数据库连接失败异常处理 e.printStackTrace(); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); }
**
基本上就完成了,这边需要注意的是·拷贝外键时由于要查询多次sql,查出来的值有可能是null值,所以此时如果数据库不允许空值的存在,自己写一个判断,使用continue;关键词跳出本次循环,自己把握。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 配置----Hibernate可配置的编程方式,驱动、URL、数据库访问岁用户名、密码等用使用Java代码手动加载!
- java application应用程序 使用JDBC和proxool两种方式连接数据库 的测试程序代码
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
- java application 应用程序 使用JDBC proxool 两种方式连接数据库 测试程序代码
- 20181112-PostgreSQL数据库dmp文件导入(记录一次数据导入)
- 使用Java 的jxl 批量导入数据到数据库
- java使用动态代理来实现AOP(日志记录)的实例代码
- Java代码编程实现MySQL数据库的备份与导入
- java连接postgreSQL数据库简单使用
- java使用jdbc对mysql数据库进行操作的步骤和代码
- java 演示使用jdbc-odbc桥连接的方式操作数据库 向数据库中添加数据
- Java代码实现MySQL数据库的备份与导入
- 使用java技术将Excel表格内容导入mysql数据库
- 使用xml及java代码混合的方式来设置图形界面
- java使用JDBC连接数据库的几种方式
- 使用java技术将Excel表格内容导入mysql数据库
- Java使用JDBC方式连接数据库
- [导入]C#分析数据库结构,使用XSL模板自动生成代码
- 使用pgAdim3对PostgreSQL数据库导入导出