要求做一个类,实现DML的四个功能
class文件:database.pc,预编译为database.h
#include <stdio.h>
#include <iostream>
#include <string.h>
#define SQLNOTFOUND 1403
EXEC SQL INCLUDE sqlca;
class DB{
public:
void connect(int argc,char *argv[]);
void select();
void insert();
void update();
void del();
private:
EXEC SQL BEGIN DECLARE SECTION;
char username[40];
//char *argv[];
char con1[20],con2[20],con3[20];
char sel1[20],sel2[20],sel3[20];
char in1[20],in2[20],in3[20];
char up1[20],up2[20],up3[20];
char del1[20],del2[20],del3[20];
struct tab_struct{
char cat_id[20];
char obj_id[20];
char obj_desc[20];
}tab;
struct attr_list_struct{
char cat_id[20];
char attr_id[20];
char attr_name[20];
char attr_desc[20];
}attr_list;
struct attr_value_struct{
char cat_id[20];
char obj_id[20];
char attr_id[20];
char attr_value[20];
}attr_value;
EXEC SQL END DECLARE SECTION;
};
void DB::connect(int argc,char *argv[])
{
if(argc==1)
{
printf("请输入用户,密码");
exit(0);
}
strcpy(username,argv[1]);
EXEC SQL CONNECT:username;
printf("连接ORACLE@:%s",username);
if(sqlca.sqlcode<0)
{
printf("数据库连接出错@:%s./n",sqlca.sqlerrm.sqlerrmc);
exit(0);
}
}
void DB::select()
{
printf("/nnow~ select start!/n");
scanf("%s",sel1);
EXEC SQL DECLARE Ctab CURSOR FOR
SELECT cat_id
,obj_id
,obj_desc
FROM obj_tab
WHERE cat_id=:sel1
ORDER BY cat_id;
EXEC SQL OPEN Ctab;
if(sqlca.sqlcode<0)
{
printf("打开游标Ctab时出错@:%s./n",sqlca.sqlerrm.sqlerrmc);
exit(0);
}
printf("/ncat_id/tobj_id/tobj_desc/n");
while(1)
{
EXEC SQL FETCH Ctab INTO
:tab.cat_id
,:tab.obj_id
,:tab.obj_desc;
if(sqlca.sqlcode == SQLNOTFOUND )
break;
if(sqlca.sqlcode<0)
{
printf("处理游标Ctab时出错,错误信息:%s./n",sqlca.sqlerrm.sqlerrmc);
exit(0);
}
for(char *pbegin=tab.cat_id,*pend=tab.cat_id+strlen(tab.cat_id);pbegin!=pend;++pbegin)
printf("%c",*pbegin);
for(char *pbegin=tab.obj_id,*pend=tab.obj_id+strlen(tab.obj_id);pbegin!=pend;++pbegin)
printf("%c",*pbegin);
for(char *pbegin=tab.obj_desc,*pend=tab.obj_desc+strlen(tab.obj_desc);pbegin!=pend;++pbegin)
printf("%c",*pbegin);
printf(" /n");
}
EXEC SQL CLOSE Ctab;
EXEC SQL COMMIT WORK;
}
/*
void DB::insert(int argc,char *argv[])
{
EXEC SQL insert into obj_tab(cat_id,obj_id,obj_desc)
VALUES(:argv[2],:argv[3],:argv[4]);
EXEC SQL COMMIT WORK;
}
*/
void DB::insert()
{
printf("/nnow~ insert start!/n");
scanf("%s%s%s",in1,in2,in3);
EXEC SQL insert into obj_tab(cat_id,obj_id,obj_desc)
VALUES(:in1,:in2,:in3);
EXEC SQL COMMIT WORK;
}
void DB::update()
{
printf("/nnow~ update start!/n");
scanf("%s%s",up1,up2);
EXEC SQL update obj_tab
set
cat_id=:up2
where cat_id=:up1;
EXEC SQL COMMIT WORK;
}
void DB::del()
{
printf("/nnow~ delete start!/n");
scanf("%s",del1);
EXEC SQL delete from obj_tab where cat_id=:del1;
EXEC SQL COMMIT WORK;
}