实现数据库中的数据(db data)转化成document文档 实现jdbc批量插入数据

package com.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.log4j.Logger;

/**
 * 一.实现数据库中的数据(db data)转化成document文档
 *
 * 二。实现jdbc批量插入数据
 * */
public class DBDataToXmlDomTest {
 private static Logger log = Logger.getLogger(DBDataToXmlDomTest.class);
 private static BasicDataSource ds = null;

 public DBDataToXmlDomTest() {
 }

 public static void main(String[] args) throws Exception {
  init();
  // dbToDom();
  tableDataToXmlDom("tRoom");
 }

 /** jdbc 批量插入* */
 public void batchInsert(List sqllist) {
  Connection con = null;
  Statement st = null;
  try {
   con = getConnection();// 获得连接
   con.setAutoCommit(false);
   st = con.createStatement();
   for (int i = 0; i < sqllist.size(); i++) {
    String sql = sqllist.get(i).toString();
    st.addBatch(sql);
    // 51条sql执行一次批量插入
    if (i != 0 && i % 50 == 0) {
     st.executeBatch();
     con.commit();
    }
   }
   if (st != null) {
    st.executeBatch();
    con.commit();
   }
  } catch (Exception e) {
   log.error("批量导入异常!!", e);
   System.out.println("批量导入异常!!");
   System.out.println("batchInsert  " + e);
  } finally {
   try {
    st.close();
    con.close();
   } catch (SQLException e) {
   }
  }
 }

 /*
  * 把数据库中的数据转化成dom对象
  */
 public static void dbToDom() {
  try {
   StringBuffer dom = new StringBuffer();
   List tables = getTableList();
   for (int i = 0; i < tables.size(); i++) {
    String tableDom = tableDataToXmlDom((tables.get(i)).toString());
    dom.append(tableDom);
   }
   // System.out.println(dom.toString());
   // 写到文件中
   System.out.println("*****start write*****");
   File file = new File("d:/SystemData.xml");
   OutputStream os = new FileOutputStream(file);
   os.write(dom.toString().getBytes());
   os.close();
   System.out.println("*****finish*****");
  } catch (Exception e) {
   System.out.println(e);
  }
 }

 /* 获取指定数据库中所有表的名字 */
 public static List getTableList() throws SQLException {
  List tables = new ArrayList();
  Connection con = getConnection();// 获得连接
  ResultSet rs = con.getMetaData().getTables(null, null, "", null);
  while (rs.next()) {
   // System.out.println(rs.getString(3));
   tables.add(rs.getString(3));
  }
  return tables;
 }

 /* 清空表中的记录 */
 public static void truncateTable(String tableName) throws SQLException {
  Connection con = getConnection();// 获得连接
  Statement st = con.createStatement();
  String sql = "truncate table " + tableName;
  ResultSet rs = st.executeQuery(sql);
  rs.close();
  con.close();// 释放连接
 }

 /*
  * 功能: 把一个数据库表中的数据转化成dom对象
  *
  * param:tableName 表名
  */
 public static String tableDataToXmlDom(String tableName)
   throws SQLException {
  int blank1 = 1;// 空格符数
  int blank2 = 2;

  Connection con = getConnection();// 获得连接
  Statement st = con.createStatement();
  String sql = "select  *  from  " + tableName;
  ResultSet rs = st.executeQuery(sql);
  ResultSetMetaData metaData = rs.getMetaData();
  int columnCount = metaData.getColumnCount();
  StringBuffer tbDom = new StringBuffer();
  while (rs.next()) {
   tbDom.append(blank(blank1));
   tbDom.append("<" + tableName + ">").append(enter());
   for (int i = 1; i <= columnCount; i++) {
    String columnName = metaData.getColumnLabel(i);
    tbDom.append(blank(blank2)).append("<" + columnName + ">");
    int type = metaData.getColumnType(i);
    switch (type) {
    case Types.VARCHAR:
     tbDom.append(singleQuote(rs.getString(i)));
     break;
    case Types.TIMESTAMP:
     tbDom.append(dealDate(rs.getDate(i)));
     break;
    case Types.INTEGER:
     tbDom.append(rs.getInt(i));
     break;
    case Types.FLOAT:
     tbDom.append(rs.getFloat(i));
     break;
    case Types.BIGINT:
     tbDom.append(rs.getLong(i));
    default:
     tbDom.append(rs.getString(i));
    }
    tbDom.append("</" + columnName + ">").append(enter());
   }
   tbDom.append(blank(blank1));
   tbDom.append("</" + tableName + ">").append(enter());
  }
  System.out.println(tbDom.toString());
  rs.close();
  con.close();// 释放连接
  return tbDom.toString();
 }

 /*
  * 功能:返回指定长度的空格字符串
  *
  * param length 指定长度
  */
 public static String blank(int length) {
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < length; i++) {
   sb.append(" ");
  }
  return sb.toString();
 }

 /*
  * 功能:返回回车换行符号
  */
 public static String enter() {
  StringBuffer sb = new StringBuffer();
  sb.append("\r\n");
  return sb.toString();
 }

 /*
  * 功能:给字符串数据加上单引号
  *
  * 处理 varchar 类型数据
  */
 public static String singleQuote(String str) {
  if (str == null) {
   return null;
  } else if (str.equals("")) {
   return "''";
  } else {
   return "'" + str + "'";
  }
 }

 /*
  * 处理 datetime 类型数据
  */
 public static String dealDate(Date dt) {
  if (dt == null) {
   return null;
  } else {
   return "'" + dt + "'";
  }
 }

 public static void init() {
  if (ds != null) {
   try {
    ds.close();
   } catch (Exception e) {
    //
   }
   ds = null;
  }
  try {
   Properties p = new Properties();
   // �? .连接my sql 数据�?
   p.setProperty("driverClassName", "com.mysql.jdbc.Driver");
   p
     .setProperty(
       "url",
       "jdbc:mysql://localhost:3306/NetDetective?useUnicode=true&characterEncoding=UTF-8");
   p.setProperty("username", "xxxxxx");
   p.setProperty("password", "xxxxxx");
   p.setProperty("initialSize", "1");
   p.setProperty("minIdle", "1");
   p.setProperty("maxActive", "50");
   ds = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
  } catch (Exception e) {
   System.out.println(e);
  }
 }

 public static synchronized Connection getConnection() throws SQLException {
  Connection conn = null;
  if (ds != null) {
   conn = ds.getConnection();// 获得连接
  }
  return conn;
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值