使用dbutils工具向数据库中存储大数据
作者:网络转载 发布时间:[ 2013/12/16 9:28:38 ] 推荐标签:
dbutils可以简化对数据库的CRUD操作,但是使用dbutils向数据库中插入大数据时,不能像普通的JDBC那样进行通过字符流进行(可以节省内存)。而是需要将大数据(文本)全部读到内存中,在将其写入到数据库中。
即如下操作是错误的:
|
@Test
public void add() throws Exception{
String sql = "insert into resume(resume) values(?)";
String path = UserDaoImpl.class.getClassLoader().getResource("resume.txt").getPath();
File file = new File(path);
FileReader read = new FileReader(file);
Object param = read; //<span style="color:#cc33cc;">不能是一个字符流</span>
QueryRunner qr = new QueryRunner(JdbcC3p0Utils.getDataSource());
qr.update(sql, param);
}
|
此处resume在数据库中对应的是一个clob类型,因此?代表的哪个参数也必须是clob类型,Clob是个接口类,其中实现这个接口的类有SerialClob,其提供了两个构造方法
|
SerialClob(char[])和SerialClob(Clob),因此正确的写法如下:
@Test
public void addClobTest() throws Exception{
String sql = "insert into resume(resume) values(?)";
String path = UserDaoImpl.class.getClassLoader().getResource("resume.txt").getPath();
File file = new File(path);
FileReader read = new FileReader(file);
char[] buf = new char[(int) file.length()];
read.read(buf);
Object param = new SerialClob(buf);
QueryRunner qr = new QueryRunner(JdbcC3p0Utils.getDataSource());
qr.update(sql, param);
}
|
//查询结果如下:
|
mysql> select * from resume;
+----+---------------------------------------------------------------+
| id | resume |
+----+---------------------------------------------------------------+
| 1 | aaaaaaaaaaaaaaaaaddddddddddddddddddd
xsdssssssssssssssssssss |
+----+---------------------------------------------------------------+
|
写入成功!!!
因为操作大文本数据,dbutils工具必须将这个大文本读到内存中,当文本很大时,这种做法不可取,所以要是需要操作大文本或二进制数据时,好不要使用dbutils.
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com