简介
数据库复制是将一个数据库的数据复制到另一个数据库的过程,这在备份和数据迁移等场景中非常有用,在Java中,我们可以使用JDBC(Java Database Connectivity)来连接和操作数据库。
环境准备
1、确保已经安装了MySQL数据库,并创建了两个数据库,source_db和target_db。
2、添加MySQL的JDBC驱动到项目中,mysqlconnectorjava8.0.23.jar。
实现步骤
1、加载JDBC驱动
2、建立与数据库的连接
3、获取源数据库表结构
4、在目标数据库中创建相应的表结构
5、从源数据库读取数据并写入到目标数据库
6、关闭数据库连接
代码实现
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DatabaseReplication { public static void main(String[] args) { String sourceUrl = "jdbc:mysql://localhost:3306/source_db"; String targetUrl = "jdbc:mysql://localhost:3306/target_db"; String user = "root"; String password = "password"; try { // 1. 加载JDBC驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立与数据库的连接 Connection sourceConn = DriverManager.getConnection(sourceUrl, user, password); Connection targetConn = DriverManager.getConnection(targetUrl, user, password); // 3. 获取源数据库表结构 Statement sourceStmt = sourceConn.createStatement(); ResultSet sourceRs = sourceStmt.executeQuery("SELECT * FROM source_table"); int columnCount = sourceRs.getMetaData().getColumnCount(); // 4. 在目标数据库中创建相应的表结构 Statement targetStmt = targetConn.createStatement(); for (int i = 1; i <= columnCount; i++) { String columnName = sourceRs.getMetaData().getColumnName(i); String columnType = sourceRs.getMetaData().getColumnTypeName(i); targetStmt.addBatch("ALTER TABLE target_table ADD COLUMN " + columnName + " " + columnType); } targetStmt.executeBatch(); // 5. 从源数据库读取数据并写入到目标数据库 while (sourceRs.next()) { StringBuilder insertSql = new StringBuilder("INSERT INTO target_table VALUES ("); for (int i = 1; i <= columnCount; i++) { insertSql.append("'").append(sourceRs.getString(i)).append("', "); } insertSql.delete(insertSql.length() 2, insertSql.length()); insertSql.append(")"); targetStmt.addBatch(insertSql.toString()); } targetStmt.executeBatch(); // 6. 关闭数据库连接 sourceRs.close(); sourceStmt.close(); sourceConn.close(); targetStmt.close(); targetConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
注意事项
1、请根据实际情况修改数据库连接信息、用户名和密码。
2、本示例仅适用于MySQL数据库,其他数据库可能需要调整JDBC驱动和连接字符串。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/643636.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复