当前位置: 首页 > wzjs >正文

站长工具在线免费观看广告推销

站长工具在线免费观看,广告推销,学做系统的网站,后台管理系统界面以下是使用 JDBC 操作 BLOB(二进制大对象)和 CLOB(字符大对象) 的完整示例代码,包含 插入、读取 操作及详细注释: 1. 数据库表结构(MySQL 示例) CREATE TABLE files (id INT AUTO_I…

以下是使用 JDBC 操作 BLOB(二进制大对象)和 CLOB(字符大对象) 的完整示例代码,包含 插入、读取 操作及详细注释:


1. 数据库表结构(MySQL 示例)

CREATE TABLE files (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255),content BLOB,      -- 存储二进制文件(如图片、PDF)text_content CLOB  -- 存储大文本(如长文章)
);

2. Java 代码示例

import java.io.*;
import java.sql.*;public class BlobClobExample {// 数据库连接参数private static final String URL = "jdbc:mysql://localhost:3306/mydatabase";private static final String USER = "root";private static final String PASSWORD = "your_password";public static void main(String[] args) {Connection conn = null;try {// 1. 加载驱动并获取连接conn = DriverManager.getConnection(URL, USER, PASSWORD);conn.setAutoCommit(false); // 关闭自动提交,启用事务// 2. 插入 BLOB 和 CLOB 数据insertBlobAndClob(conn, "test_image.jpg", "large_text.txt");// 3. 查询并读取 BLOB 和 CLOB 数据readBlobAndClob(conn, 1);// 4. 提交事务conn.commit();System.out.println("操作成功,事务已提交!");} catch (SQLException e) {System.out.println("发生异常,事务回滚!");try {if (conn != null) conn.rollback();} catch (SQLException ex) {ex.printStackTrace();}e.printStackTrace();} finally {try {if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}// ------------------------ 插入 BLOB 和 CLOB 数据 ------------------------private static void insertBlobAndClob(Connection conn, String blobFilePath, String clobFilePath) throws SQLException, IOException {// SQL 语句String sql = "INSERT INTO files (name, content, text_content) VALUES (?, ?, ?)";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {// 设置 name 参数pstmt.setString(1, "Sample File");// 设置 BLOB 参数(二进制文件)try (FileInputStream fis = new FileInputStream(blobFilePath)) {pstmt.setBinaryStream(2, fis, (int) new File(blobFilePath).length());}// 设置 CLOB 参数(文本文件)try (FileReader fr = new FileReader(clobFilePath)) {pstmt.setCharacterStream(3, fr, (int) new File(clobFilePath).length());}pstmt.executeUpdate();}}// ------------------------ 读取 BLOB 和 CLOB 数据 ------------------------private static void readBlobAndClob(Connection conn, int id) throws SQLException, IOException {// SQL 语句String sql = "SELECT name, content, text_content FROM files WHERE id = ?";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setInt(1, id);try (ResultSet rs = pstmt.executeQuery()) {if (rs.next()) {String name = rs.getString("name");Blob blob = rs.getBlob("content");Clob clob = rs.getClob("text_content");// 保存 BLOB 到文件saveBlobToFile(blob, "output_image.jpg");System.out.println("BLOB 文件已保存!");// 保存 CLOB 到文件saveClobToFile(clob, "output_text.txt");System.out.println("CLOB 文件已保存!");}}}}// ------------------------ 辅助方法 ------------------------// 将 Blob 保存为文件private static void saveBlobToFile(Blob blob, String outputFilePath) throws SQLException, IOException {try (InputStream is = blob.getBinaryStream();FileOutputStream fos = new FileOutputStream(outputFilePath)) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = is.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);}}}// 将 Clob 保存为文件private static void saveClobToFile(Clob clob, String outputFilePath) throws SQLException, IOException {try (Reader reader = clob.getCharacterStream();FileWriter fw = new FileWriter(outputFilePath)) {char[] buffer = new char[4096];int bytesRead;while ((bytesRead = reader.read(buffer)) != -1) {fw.write(buffer, 0, bytesRead);}}}
}

代码说明

1. 插入数据(BLOB 和 CLOB)
  • BLOB 操作

    • 使用 FileInputStream 读取本地文件。
    • 通过 setBinaryStream() 将输入流传递给 PreparedStatement
    • 参数 2 对应 SQL 中的 ? 占位符(第二个参数)。
  • CLOB 操作

    • 使用 FileReader 读取文本文件。
    • 通过 setCharacterStream() 将字符流传递给 PreparedStatement
2. 读取数据(BLOB 和 CLOB)
  • BLOB 读取

    • 通过 getBlob("content") 获取 Blob 对象。
    • 使用 getBinaryStream() 获取输入流,逐块读取并写入目标文件。
  • CLOB 读取

    • 通过 getClob("text_content") 获取 Clob 对象。
    • 使用 getCharacterStream() 获取字符流,逐块读取并写入目标文件。
3. 关键注意事项
  • 流操作

    • 使用缓冲区(byte[]char[])逐块读写,避免内存不足。
    • 确保所有流在使用后关闭(通过 try-with-resources)。
  • 事务管理

    • 大文件操作建议在事务中执行,确保数据一致性。
    • 插入和读取操作需在同一个事务中完成(示例中已关闭自动提交)。
  • 异常处理

    • 捕获 SQLExceptionIOException,确保资源正确释放。
  • 数据库兼容性

    • 不同数据库的 BLOB/CLOB 类型可能不同(如 Oracle 的 BLOBCLOB,MySQL 的 LONGBLOBLONGTEXT)。

运行前准备

  1. 依赖:确保项目包含 MySQL JDBC 驱动(如 mysql-connector-java)。
  2. 文件路径
    • blobFilePath:替换为实际二进制文件路径(如 D:/test_image.jpg)。
    • clobFilePath:替换为实际文本文件路径(如 D:/large_text.txt)。

示例输出

BLOB 文件已保存!
CLOB 文件已保存!
操作成功,事务已提交!

扩展建议

  • 分块读取优化
    对于超大文件,可调整缓冲区大小(如 8192)或使用 ResultSet 的流式处理(getBinaryStream() 直接写入文件)。

  • 性能优化

    • 使用 setBlob()setClob() 方法,直接传递 InputStreamReader,避免内存缓存。
  • 安全性
    确保文件路径权限正确,防止越权访问。

通过此示例,你可以实现对大文件的高效存储和读取,适用于图片、文档等二进制数据或长文本的存储场景。

http://www.dtcms.com/wzjs/276361.html

相关文章:

  • jsp动态网站开发实用教程做网页设计一个月能挣多少
  • 铁岭免费网站建设seo关键词排名优化怎么样
  • 深圳开发公司温州seo网站推广
  • 綦江建设银行网站品牌网络营销策划方案
  • 交互式网站模板四川seo推广公司
  • 网站建设公司上海做网站公司排名百度服务中心人工客服
  • 豫港大厦 做网站广告联盟接单平台
  • 域名申请好了 要怎么做网站企业qq官方下载
  • 网站设计有什么前景seo网站推广主要目的不包括
  • wordpress模板旅游排名优化公司哪家效果好
  • wordpress 关闭网站广州灰色优化网络公司
  • 武汉网站设计站建设2345网址大全
  • 教育类网站配色百度青岛代理公司
  • 广州营销型网站建设公司视频营销成功的案例
  • 网站快速建设入门教程网店如何引流与推广
  • 网站制作步骤流程图济南网络推广网络营销
  • 漯河公司做网站湖南长沙seo教育
  • 长沙做网站好的公司有哪些怎么在百度推广自己的网站
  • 上海医疗 网站制作地推一手项目平台
  • 如何网站平台建设好临沂seo建站
  • 使用vue.js做企业网站上海网站建设
  • 怎么找到做网站的客户优化seo是什么
  • wordpress log in杭州seo优化
  • 电子商务网站建设与维护pdf搜索引擎优化师工资
  • 做网站开发的过程厦门seo培训学校
  • 乡镇美丽乡村建设网站信息谷歌浏览器下载手机版安卓官网
  • 张家港网站制作公司数据推广公司
  • 做网站一定要正版系统吗整站快速排名
  • 福州网站关键词的搜索引擎优化
  • 好分数的开发公司网站建设公司seo关键词