这次以MySQL与Oralce为例。
先看表结构把:
------------------------处理大数对象----------------- ------------------------MySQL---------------------- --有4种text类型:tinytext、text、mediumtext和longtext create table t_clob ( id integer , resume longtext, primary key(id) ); --有4种blob类型:tinyblob、blob、mediumblob和longblob create table t_blob ( id integer , photo longblob, primary key(id) ); -----------------------Oracle------------------------ --clob create table t_clob ( id integer , resume clob, primary key(id) ); --blob create table t_blob ( id integer , photo blob, primary key(id) );
先考虑Clob类型的,下面的代码适用于MySQL与Oralce
package org.monday.demo; import java.io.File; import java.io.FileReader; import java.io.PrintWriter; import java.io.Reader; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import org.monday.util.JdbcUtil; /** * Clob大文本数据操作 */ public class ClobMain { private static String INSERT_CLOB = "insert into t_clob(id,resume)values(?,?)"; private static String SELECT_CLOB = "select * from t_clob where id=?"; @Test public void insert() { Connection conn = null; PreparedStatement pstmt = null; try { File file = new File("src/电子商务.txt"); Reader reader = new FileReader(file); conn = JdbcUtil.getConnection(); pstmt = conn.prepareStatement(INSERT_CLOB); pstmt.setInt(1, 1); pstmt.setCharacterStream(2, reader, (int) file.length()); pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.release(conn, pstmt, null); } } @Test public void read() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = JdbcUtil.getConnection(); pstmt = conn.prepareStatement(SELECT_CLOB); pstmt.setInt(1, 1); rs = pstmt.executeQuery(); if (rs.next()) { Reader reader = rs.getCharacterStream("resume"); PrintWriter out = new PrintWriter(System.out); // 打印到控制台 // PrintWriter out= new PrintWriter("src/out.txt"); // 打印到文本 try { int len = 0; char[] buffer = new char[1024]; while ((len = reader.read(buffer)) > 0) { out.write(buffer, 0, len); } } finally { if (reader != null) { reader.close(); } out.close(); } } } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.release(conn, pstmt, rs); } } }
接下来是Blob类型,这个MySQL与Oracle还是有些不一样的。看仔细了。。
package org.monday.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import org.monday.util.JdbcUtil; /** * Blob图片数据操作 * MySQL与Oralce有所不同 */ public class BlobMain { private static String INSERT_BLOB = "insert into t_blob(id,photo)values(?,?)"; private static String SELECT_BLOB = "select * from t_blob where id=?"; @Test public void insert() { Connection conn = null; PreparedStatement pstmt = null; try { File file = new File("src/王若琳.jpg"); InputStream in = new FileInputStream(file); conn = JdbcUtil.getConnection(); pstmt = conn.prepareStatement(INSERT_BLOB); pstmt.setInt(1, 1); pstmt.setAsciiStream(2, in, (int) file.length()); pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.release(conn, pstmt, null); } } @Test public void read() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = JdbcUtil.getConnection(); pstmt = conn.prepareStatement(SELECT_BLOB); pstmt.setInt(1, 1); rs = pstmt.executeQuery(); if (rs.next()) { InputStream in = rs.getBlob("photo").getBinaryStream(); // 或者InputStream in = rs.getAsciiStream("photo"); 但是这个却Oralce不好用 OutputStream out = new FileOutputStream("src/out.jpg"); try { int len = 0; byte[] b = new byte[1024]; while ((len = in.read(b)) > 0) { out.write(b, 0, len); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.release(conn, pstmt, rs); } } /** * Oralce插入Blob类型很特殊 */ @Test public void insert_oralce() { // 插入Oralce用的 String INSERT_BLOB_ORACLE = "insert into t_blob(id,photo)values(?,empty_blob())"; // empty_blob()固定的 String SELECT_BLOB_ORACLE = "select * from t_blob where id=? for update"; // for update 固定的,不可去 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 不用开启事务,网上传说要开启事务 // conn.setAutoCommit(false); conn = JdbcUtil.getConnection(); // 插入一个指针 pstmt = conn.prepareStatement(INSERT_BLOB_ORACLE); pstmt.setInt(1, 1); pstmt.executeUpdate(); // 读取插入的那个指针 pstmt = conn.prepareStatement(SELECT_BLOB_ORACLE); pstmt.setInt(1, 1); rs = pstmt.executeQuery(); if (rs.next()) { InputStream in = new FileInputStream(new File("src/王若琳.jpg")); // 得到java.sql.Blob对象后强制转换为oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("photo"); OutputStream out = blob.getBinaryOutputStream(); try { byte[] b = new byte[blob.getBufferSize()]; int len; while ((len = in.read(b)) > 0) { out.write(b, 0, len); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.release(conn, pstmt, rs); } } }
之前,看过网上的一些列子,感觉写的虎头蛇尾的。。。自己整理了一下。
其中Oralce的插入Blob类型,很特殊。
说点特别的:
一般来说,网站的大数据类型的文件,不会直接存到数据库,会存放在一定的服务器目录下。
所以,貌似这样的代码用的机会很少。但是,与中情况还是可以用用滴。
比如:你有心爱女孩的照片,但却不是你的女友或者老婆的,这个时候,你就可以把她的照片存到数据库中。
凡此种种,你懂的...
相关推荐
在处理大数据查询时,经常遇到的一个问题是由于查询结果集过大而导致的性能瓶颈,尤其是当这些数据需要被加载到客户端应用程序的内存中时。这种情况下的常见错误是`Java.lang.OutOfMemoryError:Java heap space`,即...
SQL Server 2000虽然较旧,但在处理大数据方面也有其独特之处。它提供了IMAGE数据类型来存储二进制数据,以及TEXT和NTEXT数据类型存储长文本数据。然而,由于SQL Server 2000已不再得到官方支持,开发者通常会倾向于...
Java是一种多用途、跨平台的编程语言,其稳定性和高性能使其成为处理大数据的理想选择。特别是在大数据框架如Hadoop和Spark中,Java被广泛用于编写MapReduce任务和Spark作业。 1. **Hadoop与Java**:Hadoop是Apache...
大数据技术之Hive 大数据技术之Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质是将HQL转化成MapReduce程序。Hive处理的数据存储在HDFS,分析数据底层的实现...
JDBC提供了一种标准的方式来连接各种类型的数据库,简化了数据库操作,使得Java成为开发数据库驱动的应用程序的理想选择。 总的来说,大数据开发工程师实习不仅要求扎实的技术基础,还需要不断学习和适应快速发展的...
Java在处理大数据时,面临的主要挑战是如何有效地管理内存,避免内存溢出。处理大数据的关键在于采用合适的方法和技术,包括分解、压缩、并行处理和利用临时文件。以下是一些具体的处理策略: 1. 分解数据:面对大...
标题中的“hgdb-6.0.0-jdbc42.jar”指的是一个特定版本的Hypertable(可能被简写为hgdb)数据库的Java JDBC驱动程序,具体是...配合提供的编程资料,可以帮助开发者快速上手,高效地利用Hypertable处理大数据任务。
SQL Server 2008 JDBC驱动还支持一些高级特性,如读写分离、分布式事务、大数据类型处理(如XML和二进制数据)、JDBC批处理以及SQL Server特有的功能(如Service Broker或Integration Services)。 9. **错误处理*...
它将SQL查询转换为MapReduce任务在Hadoop集群上运行,因此适合处理和分析大数据。 Hive JDBC的使用涉及到以下几个关键知识点: 1. **安装与配置**:下载Hive JDBC的JAR文件后,需要将其添加到运行环境中,通常是...
在处理大数据时,Spark作为一个强大的分布式数据处理框架,能够通过其弹性分布式数据集(RDD)和DataFrame等数据结构,实现数据的并行处理。然而,在使用Spark与数据库交互时,尤其是使用JDBC(Java Database ...
- 高级特性:如事务控制、存储过程调用、大数据类型支持等。 在实际开发中,确保正确配置JDBC驱动类路径,并在Java代码中加载驱动(例如,`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")`),...
6. **分页查询**:在处理大数据时,分页查询是常见的需求。clickhouse-jdbc可能提供了分页查询的API,如使用`LIMIT`和`OFFSET`。 7. **连接池**:在生产环境中,使用连接池如HikariCP或C3P0来管理JDBC连接是最佳...
在Java的持久化框架Hibernate中,处理大数据类型如Clob(Character Large Object)和Blob(Binary Large Object)是一项常见的任务。这些数据类型通常用于存储大量的文本数据(Clob)和二进制数据(Blob),例如长篇...
《Elasticsearch-JDBC连接MySQL实现大数据搜索》 在当今的大数据时代,高效的数据检索与分析成为了企业核心竞争力的一部分。Elasticsearch作为一个强大的开源搜索引擎,以其分布式、实时、灵活的特性,广泛应用于...
通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次数据库连接中执行多次SQL语句的操作,这种方式能显著提高程序性能,尤其是在处理大量数据时。 **批量插入*...
它还提供了对Unicode的支持,能够处理大数据类型,如BLOB和CLOB,并且可以在不同版本的SQL Server之间进行迁移。 在实际开发中,为了确保最佳性能和安全性,你应该始终使用最新的SQLJDBC驱动版本,因为每个新版本...
在学习过程中,你可以通过这些PDF文档深入理解JDBC的使用方式,包括如何配置数据源、如何处理大数据、如何优化JDBC性能等方面。每个PDF都可能涵盖不同的主题,例如JDBC API的详解、最佳实践、示例代码等,对于理解...