`
coolxing
  • 浏览: 873795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:97159
社区版块
存档分类
最新评论

使用JDBC处理文本数据或二进制数据

    博客分类:
  • JDBC
阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]


LOB(Large Object)分为CLOB和BLOB, CLOB表示文本数据, BLOB用于表示二进制数据.

MySql存储文本数据使用的是TEXT而不是CLOB, MySql中的TEXT和BLOB分别分为:

TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT, 占用的内存空间分别为256B, 64K, 16M, 64G.

TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB, 占用的内存空间同上.

如果LOB数据过大, 并不适合使用数据库处理, 因为处理这些数据需要长时间占用数据库的链接资源.


读取与存储TEXT数据:

/*
 * create table text_data(id int primary key auto_increment, resume text);
 */
public class TextData {
	@Test
	public void insertToDatabase() {
		Connection conn = null;
		PreparedStatement st = null;
		
		String sql = "insert into text_data(resume) values(?)";
		// 获得文本文件的绝对路径
		String path = TextData.class.getClassLoader().getResource("db.properties").getPath();
		File file = new File(path);
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			st.setCharacterStream(1, new FileReader(file), (int)file.length());
			st.executeUpdate();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}
	
	@Test
	public void readTextFromDatabase() {
		Connection conn = null;
		PreparedStatement st = null;
		ResultSet rs = null;
		Reader reader = null;
		FileWriter writer = null;
		
		String sql = "select resume from text_data where id=1";
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			if (rs.next()) {
				reader = rs.getCharacterStream("resume");
				writer = new FileWriter("d://db.properties");
				char[] chs = new char[1024];
				int len = 0;
				while((len = reader.read(chs)) != -1) {
					writer.write(chs, 0, len);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			FileUtils.fileClose(reader, writer);
			JdbcUtils.release(null, st, conn);
		}
	}
}

读取与存储二进制数据:

/*
 * create table blob_data(id int primary key auto_increment, resume blob);
 */
public class BlobData {
	@Test
	public void insertToDatabase() {
		Connection conn = null;
		PreparedStatement st = null;

		String sql = "insert into blob_data(resume) values(?)";
		// 获得文本文件的绝对路径
		String path = TextData.class.getClassLoader().getResource(
				"db.properties").getPath();
		File file = new File(path);
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			st.setBinaryStream(1, new FileInputStream(file), (int) file
					.length());
			st.executeUpdate();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}

	@Test
	public void readBlobFromDatabase() {
		Connection conn = null;
		PreparedStatement st = null;
		ResultSet rs = null;
		InputStream in = null;
		OutputStream out = null;

		String sql = "select resume from blob_data where id=1";
		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			rs = st.executeQuery();
			if (rs.next()) {
				in = rs.getBinaryStream("resume");
				out = new FileOutputStream("d://db.properties");
				byte[] buffer = new byte[1024];
				int len = 0;
				while((len = in.read(buffer)) != -1) {
					out.write(buffer, 0, len);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			FileUtils.streamClose(in, out);
			JdbcUtils.release(null, st, conn);
		}
	}
}
 
1
3
分享到:
评论

相关推荐

    SqlServer与Oracle保存与读取图片二进制流

    - **读取图片**:查询数据库获取`ImageData`,然后将返回的二进制数据写入响应流,用户端可以通过浏览器或其他方式显示图片。 3. **Oracle数据库与图片处理**: - **创建表结构**:Oracle提供`BLOB`类型来存储二...

    MySQL存取大文本及二进制文件(图片)

    - **BLOB** 类型用于存储二进制数据,有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB四种,分别可以存储不同大小的二进制数据。 - **TEXT** 类型则用于存储非二进制的大文本数据,有TINYTEXT、TEXT、MEDIUMTEXT和LONG...

    从数据库中读取二进制图片

    在关系型数据库中,如MySQL、Oracle或SQL Server,通常有特定的数据类型用于存储二进制数据,如BLOB(Binary Large Object)、VARBINARY或IMAGE。这些数据类型能容纳任意大小的二进制流,适合存储图片。 三、从...

    JPA完成单表注解配置说明包括日期,大文本,二进制文本,枚举

    `@Lob`注解用于大文本和二进制数据,`@Column(columnDefinition = "BLOB")`是针对特定数据库(如MySQL)的额外配置。`@Enumerated(EnumType.STRING)`则将枚举类型转化为字符串存储,便于数据库操作。 然后,我们...

    ReadImages_sourcel1r_dieq2j_读取SQL数据库二进制图片_

    在许多应用场景中,我们不仅需要存储文本、数字等常规数据,还可能需要存储图像等二进制数据。本文将深入探讨如何从SQL数据库中读取存储的二进制图片,并将其转换为可本地查看的文件。 首先,我们需要了解在SQL...

    使用JDBC数据接口存取Oracle LOB(大对象).pdf

    BLOB用于存储非文本的二进制数据,如图片、音频和视频文件,而CLOB则用于存储大文本数据,如长篇文章或文档。 接着,文章详细讲述了JDBC在访问Oracle数据库中的LOB数据时的作用。JDBC是Java连接关系数据库的标准...

    jdbc 处理clob类型字段

    在Oracle数据库中,CLOB可以用于存储非二进制的文本数据。 1. 插入CLOB数据: 在Java中,我们通常使用PreparedStatement来插入CLOB数据。首先,创建一个Clob对象,并将待插入的文本数据写入到Clob对象中,然后在SQL...

    JDBC+Hibernate将Blob数据写入Oracle

    在IT领域,尤其是在数据库...总之,无论是使用JDBC还是Hibernate,正确处理Oracle中的BLOB字段都是至关重要的,尤其是在处理大量二进制数据的应用场景下。掌握上述流程和技巧,能够有效提升数据操作的效率和安全性。

    java数据批量处理

    例如,使用`BufferedReader`或`FileInputStream`配合`DataInputStream`可以高效地读取文本文件或二进制文件。 2. CSV处理:Apache Commons CSV库提供了解析CSV文件的工具,适合处理结构化数据。 3. JSON处理:...

    JDBC.rar_MYSQL_MYSQL  数据类型_jdbc_jdbc mysql

    4. **二进制类型**:如`BLOB`(二进制大对象)、`BINARY`(二进制字符串)、`VARBINARY`(可变长度二进制字符串),在JDBC中通常映射为`java.sql.Blob`和`byte[]`。 5. **NULL类型**:`NULL`表示字段值为空,它在...

    使用Jdbc4操作Blob,Clob

    Blob通常用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储大量文本数据,如长篇的文本或XML文档。在JDBC4中,处理LOB对象变得更为直接和高效,主要归功于新增的`java.sql.Blob`和`java.sql.Clob`接口...

    各大数据库类型与JDBC中介数据类型的转换对比

    - **SQL Server**: 使用`BINARY`和`VARBINARY`类型,但不支持`BIT`作为二进制数据类型。 - **Oracle**: 支持`RAW`类型,类似于`BINARY`;不支持`BIT`类型。 - **DB2**: 支持`BINARY`和`BIT`类型。 - **JDBC**: `...

    JDBC学习笔记

    #### 十、用JDBC访问文本和二进制数据 - **文本数据**: - 将文本数据插入数据库。 - 从数据库中读取文本数据。 - **二进制数据**: - 插入图片等二进制数据。 - 从数据库中读取二进制数据。 #### 十一、JDBC...

    sqlite数据类型详细介绍+javaJDBC连接sqlite小例子

    5. BLOB:二进制大对象,用于存储任意二进制数据,如图片、文档等。 6. NUMERIC:这是一个动态类型,SQLite会根据值的类型自动选择INTEGER或REAL存储。 7. ANY:在某些特殊情况下,SQLite允许使用ANY作为数据类型,...

    使用JDBC和Hibernate来写入Blob型数据到Oracle中

    BLOB类型用于存储非结构化的二进制数据,如图片、音频文件或大型文本文件。本教程将深入探讨如何利用Java的JDBC(Java Database Connectivity)和ORM框架Hibernate来处理Oracle数据库中的Blob型数据。 首先,我们...

    JDBC中的Results相关函数

    - `getBinaryStream()`: 获取Binary、VarBinary、LongVarBinary类型的数据,返回一个InputStream,以二进制流的形式读取数据。 5. Java对象类型的方法: - `getObject()`: 这是最通用的方法,可以用于获取任何...

    JDBC-MySQL-BLOB:基于MySQL,存储二进制大对象(BLOB)

    通过这个过程,开发者能够有效地在数据库中存储和检索二进制数据,如图片或其他文件。在JDBC-MySQL-BLOB-master这个项目中,你可能会找到更具体的实现示例和详细教程,帮助你进一步理解和应用这些概念。

    Oracle clob和blob在jdbc的应用

    这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如图片、文档或音频文件。在JDBC(Java Database Connectivity)中,我们可以使用特定的方法来操作这些类型的数据。 首先,我们需要建立与数据库...

    JDBC说明文档(英文版)

    - **高级数据类型**:深入解释`Blob`和`Clob`数据类型的特性和用途,通过示例演示如何在实际应用中使用这些类型存储和检索大容量文本或二进制数据。 #### 四、总结与展望 通过本教程的学习,开发者将掌握利用JDBC...

Global site tag (gtag.js) - Google Analytics