|
|
回复 #195 yulihua49 的帖子
给一个实际程序吧,根据班次表,JOIN devname的:
JSON_OBJECT get_shift(T_SQL_Connect *SQL_Connect,char *msg)
{
int ret;
DAU u_DAU[2];
JSON_OBJECT result,json;
result=json_object_new_array();
ret=DAU_init(&u_DAU[0],SQL_Connect,"dev_shift a",0,0);//从数据库中找表结构
ret=DAU_init(&u_DAU[1],SQL_Connect,"tuxdev b",0,0);
sprintf(msg,"WHERE a.devid=b.devid");
ret=DAU_getm(2,u_DAU,msg,0);
while(!DAU_nextm(2,u_DAU)) {
json=json_object_new_object();
DAU_toJSON(&u_DAU[0],json,0);//user全部打包到json
DAU_toJSON(&u_DAU[1],json,"devname");//组合devname到json
json_object_array_add(result,json);//在JSON数组中加入一条记录
}
DAU_freem(2,u_DAU);
return result;
}
int loadfile(T_SQL_Connect *SQL_Connect,char *tablename,FILE *ifd,FILE *ofd,int Pflg,char *buf,int buflen)
{
JSON_OBJECT result;
result=get_shift(SQL_Connect,buf);
printf("buf=%s\n",buf);
printf("result=%s\n",json_object_to_json_string(result));
json_object_put(result);
return 0;
}
执行结果:
buf=SELECT a.devid,to_char(a.stat_date,'YYYY-MM-DD') stat_date,a.shift_flg,a.shift_code,a.userid,to_char(a.log_time,'YYYY-MM-DD HH24:MI:SS') log_time,a.beg_no,b.devid,b.devname,b.devtype,b.devca,b.unit,b.atime,b.ptime,b.perm,b.purpose1,b.purpose2,b.purpose3,b.purpose4,b.purpose5,b.purpose6,b.purpose7,b.purpose8,b.clid,to_char(b.last_log,'YYYY-MM-DD HH24:MI:SS') last_log,b.flag FROM TICKET.dev_shift a,TICKET.tuxdev b WHERE a.devid=b.devid
result=[ { "devid": "JOLTTEST", "stat_date": "2008-10-20", "shift_flg": "BB", "shift_code": "5", "userid": "hp", "log_time": "2008-10-20 14:44:34", "beg_no": "A0000001", "devname": "JOLT测试终端" }, { "devid": "JOLTTEST1", "stat_date": "2008-11-06", "shift_flg": "AB", "shift_code": "5", "userid": "hww", "log_time": "2008-11-06 16:12:26", "beg_no": "A0000001", "devname": "黄伟伟的JOLT测试终端" }, { "devid": "SP0102002", "stat_date": "2009-01-20", "shift_flg": "DB", "shift_code": "5", "userid": "ylh", "log_time": "2009-01-20 13:54:03", "beg_no": "A0000001", "devname": "售票测试终端2" }, { "devid": "SP0102003", "stat_date": "2008-10-16", "shift_flg": "DB", "shift_code": "5", "userid": "", "log_time": "2008-10-16 10:14:53", "beg_no": "A0000001", "devname": "售票测试终端3" } ]
初看Hibernate程序也是这样,好像什么也没干,结果什么都做完了。这就是框架的好处,程序非常简练易懂,对具体数据结构不敏感。
这里只涉及了devid,devname。只要这两个字段不改,其他增加一些,改变一些,与本程序无关。系统要求,将来数据结构变更,程序要少改或不改,PL/SQL很难实现这个要求。
DAU实际上比Hibernate要好用。Hibernate无论如何需要一个POJO,不可能完全动态处理数据。上边的程序和前边的load程序都没有定义任何数据结构,运行结果完全取决于数据库当时的状况。实现了完全动态处理。
[ 本帖最后由 yulihua49 于 2009-1-22 15:28 编辑 ] |
|