处理Clob数据

本文详细介绍了如何在MySQL中处理Clob数据,包括写入和读取两个部分。写入Clob数据涉及加载数据库驱动、获取连接、使用PreparedStatement等步骤;读取Clob数据则可以使用getAsciiStream()或getClob()方法,配合关闭数据库连接来完成操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事先在MySQL中准备好表:

CREATE TABLE userclob(
    id      INT            AUTO_INCREMENT    PRIMARY KEY,
    name    VARCHAR(30)    NOT NULL,
    note    LONGTEXT  
);

一、写入Clob数据

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class ClobDemo01{
	//MySQL数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//MySQL数据库的连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//MySQL数据库的连接用户名
	public static final String DBUSER="root";
	//MySQL数据库的连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1.加载数据库驱动
		Class.forName(DBDRIVER);
		//2.获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3.实例化PreparedStatement对象,并且设置参数
		String sql="INSERT INTO userclob(name,note) VALUES(?,?)";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		pstmt.setString(1,"张三");
		File f=new File("e:"+File.separator+"demo.txt");
		InputStream input=new FileInputStream(f);
		pstmt.setAsciiStream(2,input,(int)f.length());//其中三个参数分别为:位置,输入流,文件长度
		//4.执行executeUpdate()操作
		pstmt.executeUpdate();
		//5.关闭数据库连接
		pstmt.close();
		conn.close();
	}
}

步骤:

1.加载数据库驱动

Class.forName(dbdriver);

2.获取数据库连接

Connection conn=DriverManager.getConnection(url,user,pass);

3.实例化PreparedStatement对象

PreparedStatement pstmt=conn.prepareStatement(sql);

4.写入Clob数据

pstmt.setAsciiStream(columnIndex,inputStream,fileLength);
pstmt.executeUpdate();

5.关闭数据库连接

pstmt.close();
conn.close();

二、读取Clob数据

(1)使用getAsciiStream()读取

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.io.InputStream;
import java.sql.ResultSet;
import java.util.Scanner;
public class ClobDemo02{
	//MySQL数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//MySQL数据库的连接地址
	public static final String DBURL="jdbc:mysql://3306:localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//MySQL数据库的连接用户名
	public static final String DBUSER="root";
	//MySQL数据库的连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1.加载数据库驱动
		Class.forName(DBDRIVER);
		//2.获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3.实例化PreparedStatement
		String sql="SELECT name,note FROM userclob WHERE id=?";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		pstmt.setInt(1,1);
		//4.获取结果集,并输出数据
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			//输出名字
			String name=rs.getString(1);
			System.out.println("姓名:"+name);
			//输出大数据文本
			StringBuffer note=new StringBuffer();
			InputStream input=rs.getAsciiStream(2);
			Scanner scan=new Scanner(input);
			scan.useDelimiter("\r\n");
			while(scan.hasNext()){
				note.append(scan.next()).append("\n");
			}
			System.out.println("内容:"+note);
			input.close();
		}
		//5.关闭数据库连接
		pstmt.close();
		conn.close();
	}
}

步骤:

1.加载数据库驱动

Class.forName(DBDRIVER);

2.获取数据库连接

Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);

3.实例化PreparedStatement对象

PreparedStatement pstmt=conn.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();

4.获取Clob文本的输入流并进行其他操作

InputStream input=rs.getAsciiStream(colIndex);

5.关闭数据库连接

pstmt.close();
conn.close();

(2)使用getClob()读取内容

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Clob;
public class ClobDemo03{
	//MySQL的数据库驱动
	public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	//MySQL数据库的连接地址
	public static final String DBURL="jdbc:mysql://localhost:3306/mldn?useSSL=false&serverTimezone=UTC";
	//MySQL数据库的连接用户名
	public static final String DBUSER="root";
	//MySQL数据库的连接密码
	public static final String DBPASS="root";

	public static void main(String[] args) throws Exception{
		//1.加载数据库驱动
		Class.forName(DBDRIVER);
		//2.获取数据库连接
		Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		//3.实例化PreparedStatement对象
		String sql="SELECT name,note FROM userclob WHERE id=?";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		pstmt.setInt(1,2);
		//4.获取结果集,并输出数据
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			String name=rs.getString("name");
			System.out.println("姓名:"+name);
			Clob c=rs.getClob("note");
			String note=c.getSubString(1,(int)c.length());
			System.out.println("内容:"+note);
			c.truncate(100);
			System.out.println("部分读取内容:"+c.getSubString(1,(int)c.length()));
		}
		//5.关闭数据库连接
		pstmt.close();
		conn.close();
	}
}

步骤:

1.加载数据库驱动

Class.forName(DBDRIVER);

2.获取数据库连接

Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);

3.实例化PreparedStatement对象

PreparedStatement pstmt=conn.prepareStatement(sql);

4.获取结果集,并输出数据

ResultSet rs=pstmt.executeQuery();
Clob c=rs.getString("note");
String note=c.getSubString(1,(int)c.length());

5.关闭数据库连接

pstmt.close();
conn.close();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值