大数据操作这里,主要是分为cblob和blob两种类型数据的文件,前者主要存储一下长的字符串,后者主要通过二进制来存储一些图片、音频之类的,不过,在数据库中通常存的是图片或者视频的路径,很少存源文件。
1 clob 介绍
链接数据库的操作在前面文章已经介绍过,下面不在重复
PreperdStatement pstmt = con.preparestatement(insert into table values(?,?));
String str=”要存入长字符串”;
StringReader reader = new StringReader(str);
//StringReader这里运用这个方法主要是为了下面setCharacterStream方法服务,它的参数要求需要用到reader对象,StringReader方法主要是通过字符流的方式读取字符串
pstmt.setCharacterStream(index,reader,length),//第1个参数主要是对应sql语句中的第几个问号,第二个参数就是前面创建的StringReader对象,第三个参数是reader的长度。
2 blob介绍
主要存储一些图片之类的文件,前提别忘了在数据库创建该类型的字段。
思想主要是:先创建一个字段用来存入图片,先把这个字段存入一个空数据(empty_blob()),然后更新它,更新为图片或者音频。
1, String sql = (“insert into table values(empty_blob())”);
2, pstmt =con.preparedstatement(sql);
3, pstmt.executeUpdate();
这就成功的向里面插入了一个空值。然后查询这个空值并且更新它
1 sql=(”select * (blob字段名) from table where id=(对应的ID值) for update(尤其重要)”)
2 pstmt = con.preparedstatement(sql);
3 ResultSet rs = pstmt.executeQuery();
4 if(rs.next()){
5 Bolob b = (Bolob)rs.getBlob(“大数据字段名”);
6 OutPutStream os = b.setBinaryStream(1L);
7 InPutStream is = (当前类名).class.getResourceAsStream(“图片路径或者音频路径”);
8 Int len =0;
9 Byte [] temp = new Byte[1024];
10 while((len = is.read(temp))!=-1){
os.write(temp,0,len);
os.flush();
11 }
12 con.commit();
13 }
这样便完成了对图片的存储。读取出来是把输入流,输出流相反着写。
这里在提一个小知识,利用存储过程来进行数据库的存储,主要是运用CallBableStatement类来进行操作的,但是由于这个是Oracle独有的,兼容性上面存在一些差异。