将一个大文件中的每一行(超过6000字符)插入oracle的一个表中

       需求:将一个程序错误产生的log的每一行插入Oracle的一个表中以便分析错误

       本人用oracle的一些技术解析该文件达不到预期要求,然后用java解析该文件。查看多处资料终于完成该要求。

       解决方案:先在数据库建表,存长字符串的字段类型设为clob,然后用jdbc就把该字段当成String就行。oracle将自动将长字符串装入clob中。

       代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 * @author lx
 * desc:对于较长字符串来说,只要数据库该字段的类型设为了Clob。程序只要通过setString即可达到插入目的
 */
public class InsertClob {
 public static void main(String[] args) {
  File errorFile=new File("src/error.log");
  InputStreamReader isr=null;//用于设置读取字符的编码
  Connection conn=null;//数据库连接
  PreparedStatement pst=null;//用于设置sql语句
  BufferedReader br=null;//用于读取文件的每一行
  try {
   Class.forName("oracle.jdbc.OracleDriver");
   conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
   pst=conn.prepareStatement("insert into t_error_log values(?,?)");
   conn.setAutoCommit(false);
   isr=new InputStreamReader(new FileInputStream(errorFile),"gbk");
   br=new BufferedReader(isr);
   String tempString=null;
   int line=1;
   while((tempString=br.readLine())!=null){
    pst.setInt(1, line);
    pst.setString(2, tempString);
    pst.addBatch();
    System.out.println("line"+line+" : "+tempString);
    if(line%50==0){
     pst.executeBatch();
    } ;
    line++;
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   try {
    if(!conn.isClosed()){
     conn.rollback();
     System.out.println("插入失败,回滚!");
    }
   } catch (SQLException e1) {
    e1.printStackTrace();
   }
   e.printStackTrace();
  }finally{
   try {
    isr.close();
    br.close();
    pst.close();
    conn.close();
   }catch (SQLException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
}

相关推荐