java实现从一个数据库查询数据经过处理导入另外一个数据库中

            当数据库表中有clob字段或要对表中数据做较复杂处理时就不太好用脚本从一个数据库导入数据到另外一个数据库中了,这时就要通过代码实现了,下面以orale数据库为例代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.UUID;

import oracle.jdbc.driver.OracleConnection;
import oracle.sql.CLOB;

/**
 * import data from one database to another
 * 
 * @author 
 * @version 
 */
public class ImportDataByJdbc {
	public static void main(String[] args) throws Exception {
		Connection con = null;// 创建一个数据库连接
		PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
		ResultSet result = null;// 创建一个结果集对象
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序
			System.out.println("开始尝试连接cms数据库!");
			String url = "jdbc:oracle:" + "thin:@192.168.0.xx:1521:ORCL";
			String user = "policy";// 用户名,系统默认的账户名
			String password = "xxxx";// 你安装时选设置的密码
			con = DriverManager.getConnection(url, user, password);// 获取连接
			System.out.println("cms连接成功!");
			String sql = "select t.title,t.channel_code,t.content from cms_news t";// 预编译语句,“?”代表参数
			pre = con.prepareStatement(sql);// 实例化预编译语句
			result = pre.executeQuery();// 执行查询,注意括号中不需要再加参数
			importData(result);
			// while (result.next())
			// 当结果集不为空时
			// System.out.println("用户名:" + result.getString("title"));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
				// 注意关闭的顺序,最后使用的最先关闭
				if (result != null)
					result.close();
				if (pre != null)
					pre.close();
				if (con != null)
					con.close();
				System.out.println("cms数据库连接已关闭!");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

	public static String importData(ResultSet result) {

		Connection con = null;// 创建一个数据库连接
		PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
		ResultSet result2 = null;// 创建一个结果集对象
		Timestamp currentTime = new Timestamp(System.currentTimeMillis());
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(currentTime);
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序
			System.out.println("开始尝试连接omp数据库!");
			String url = "jdbc:oracle:" + "thin:@192.168.0.xx:1521:orclgbk";
			String user = "xjsp";// 用户名,系统默认的账户名
			String password = "xxx";// 你安装时选设置的密码
			con = DriverManager.getConnection(url, user, password);// 获取连接
			System.out.println("omp连接成功!");
			int num = 0;
			while (result.next()) {
				String id = getUUID();
				String entryType = getEntryType(result
						.getString("CHANNEL_CODE"));
				String sql = "insert into kms_entry(ID,ENTRY_NAME,ENTRY_TYPE,ENTRY_CONTENT,EDIT_FLAG,AUDIT_TIME,IF_DEL,IF_AUDIT,LAST_EDIT_TIME,CREATE_USER,CREATE_TIME,LAST_EDIT_USER) "
						+ " values('"
						+ id
						+ "','"
						+ result.getString("title")
						+ "','"
						+ entryType
						+ "',?,'1',to_date('"
						+ dateString
						+ "','yyyy-mm-dd hh24:mi:ss'),'1','3',to_date('"
						+ dateString
						+ "','yyyy-mm-dd hh24:mi:ss'),'00000000000000000000000000000000',to_date('"
						+ dateString
						+ "','yyyy-mm-dd hh24:mi:ss'),'00000000000000000000000000000000')";// 预编译语句,“?”代表参数
				pre = con.prepareStatement(sql);// 实例化预编译语句
				CLOB clob = new CLOB((OracleConnection) con); // 创建一个实例化对象
				clob = oracle.sql.CLOB.createTemporary((OracleConnection) con,
						true, 1);
				clob.putString(1, result.getString("CONTENT")); // 为对象赋值
				pre.setClob(1, clob);
				pre.execute();
				pre.close();
				num = num + 1;
				System.out.println("插入成功第" + (num) + "条数据");

			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
				// 注意关闭的顺序,最后使用的最先关闭
				if (result != null)
					result.close();
				if (pre != null)
					pre.close();
				if (con != null)
					con.close();
				System.out.println("omp数据库连接已关闭!");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;

	}

	/**
	 * 获取uuid
	 * 
	 * @return
	 */
	public static String getUUID() {
		UUID uuid = UUID.randomUUID();
		String s = uuid.toString();
		String uuids = s.substring(0, 8) + s.substring(9, 13)
				+ s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
		return uuids;
	}

	public static String getEntryType(String chanelcode) {
		String entryTypeString = "";
		if (chanelcode != "" && chanelcode != null) {
			处理数据.....
		}

		return entryTypeString;

	}
}
           其中clob字段要用放进clob对象然后才进行插入,getUUID是当数据库中表的主键不是自增长生成时需要自己获取进行保存,如果数据库表设置的是自增长主键就不需要这个了




  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个导入功能给两张数据库表添加数据的方法,可以使用JavaJDBCJava Database Connectivity)技术来处理数据库的连接和操作。具体的步骤如下: 1.首先,需要编写一个方法,用于连接数据库。可以使用JDBC提供的DriverManager类的getConnection方法来获取数据库连接对象。需要提供数据库的连接信息,例如URL、用户名和密码等。 2.连接到数据库之后,可以通过Statement或者PreparedStatement对象来执行SQL语句。可以编写一个方法,用于执行SQL语句,该方法需要接收一个SQL语句作为参数。 3.要实现导入功能,首先需要读取导入数据。可以使用Java的文件读取功能,读取导入数据的文件内容,然后解析文件内容,获取需要导入数据。 4.根据解析的数据,可以构造SQL语句,用于向两张数据库添加数据。需要根据数据的结构和表的结构,构造合适的SQL语句。可以使用INSERT INTO语句来添加数据,可以通过PreparedStatement对象的setXXX方法来设置SQL语句的参数值。 5.将构造好的SQL语句传入之前编写的方法执行。可以通过executeUpdate方法来执行SQL语句,该方法返回一个int类型的值,表示受影响的行数。可以根据返回值判断是否执行成功。 6.最后,需要关闭数据库连接。可以通过Connection对象的close方法来关闭数据库连接,释放资源。 通过以上步骤,可以实现一个导入功能给两张数据库表添加数据的方法。该方法可以接收一个文件路径作为参数,读取文件内容并解析,然后根据解析的数据构造SQL语句,执行SQL语句向两张数据库添加数据,最后关闭数据库连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值