使用dbutils工具向数据库中存储大数据

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; //不能是一个字符流
		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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值