数据库导出sql 与 导入sql java源码

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();
}
 
 
  
 
       
 
     



}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值