package com.tongxiang.item.base.dao; import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays; import org.apache.commons.lang.StringUtils; public class ImportFromSql
{ private static final String URL = "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:orcl"; private static final String USER = "user"; private static final String PASSWORD = "password"; private static Connection CONN = null; static
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
CONN = DriverManager.getConnection(URL, USER, PASSWORD);
}
catch (SQLException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
} public static void main(String[] args) throws Exception
{
try
{
// insert 文件数据格式
// C:\\TEST.sql
// --------------------------
// insert into (...) values (...);
// insert into (...) values (...);
// insert into (...) values (...);
// --------------------------
String sqlFile = "C:\\TEST.sql"; // 每次批处理数目
int batchCnt = 100; insertSqlBacth(CONN, sqlFile, batchCnt);
}
finally
{
CONN.close();
}
} /**
* 传入连接来执行 SQL 脚本文件,这样可与其外的数据库操作同处一个事物中
*
* @param 数据库连接
* @param 文件路径
* @param 每次批处理数
*
*/
public static void insertSqlBacth(Connection conn, String sqlFile,
int batchCnt) throws Exception
{
Statement stmt = null;
//从给定位置获取文件
File file = new File(sqlFile);
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader(file));
//每次读取文件的缓存
String temp = null;
int i = 0;
int mod = 0;
stmt = conn.createStatement();
while ((temp = reader.readLine()) != null)
{
i++;
stmt.addBatch(StringUtils.chomp(temp.trim(), ";"));
mod = i % batchCnt;
if (mod == 0)
{
int[] rows = stmt.executeBatch();
conn.commit();
System.out.println("Row count:" + Arrays.toString(rows));
stmt.close();
stmt = conn.createStatement();
}
}
if (mod != 0)
{
int[] rows = stmt.executeBatch();
conn.commit();
System.out.println("Row count:" + Arrays.toString(rows));
stmt.close();
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
//关闭文件流
if (reader != null)
{
try
{
reader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}