file1:(rundb.cc)
#include "database.cc"
#include <iostream>
#include <string>
int main(int argc,char *argv[])
{
DB connect();
}file2:(database.pc)
#include <iostream>
#include <string.h>
#define SQLNOTFOUND 1403EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
EXEC SQL END DECLARE SECTION;
class DB{
public:
void connect();
void select();
void insert();
//void updata();
private:
EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
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@:%d",username);
}
void DB::select()
{
EXEC SQL SELECT CAT_ID,OBJ_ID,OBJ_DESC
INTO :cat_id,:obj.obj_id,:obj.obj_desc
FROM OBJ_TAB;
EXEC SQL COMMIT WORK RELEASE;
}
void DB::insert()
{
EXEC SQL INSERT INTO OBJ_TAB(CAT_ID,OBJ_ID,OBJ_DESC)
VALUES(:cat_id,:obj.obj_id,:obj.obj_desc);
EXEC SQL COMMIT WORK RELEASE;
}
//void DB::updata(){;}
#include "database.cc"
#include <iostream>
#include <string>
int main(int argc,char *argv[])
{
DB connect();
}file2:(database.pc)
#include <iostream>
#include <string.h>
#define SQLNOTFOUND 1403EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
EXEC SQL END DECLARE SECTION;
class DB{
public:
void connect();
void select();
void insert();
//void updata();
private:
EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
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@:%d",username);
}
void DB::select()
{
EXEC SQL SELECT CAT_ID,OBJ_ID,OBJ_DESC
INTO :cat_id,:obj.obj_id,:obj.obj_desc
FROM OBJ_TAB;
EXEC SQL COMMIT WORK RELEASE;
}
void DB::insert()
{
EXEC SQL INSERT INTO OBJ_TAB(CAT_ID,OBJ_ID,OBJ_DESC)
VALUES(:cat_id,:obj.obj_id,:obj.obj_desc);
EXEC SQL COMMIT WORK RELEASE;
}
//void DB::updata(){;}
但是编译.cc的时候总是有一个错误("database.cc", line 329.1: 1540-0063 (S) The text "{" is unexpected.)
找了半天找不出来郁闷了半天了
c for aix compiler ,version 5
估计是你的makefile有问题,请参看我的
include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
CC = $(COMPILER)/bin/xlCORALIBPATH=$(ORACLE_HOME)/lib32
ORALIBS=-lclntsh
PRODLIBHOME64=$(PRODHOME)lib64
PRECOMPHOME=$(ORACLE_HOME)/precomp/publicPROCPPFLAGS= code=cpp
NETWORKHOME=$(ORACLE_HOME)/network/
PLSQLHOME=$(ORACLE_HOME)/plsql/I_SYM=-ISTLINCLUDE = -I $(COMPILER)/include
INCLUDE=$(I_SYM). $(I_SYM)$(PLSQLHOME)public $(I_SYM)$(NETWORKHOME)public $(I_SYM)$(PRECOMPHOME)CFLAGS= -c -lct -lcs -ltcl -lcomn -lintl -lm -bquietLIBHOME=$(ORACLE_HOME)/lib64/getMonth: getMonthproc getMonthCo getMonthbuild
getMonthproc:
proc $(PROCPPFLAGS) cpp_suffix=cc $(PROCPLSFLAGS) iname=getMonth.cpp parse=none
getMonthCo:
$(CC) $(INCLUDE) $(STLINCLUDE) $(CFLAGS) getMonth.cc
getMonthbuild:
$(CC) getMonth.o $(COMMONOBJ) -L $(ORALIBPATH) $(ORALIBS) -o bin/getMonth
另外DB connect(); 是调用DB类的connect()方法
PS:我刚毕业工作,这些都是新学的,所以比较嫩一些
1.
class DB{
public:
void connect();
这里应改为 void connect(int argc,char *argv[]);
2.void DB::connect(&int argc,&char *argv[])
这里应改为void DB::connect(int argc,char *argv[]),就是把int和char前面的'&'去掉
还有很多错误,你慢慢看吧
ld: 0711-317 ERROR: Undefined symbol: .sqlcxt
PS:其实我是想把database做成一个类,用rundb完成对他的调用,不知道这样的方式实现合适不;现在错误这么多,我都不知道我的想法是不是正确的了
ld: 0711-317 ERROR: Undefined symbol: .sqlcxt"这个问题解决了
第一步. 2个文件,一个是database.pc(pro*c),经过proc XXXXX后生成database.cc文件(这个过程不知道叫什么)
第二步. 把database.cc改名字为database.h(我也不清楚是否一定要改名,请原谅我的无知)
第三步. 另外一个文件是包含main()函数的,叫rundb.cc,包含头文件(#include <database.h>)
第四步,makefile,生成执行文件rundb:
xlC $(INCLUDE) $(STLINCLUDE) $(CFLAGS) $*.cc
xlC $*.o -L $(ORALIBPATH) $(ORALIBS) -o $*
第五步. 运行rundb,但是没有返回信息
#include <iostream>
#include <string>
#define SQLNOTFOUND 1403EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
EXEC SQL END DECLARE SECTION;
class DB{
public:
void connect(int &argc,char &*argv[]);
void select();
void insert();
//void updata();
private:
EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
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()
{
EXEC SQL SELECT CAT_ID,OBJ_ID,OBJ_DESC
INTO :cat_id,:obj.obj_id,:obj.obj_desc
FROM OBJ_TAB;
EXEC SQL COMMIT WORK RELEASE;
}
void DB::insert()
{
EXEC SQL INSERT INTO OBJ_TAB(CAT_ID,OBJ_ID,OBJ_DESC)
VALUES(:cat_id,:obj.obj_id,:obj.obj_desc);
EXEC SQL COMMIT WORK RELEASE;
}
第二步. 把database.cc改名字为database.h(我也不清楚是否一定要改名,请原谅我的无知)
第三步. 另外一个文件是包含main()函数的,叫rundb.cc,包含头文件(#include <database.h>)
第四步,makefile,生成执行文件rundb:
xlC $(INCLUDE) $(STLINCLUDE) $(CFLAGS) $*.cc
xlC $*.o -L $(ORALIBPATH) $(ORALIBS) -o $*
第五步. 运行rundb,但是没有返回信息1.proc 生成.cc文件叫做预编译,是为了让c++编译器理解里面的代码
2.一般都把声明放在.h文件里,而实现放在.cpp里
3.这一步也没什么问题
4.
5.你的程序设计思路没问题,就是不大了解c++程序,希望你好好看看c++基础的书
#include <iostream>
int main(int argc,char *argv[])
{
DB connect(int &argc,char &*argv[]);
}makefile:include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
ORALIBPATH=$(ORACLE_HOME)/lib32
ORALIBS=-lclntsh -lpthread
PRODLIBHOME64=$(PRODHOME)lib64
PRECOMPHOME=$(ORACLE_HOME)/precomp/publicPROCPPFLAGS= code=cpp
NETWORKHOME=$(ORACLE_HOME)/network/
PLSQLHOME=$(ORACLE_HOME)/plsql/I_SYM=-ISTLINCLUDE = -I $(COMPILER)/include
INCLUDE=$(I_SYM). $(I_SYM)$(PLSQLHOME)public $(I_SYM)$(NETWORKHOME)public $(I_SYM)$(PRECOMPHOME)CFLAGS= -c -lct -lcs -ltcl -lcomn -lintl -lmLIBHOME=$(ORACLE_HOME)/lib64/rundb: xlC $(INCLUDE) $(STLINCLUDE) $(CFLAGS) $*.cc
xlC $*.o -L $(ORALIBPATH) $(ORALIBS) -o $*
{
DB connect(int &argc,char &*argv[]);
}这个调用有问题,应该是:DB connect(argc,argv);
void connect(int &argc,char &*argv[]);->void connect(int argc,char *argv[]);
void DB::connect(int &argc,char &*argv[])->void DB::connect(int argc,char *argv[])
恩,&*这样的写法不对;不过我觉得重点是怎么把main函数参数传递给connect
或者把连接数据库的功能直接放到main()函数里
这样就可以传了
还有疑问的话我还是建议你好好看c++关于函数传参的章节
for "DB::DB".
make: The error code from the last command is 1.
{DB connect();
}
改成这样:
int main(int argc,char *argv[])
{
DB tmpdb;
temdb.connect();
}
--不过我有点奇怪,DB类没有构造函数???
{DB connect(argc,argv);
}
改成这样:
int main(int argc,char *argv[])
{
DB tmpdb;
temdb.connect(argc,argv);
}
http://shop33881320.taobao.com/
{ EXEC SQL insert into obj_tab(cat_id,obj_id,obj_desc)
VALUES(:argv[2],:argv[3],:argv[4]);
EXEC SQL insert into obj_tab(cat_id,obj_id,obj_desc)
VALUES('11','22','33');
EXEC SQL COMMIT WORK RELEASE;
}始终插不进去~~ =。= 不知道什么原因?