学科分类
目录
Java Web

处理CLOB数据

在实际开发中,CLOB用于存储大文本数据,但是,对MySQL而言,大文本数据的存储是用TEXT类型表示的。为了大家更好地学习JDBC中CLOB数据的处理方式,接下来,通过一个案例来演示,具体步骤如下:

(1)首先在数据库chapter01中,创建一个数据表testclob,创建表的SQL语句如下所示:

create table testclob(

   id int primary key auto_increment,

   resume text

);

(2)在工程chapter01中,新建一个类CLOBDemo01,该类实现了向数据库写入大文本数据的功能,CLOBDemo01的具体实现方式如例1所示。

例1 CLOBDemo01.java

 1  package cn.itcast.jdbc.example;

 2  import java.io.*;

 3  import java.sql.Connection;

 4  import java.sql.PreparedStatement ;

 5  import cn.itcast.jdbc.example.utils.JDBCUtils;

 6  public class CLOBDemo01 {

 7  public static void main(String[] args) {

 8      Connection conn = null;

 9      PreparedStatement preStmt = null;

 10     try {

 11       conn = JDBCUtils.getConnection();

 12       String sql = "insert into testclob values(?,?)";

 13       preStmt = conn.prepareStatement(sql);

 14       File file = new File("D:\\itcast.txt");

 15       Reader reader = new InputStreamReader(

 16            new FileInputStream(file),"utf-8");

 17       preStmt.setInt(1, 1);

 18       preStmt.setCharacterStream(2, reader, (int) file.length());

 19       preStmt.executeUpdate();

 20     } catch (Exception e) {

 21       e.printStackTrace();

 22     } finally {

 23       // 释放资源

 24       JDBCUtils.release(null, preStmt, conn);

 25     }

 26   }

 27 }

在例1中,由于文本数据保存在文件中,因此使用FileInputstream读取文件中的数据,然后通过PreparedStatement对象将数据写入到表testclob的resume字段中。

(3)在工程chapter01中,新建一个类CLOBDemo02,该类用于读取表testclob中的数据,CLOBDemo2的具体实现方式如例2所示。

例2 CLOBDemo2.java

 1  package cn.itcast.jdbc.example;

 2  import java.io.*;

 3  import java.sql.Connection;

 4  import java.sql.PreparedStatement ;

 5  import java.sql.ResultSet;

 6  import cn.itcast.jdbc.example.utils.JDBCUtils;

 7  public class CLOBDemo02 {

 8    public static void main(String[] args) {

 9      Connection conn = null;

 10     PreparedStatement preStmt = null;

 11     ResultSet rs = null;

 12     try {

 13       conn = JDBCUtils.getConnection();

 14       String sql = "select * from testclob";

 15       preStmt = conn.prepareStatement(sql);

 16       rs = preStmt.executeQuery();

 17       if (rs.next()) {

 18         Reader reader = rs.getCharacterStream("resume");

 19         Writer out = new FileWriter("resume.txt");

 20         int temp;

 21         while ((temp = reader.read()) != -1) {

 22           out.write(temp);

 23         }

 24         out.close();

 25         reader.close();

 26       }

 27     } catch (Exception e) {

 28       e.printStackTrace();

 29     } finally {

 30       // 释放资源

 31       JDBCUtils.release(rs, preStmt , conn);

 32     }

 33   }

 34 }

在例2中,将PreparedStatement对象读取到的数据保存到ResultSet中,然后通过循环的方式不断把内容取出来,写入到resume.txt文件中。程序执行完毕后,会在工程chapter01的根目录下发现resume.txt文件。

点击此处
隐藏目录