http://www.oschina.net/code/snippet_555643_10490
package com.core;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* 实现到导出Oracle中表的insert语句
*
*
*/
public class Derive {
public static void exportSQL(String tableName){
//加载驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
//打开连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_librarysys", "root", "860326");
//输入
//定义column集合保存所有的字段名
List<String> column= new ArrayList<String>();
//定以list集合保存表中的数据
List<String> list= new ArrayList<String>();
//sql语句
String sql ="select * from "+tableName;
//执行sql
PreparedStatement prst =conn.prepareStatement(sql);
//返回结果
ResultSet rs = prst.executeQuery();
//获取关于 ResultSet 对象中列的类型和属性信息的对象
ResultSetMetaData rmd = rs.getMetaData();
//循环得到所有的字段名字保存到column集合中
for(int i=1;i<=rmd.getColumnCount();i++)
{
column.add(rmd.getColumnName(i));
}
//System.out.println(column);
//循环读出表中数据,保存到list集合中
while(rs.next())
{
//从column集合中取得数据,便于读出数据库表的数据
for (String n:column)
{
//取得数据
n=rs.getString(n);
//加载到list中
list.add(n);
}
}
String str="";
//定义st集合,用于保存一个对象数据
List<String> st=null;
//column的长度, 也就是列数
int num =column.size();
StringBuffer sb2= new StringBuffer();
//保存最终的sql语句
String insert="";
int r=0;
while(r<list.size())
{
//截取集合,得到一个对象的数据
st=list.subList(r,r+num);
//定义Stringbuffer截取字符串
StringBuffer sb = new StringBuffer();
//循环出单个的值
for (int i = 0; i<st.size(); i++)
{
String ss=st.get(i);
if(i==st.size()-1)
{
sb.append("'"+ss+"'");
}else
{
sb.append("'"+ss+"'"+",");
}
//拼写insert语句
str="insert into "+tableName+" values("+sb+");";
}
sb2.append(str);
insert=sb2.toString();
r=r+num;
}
/*
* 创建输出流对象
*/
FileWriter fw = new FileWriter("h:\\aa.sql");
System.out.println(insert);
//把insert放到fw所指的文件夹中
fw.write(insert);
//关闭输出流
if(null!=fw)
{
fw.close();
}
/*
* 关闭相关连接
*/
rs.close();
prst.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 读取 SQL 文件,获取 SQL 语句
* @param sqlFile
* SQL 脚本文件
* @return List<sql> 返回所有 SQL 语句的 List
* @throws Exception
*/
private static List<String> loadSql(String sqlFile) throws Exception {
List<String> sqlList = new ArrayList<String>();
try {
InputStream sqlFileIn = new FileInputStream(sqlFile);
StringBuffer sqlSb = new StringBuffer();
byte[] buff = new byte[1024];
int byteRead = 0;
while ((byteRead = sqlFileIn.read(buff)) != -1) {
sqlSb.append(new String(buff, 0, byteRead));
}
// Windows 下换行是 \r\n, Linux 下是 \n
String[] sqlArr = sqlSb.toString()
.split(";");
for (int i = 0; i < sqlArr.length; i++) {
String sql = sqlArr[i].replaceAll("--.*", "").trim();
if (!sql.equals("")) {
sqlList.add(sql);
}
}
return sqlList;
} catch (Exception ex) {
throw new Exception(ex.getMessage());
}
}
/**
* 传入连接来执行 SQL 脚本文件,这样可与其外的数据库操作同处一个事物中
*
* @param conn
* 传入数据库连接
* @param sqlFile
* SQL 脚本文件 可选参数,为空字符串或为null时 默认路径为 src/test/resources/config/script.sql
* @throws Exception
*/
public static void execute(Connection conn,String sqlFile) throws Exception {
Statement stmt = null;
if(sqlFile==null||"".equals(sqlFile)){
sqlFile="h://aa.sql";
}
List<String> sqlList = loadSql(sqlFile);
stmt = conn.createStatement();
for (String sql : sqlList) {
stmt.addBatch(sql);
}
int[] rows = stmt.executeBatch();
System.out.println("Row count:" + Arrays.toString(rows));
}
public static void main(String args[]){
//exportSQL("tb_manager");
try {
Class.forName("com.mysql.jdbc.Driver");
//打开连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "860326");
List<String> sqlList;
sqlList = loadSql("h://aa.sql");
System.out.println("size:" + sqlList.size());
for (String sql : sqlList) {
System.out.println(sql);
}
execute(conn,"h://aa.sql");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}