JDBC对大文本数据的存取

来源:互联网 发布:反抄袭软件调色盘 编辑:程序博客网 时间:2024/05/21 17:58

package cn.itcast.jdbc;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

import java.sql.Clob;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class ClobTest

{

 

  

   public static void main(String[] args) throws SQLException, IOException

   {

      //insert();

      read();

   }

   static void insert() throws SQLException, IOException

   {

      Connection conn = null;

   PreparedStatement ps = null;

      ResultSet rs = null;

      try{

       conn = DBFactory.getConnection();

 

      //2、创建语句

       String sql ="insert into clob_text(big_text) values(?)";

       ps = conn.prepareStatement(sql);

//    ps.setAsciiStream(1, "输入流", 11);//如果确定文件中全是ASCII字符,可以用这种方法

       File file = new File("src/cn/itcast/jdbc/Base.java");

       

       //用到了java的装饰模式

       Reader reader = new BufferedReader(newFileReader(file));//reader是字符流          

      ps.setCharacterStream(1, reader, (int)file.length());//字符流

     

     

      //4、执行语句

       int i = ps.executeUpdate();

      //5、处理结果

       reader.close();

      System.out.println(i);

      }finally{

        //6、释放资源

        DBFactory.free(conn, ps, rs);

      }

     

     

   }

   static void read() throws SQLException, IOException

   {

      Connection conn = null;

      PreparedStatement ps = null;

      ResultSet rs = null;

      try{

        conn = DBFactory.getConnection();

       

        //2、创建语句

        String sql ="select big_text from clob_text";

        ps = conn.prepareStatement(sql);

 

       

        //4、执行语句

        rs = ps.executeQuery();

        //5、处理结果

      while(rs.next())

      {

        Clob clob = rs.getClob(1);

        Reader reader = clob.getCharacterStream();//把数据读出到reader

       

//      reader = rs.getCharacterStream(1);//替代方法,这两种方法都可以

//      String text = rs.getString(1);//也可以

        File file = new File("Base_test.txt");

        Writer writer = new BufferedWriter(new FileWriter(file));

        char[] buff = new char[1024];//定义一个缓冲区

        for(int i=0;(i=reader.read(buff))>0;)

        {

           writer.write(buff, 0, i);//写数据

        }

//      System.out.println(text);

        writer.close();

        reader.close();

      }

      }finally{

        //6、释放资源

        DBFactory.free(conn, ps, rs);

      }

     

     

   }

}