查询、存储过程、函数调用中使用行处理器-bboss persistent框架行处理器使用
bboss persistent框架提供能了行处理器的功能,通过行处理器,用户可以自行处理查询结果集、存储过程out参数、存储函数out参数。本文分别举例说明。
- 在查询中使用行处理器
假设通过PreparedDBUtil执行以下预编译查询:select * from testnewface where object_id < ? --查询testnewface中object_id小于设定参数的所有记录
结果集将被封装成TestNewface对象列表返回。
表testnewface的结构如下:
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED NOT NULL DATE
LAST_DDL_TIME NOT NULL DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
TestNewface对象结构如下,每个属性和表testnewface列名相对应:
public class TestNewface {
String OWNER ;
String OBJECT_NAME ;
String SUBOBJECT_NAME ;
int OBJECT_ID ;
int DATA_OBJECT_ID ;
String OBJECT_TYPE ;
Date CREATED ;
Date LAST_DDL_TIME ;
String TIMESTAMP ;
String STATUS ;
String TEMPORARY ;
String GENERATED ;
String SECONDARY ;
public String getOWNER() {
return OWNER;
}
public void setOWNER(String owner) {
OWNER = owner;
}
public String getOBJECT_NAME() {
return OBJECT_NAME;
}
public void setOBJECT_NAME(String object_name) {
OBJECT_NAME = object_name;
}
public String getSUBOBJECT_NAME() {
return SUBOBJECT_NAME;
}
public void setSUBOBJECT_NAME(String subobject_name) {
SUBOBJECT_NAME = subobject_name;
}
public int getOBJECT_ID() {
return OBJECT_ID;
}
public void setOBJECT_ID(int object_id) {
OBJECT_ID = object_id;
}
public int getDATA_OBJECT_ID() {
return DATA_OBJECT_ID;
}
public void setDATA_OBJECT_ID(int data_object_id) {
DATA_OBJECT_ID = data_object_id;
}
public String getOBJECT_TYPE() {
return OBJECT_TYPE;
}
public void setOBJECT_TYPE(String object_type) {
OBJECT_TYPE = object_type;
}
public Date getCREATED() {
return CREATED;
}
public void setCREATED(Date created) {
CREATED = created;
}
public Date getLAST_DDL_TIME() {
return LAST_DDL_TIME;
}
public void setLAST_DDL_TIME(Date last_ddl_time) {
LAST_DDL_TIME = last_ddl_time;
}
public String getTIMESTAMP() {
return TIMESTAMP;
}
public void setTIMESTAMP(String timestamp) {
TIMESTAMP = timestamp;
}
public String getSTATUS() {
return STATUS;
}
public void setSTATUS(String status) {
STATUS = status;
}
public String getTEMPORARY() {
return TEMPORARY;
}
public void setTEMPORARY(String temporary) {
TEMPORARY = temporary;
}
public String getGENERATED() {
return GENERATED;
}
public void setGENERATED(String generated) {
GENERATED = generated;
}
public String getSECONDARY() {
return SECONDARY;
}
public void setSECONDARY(String secondary) {
SECONDARY = secondary;
}
public String toString()
{
StringBuffer ret = new StringBuffer();
ret.append("[OWNER=").append(OWNER).append("]")
.append("[OBJECT_NAME=").append(OBJECT_NAME).append("]")
.append("[SUBOBJECT_NAME=").append(SUBOBJECT_NAME).append("]")
.append("[OBJECT_ID=").append(OBJECT_ID).append("]")
.append("[DATA_OBJECT_ID=").append(DATA_OBJECT_ID).append("]")
.append("[OBJECT_TYPE=").append(OBJECT_TYPE).append("]")
.append("[CREATED=").append(CREATED).append("]")
.append("[LAST_DDL_TIME=").append(LAST_DDL_TIME).append("]")
.append("[TIMESTAMP=").append(TIMESTAMP).append("]")
.append("[STATUS=").append(STATUS).append("]")
.append("[TEMPORARY=").append(TEMPORARY).append("]")
.append("[GENERATED=").append(GENERATED).append("]")
.append("[SECONDARY=").append(SECONDARY).append("]");
return ret.toString();
}
}
首先看一下不使用行处理器的查询方法:
import com.frameworkset.common.poolman.PreparedDBUtil;
import com.frameworkset.common.poolman.handle.RowHandler;
。。。。
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedSelect("select owner from testnewface where object_id < ?");
dbUtil.setInt(1, 100);
List list = dbUtil.executePreparedForList(TestNewface.class);//已经将查询结果转化为TestNewface类型的对象列表
for(int i = 0; i < list.size(); i ++)
{
TestNewface testNewface = (TestNewface)list.get(i);
System.out.println(testNewface);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
再看一下行处理器的使用方法,由应用程序来将记录Record中的列的值放入对象的属性中:
import com.frameworkset.common.poolman.PreparedDBUtil;
import com.frameworkset.common.poolman.Record;
import com.frameworkset.common.poolman.handle.RowHandler;
。。。。
PreparedDBUtil dbUtil = new PreparedDBUtil();
try {
dbUtil.preparedSelect("select * from testnewface where object_id < ?");
dbUtil.setInt(1, 100);
List list = dbUtil.executePreparedForList(TestNewface.class,new RowHandler()//定义行处理器
{
public void handleRow(Object rowValue, Record record) {//实现行处理器接口方法,rowValue参数就是要设置的空的对象实例,record就是包含了查询列表中当前记录的所有列和值信息。
TestNewface t = (TestNewface)rowValue;//转化为TestNewface对象,记住这时的属性值都是初始值
try {
t.setCREATED(record.getDate("created"));
t.setDATA_OBJECT_ID(record.getInt("DATA_OBJECT_ID"));
//........设置其他的属性,同时也可以处理与当前记录相关的功能
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("row handler:"+t);
}
});
for(int i = 0; i < list.size(); i ++)
{
TestNewface testNewface = (TestNewface)list.get(i);
System.out.println(testNewface);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
存储过程、函数调用中使用行处理器看后两篇文章
bboss项目下载列表 在sourceforge访问地址为:
https://sourceforge.net/project/showfiles.php?group_id=238653