java多线程保存oracle的blob字段在本地生成图像
前些日子折腾的在线拍照,由于只是更新blob字段,没有在本地保存照片,导致客户拍脑门想要的时候不能马上拿出来。没说的谁让顾客是上帝呢,做吧。使用线程池创建三个线程让自定一个线程目标共享(也就是把表里的记录分成n组同时执行导出)。程序很简单,一共四个类和一个ojdbc14.jar包。由于sql语句写错了造成多个线程对一个文件进行写操作,害的我查了半天。
首先定义分页对象也就是每个线程要处理的数据量(通过传入的总页数和总行数得到每页数量)
package com.main;
import java.util.ArrayList;
import java.util.List;
public class PageVO {
private String startRowNum;//返回查询的起始行
private String endRowNum;//返回查询的终止行
private int totalRows; // 数据查询总记录数
private int totalPages; // 分成页数
private int pageRows;//每页行数
public PageVO(){
}
public PageVO(int totalRows,int totalPages){
this.totalPages = totalPages;
this.totalRows = totalRows;
}
public PageVO(String startNum,String endNum){
this.startRowNum = startNum;
this.endRowNum = endNum;
}
public String getStartRowNum() {
return startRowNum;
}
public void setStartRowNum(String startRowNum) {
this.startRowNum = startRowNum;
}
public String getEndRowNum() {
return endRowNum;
}
public void setEndRowNum(String endRowNum) {
this.endRowNum = endRowNum;
}
public List<PageVO> getPageVOList(){
List<PageVO> list = new ArrayList<PageVO>();
pageRows = totalRows/totalPages;
int currentRow = 1;//定义起始值
for (int i = 0; i<totalPages; i ++){
list.add(new PageVO(new Integer(currentRow).toString(),new Integer(pageRows + currentRow).toString()));
currentRow = currentRow + pageRows + 1;
}
return list;
}
}
其次获得connection类
package com.main;
impo
相关文档:
首先需要知道的是,MP3文件的文件信息都放在文件最后的128个字节里面,这128个字节分别存储的信息如下:
char Header[3]; /* 标签头必须是"TAG"否则认为没有标签 */
char Title[30]; /* 标题 */
char Artist[30]; /* 作者&n ......
当Java程序创建一个类的实例或者数组时,都在堆中为新的对象分配内存。虚拟机中只有一个堆,所有的线程都共享它。
1、垃圾收集(Garbage Collection)
垃圾收集是释放没有被引用的对象的主要方法。它也可能会为了减少堆的碎片,而移动对象。 ......
Java 3D虽然能支持众多的外部3D模型文件,但能支持被Java 3D使用的外部模型文件仅为.obj和.lwd两种;分别对应ObjectFile类和Lw3dLoader类。相比之下几款主流的3D建模软件都能生成.obj格式的文件,因此本文主要介绍使用ObjectFile类载入.obj文件的方法。
ObjectFile类有三个构造方法,分别为:
ObjectFile()
ObjectFile( ......
1. 代理模式主要有两种:静态代理和动态代理
2. 静态代理:
比如要在输出“HelloWorld”前打印一个字符串“Welcome”
A:先定义一个接口类
Java代码
package ttitfly.proxy;
public interface HelloWo ......