根据查询结果数据条数调整:1.流式查询优点:有时不会OOM问题是大量的数据。缺点:占用数据库时间较长,可能造成网络拥塞。//连接数据库(略)Class.forName("driver");Connectionconnection=DriverManager.getConnection(url,user,password)List>result=newArrayList<>();//ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY打开流式查询PreparedStatementps=connection.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);longl1=System.currentTimeMillis();//设计每次查询的大小ps.setFetchSize(1000);longl2=System.currentTimeMillis();LOG.info("查询时间1000大小:"+(l2-l1));ResultSetrs=ps.executeQuery();//返回一个结果集对象//使用sql查询获取结果集//使用反射创建实体类的对象//获取结果街道的别名Stud_id获取JDBCmetadata//获取结果集每一列的值,结合上一步得到一个Map键值对//Key:column列的别名value:列的值//使用反射来赋值实体类对象的属性//该属性是Map的键值,Map的值//获取元数据ResultSetMetaDatarsmd=rs.getMetaData();MapmapMetaData=newHashMap<>();//打印列的列名while(rs.next()){//在数据表中获取一行符合要求的数据,放入Map中for(inti=0;imap=newHashMap<>();if(mapMetaData.size()>0){for(Map.Entryentry:mapMetaData.entrySet()){Stringfieldkey=entry.getKey();//字段名Objectfieldvalue=entry.getValue();//对应的值//确定附件属性//map"fileData":"fileData"if(CollectionUtil.isNotEmpty(fileDataMap)&&StringUtil.isNotEmpty(blobFile)&&fieldkey.equals(fileDataMap.get(EfmConfigConstant.FILE_DATA))&&null!=fieldvalue){文件file1=新文件(blobFile);如果(!file1.getParentFile().exists()){布尔mkdirs=file1.mkdirs();if(!mkdirs){LOG.error("创建文件失败");}}//创建输出流Blobblob=rs.getBlob(fieldkey);尝试(InputStreamin=blob.getBinaryStream();FileOutputStreamfile=newFileOutputStream(file1.getPath()+File.separator+mapMetaData.get(EfmConfigConstant.FILE_NAME))){intlen=(int)blob.length();byte[]buffer=newbyte[len];//创建缓冲区while((len=in.read(buffer))!=-1){file.write(buffer,0,len);}}}map.put(fieldkey,fieldvalue);}}result.add(地图);2、常用查询优点:应用代码简单,数据量小时运行速度快。缺点:数据量大时会出现OOM问题。//连接数据库(略)Class.forName("driver");Connectionconnection=DriverManager.getConnection(url,user,password)List>result=newArrayList<>();PreparedStatementps=connection.prepareStatement(sql);longl1=System.currentTimeMillis();//设计客户端等待超时时间(s)ps.setQueryTimeout(360);longl2=System.currentTimeMillis();LOG.info("查询时间1000大小:"+(l2-l1));ResultSetrs=ps.executeQuery();//返回一个结果集对象//使用sql查询获取结果集//使用反射创建实体类的对象//获取结果street的别名Stud_id获取JDBC的元数据//获取结果集每一列的值,结合上一步得到一个Map键值对//Key:列别名value:列值//使用反射给实体类对象属性赋值//属性是Map的键值和Map的值//获取元数据ResultSetMetaDatarsmd=rs.getMetaData();MapmapMetaData=newHashMap<>();//打印一列名称while(rs.next()){//获取数据表中满足要求的一行数据,放入Map中for(inti=0;imap=newHashMap<>();if(mapMetaData.size()>0){for(Map.Entryentry:mapMetaData.entrySet()){Stringfieldkey=entry.getKey();//字段名Objectfieldvalue=entry.getValue();//对应值//判断附件属性//map"fileData":"fileData"如果(CollectionUtil.isNotEmpty(fileDataMap)&&StringUtil.isNotEmpty(blobFile)&&fieldkey.equals(fileDataMap.get(EfmConfigConstant.FILE_DATA))&&null!=fieldvalue){Filefile1=newFile(blobFile);如果(!file1.getParentFile().exists()){布尔mkdirs=file1.mkdirs();if(!mkdirs){LOG.error("构建文件失败");}}//建立输出流Blobblob=rs.getBlob(fieldkey);try(InputStreamin=blob.getBinaryStream();FileOutputStreamfile=newFileOutputStream(file1.getPath()+File.separator+mapMetaData.get(EfmConfigConstant.FILE_NAME))){intlen=(int)blob.length();byte[]buffer=newbyte[len];//创建缓冲区while((len=in.read(buffer))!=-1){file.write(buffer,0,len);}}}map.put(fieldkey,fieldvalue);}}result.add(地图);将Blob类型的数据读成压缩包格式处理成文件读入字节数组://errorFile是自定义文件生成路径//jdbc查询得到Blob,生成压缩包文件StringcolumnLabel=rsmd.getColumnLabel(1);BlobcolumnValue=rs.getBlob(columnLabel);InputStreamins=columnValue.getBinaryStream();文件file=newFile(errorFile,"cs.zip");FileUtils.copyInputStreamToFile(ins,文件);ZipFilezipFile=newZipFile(file,Charset.default字符集());流signStream=zipFile.stream();流zipStream=zipFile.stream();//断言PredicatesignTxt=ze->ze.getName().contains("sign,txt");PredicatezipTxt=ze->ze.getName().endsWith(".zip");//过滤OptionalsignInfo=(Optional)signStream.filter(signTxt).findFirst();可选zipInfo=(可选)zipStream.filter(zipTxt).findFirst();ins.close();zipFile.close();//获取文件名StringfileName=rsmd.getColumnLabel(2);对象文件名=rs.getObject(文件名);//解压zip文件Stringname=ZipUtils.unzip(file.getPath(),errorFile+File.separator);//删除文件file.delete();//读入字节数组byte[]bytes=FileUtil.readFile2Bytes(newFile(errorFile+File.separator+name),true);
jdbc查询数据库流式查询和普通查询,Blob数据读入压缩包生成字节数组相关文章