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 运行测试
热门文章
优秀文章