JDBC保存文件(CLOB)

PreparedStatement的setCharacterStream() 方法用于将字符信息存储到MySQL数据库中。

1 setCharacterStream方法

重载方法1:

public void setBinaryStream(int paramIndex,InputStream stream)throws SQLException

重载方法2:

public void setBinaryStream(int paramIndex,InputStream stream,long length)throws SQLException

2 JDBC保存文件的示例

2.1 创建表

为了将文本文件存储到数据库中,我们建立一张file_test表,表中使用了LONGTEXT(字符大对象)字段类型,建表语句如下:

CREATE TABLE `file_test` (
   `id` INT(11) NOT NULL AUTO_INCREMENT,
   `name` VARCHAR(100) DEFAULT NULL,
   `content` LONGTEXT,
   PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8

注意:关于字符大对象类型,不同数据库的类型名称不一样。

  • Oracle:只有CLOB类型
  • MySQL:
类型 存储大小
Text 最大长度65535个字节
MediumText 最大长度 16777215 个字节
LongText 最大长度4294967295个字节

2.2 准备需要保存的文件

我们需要准备一个写了内容的文本文件,如:d:/upload/test.txt。

2.3 编写InsertFile类

package com.yiidian;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.sql.*;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class InsertFile{
    public static void main(String args[])throws Exception {
        try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection con = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/test", "root", "root");

            PreparedStatement ps=con.prepareStatement(
                    "insert into file_test(name,content) values(?,?)");

            File f=new File("d:\\upload\\test.txt");
            FileReader fr=new FileReader(f);

            ps.setString(1,"test.txt");
            ps.setCharacterStream(2,fr,(int)f.length());
            int i=ps.executeUpdate();
            System.out.println(i+" 条记录被影响!");

            con.close();
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

2.4 运行测试

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码