22---数据库编程08(Clob)

 

大对象:
 大对象处理主要指的是clob和blob两种类型的字段,在clob中可以存放海量文字,
 如存储异步《三国演义》或者《红楼梦》等;在blob中可以存储二进制数据,
 如图片,电影等等,如果在程序中要想存储大对象,必须用PreparedStatement完成,
 所有的内容要通过IO流的方式从大文本字段中保存和读取;
 
 将一个文本文件写入到数据表的一个字段中:
  drop table userclob;
  create table userclob(
   id  int auto_increment primary_key,
   name varchar(30)  not null,
   note  LongText
  );

  import java.sql.DriverManager;
  import java.sql.Connection;
  import java.sql.SQLException;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.io.*;
  import java.text.*;
  public class Demo{
   //定义数据库的驱动程序
   public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
   //定义数据库的连接地址:
   public static final String DBURL="jdbc:mysql://localhost:3306/lid";
   //定义数据库的用户名
   public static final String DBUSER="root";
   //定义数据库的密码
   public static final String DBPASSWORD="123";
   public static void main(String args[]) throws Exception{
    Connection conn=null;
    PreparedStatement pstmt=null;//数据库操作
    ResultSet rs=null;
    //加载数据库驱动
    Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;  
    conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 
    
    String sql="insert into  userclob(name,note) values(?,?)";
    pstmt=conn.prepareStatement(sql);//实例化PreparedStatement
    
    File f=new File("D:"+File.separator+"note.txt");
    InputStream in=null;
    in=new FileInputStream(f);//通过输入流读取文件
    
    pstmt.setString(1,"yuj");
    pstmt.setAsciiStream(2,in,(int)f.length());
    pstmt.executeUpdate();
    pstmt.close();
    conn.close();
    }
   }
  
  读出数据库中的内容:
   import java.sql.DriverManager;
   import java.sql.Connection;
   import java.sql.SQLException;
   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
   import java.util.*;
   import java.io.*;
   import java.text.*;
   public class Demo{
    //定义数据库的驱动程序
    public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
    //定义数据库的连接地址:
    public static final String DBURL="jdbc:mysql://localhost:3306/lid";
    //定义数据库的用户名
    public static final String DBUSER="root";
    //定义数据库的密码
    public static final String DBPASSWORD="123";
    public static void main(String args[]) throws Exception{
     Connection conn=null;
     PreparedStatement pstmt=null;//数据库操作
     ResultSet rs=null;
     //加载数据库驱动
     Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;  
     conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 
     
     int id=1;
     String sql="select name,note from userclob where id=?";
     pstmt=conn.prepareStatement(sql);//实例化PreparedStatement
     pstmt.setInt(1,id);
     rs=pstmt.executeQuery();
     if(rs.next()){
      String name=rs.getString(1);
      StringBuffer note=new StringBuffer();
      InputStream in=rs.getAsciiStream(2);
      Scanner scan=new Scanner(in);
      scan.useDelimiter("\r\n");
      while(scan.hasNext()){
       note.append(scan.next()).append("\n");
       }
      System.out.print("内容:"+note);
      }
     
     rs.close();
     pstmt.close(); 
     conn.close();
     }
    }


 以上内容直接通过ResultSet读取进来的,当然也可以使用ResultSet中提供的getClob()
 方法,将全部的内容变为Clob对象的内容,直接使用Clob可以方便的取得大文本的数据;
 也可对这些数据进行简单的操作,如截取指定长度的文本等;
   import java.sql.DriverManager;
   import java.sql.Connection;
   import java.sql.SQLException;
   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
   import java.sql.Clob;
   import java.util.*;
   import java.io.*;
   import java.text.*;
   public class Demo{
    //定义数据库的驱动程序
    public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
    //定义数据库的连接地址:
    public static final String DBURL="jdbc:mysql://localhost:3306/lid";
    //定义数据库的用户名
    public static final String DBUSER="root";
    //定义数据库的密码
    public static final String DBPASSWORD="123";
    public static void main(String args[]) throws Exception{
     Connection conn=null;
     PreparedStatement pstmt=null;//数据库操作
     ResultSet rs=null;
     //加载数据库驱动
     Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;  
     conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 
     
     int id=1;
     String sql="select name,note from userclob where id=?";
     pstmt=conn.prepareStatement(sql);//实例化PreparedStatement
     pstmt.setInt(1,id);
     rs=pstmt.executeQuery();
     if(rs.next()){
      String name=rs.getString(1);
      Clob c=rs.getClob(2);
      String note=c.getSubString(1,(int)c.length());
      System.out.println("内容:"+note);
      c.truncate(100);//只能读取前100个数据
      System.out.println("部分读取:"+c.getSubString(1,(int)c.length()));
      }
     
     rs.close();
     pstmt.close();
     conn.close();
     }
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzuld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值