下面的代码就是实现了连接数据库,然后做一些操作
我的数据库表名为ym_test,仅有两个字段,int型的I,还有char *型的
dbop.pc文件
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "dbop.h"
- EXEC SQL BEGIN DECLARE SECTION;
- sql_context ctx;
- EXEC SQL END DECLARE SECTION;
- EXEC SQL INCLUDE sqlca;
- void sqlerror();
- int ConnDB(char *sDbConnStr)
- {
- EXEC SQL BEGIN DECLARE SECTION;
- char sConnSql[256];
- EXEC SQL END DECLARE SECTION;
- memset(sConnSql, 0, sizeof(sConnSql));
- snprintf(sConnSql, sizeof(sConnSql), "%s", sDbConnStr);
- EXEC SQL CONTEXT ALLOCATE :ctx;
- EXEC SQL CONTEXT USE :ctx;
- EXEC SQL CONNECT :sConnSql;
- return sqlca.sqlcode;
- }
- int ReleaseDB()
- {
- EXEC SQL COMMIT RELEASE;
- return 0;
- }
- int ReadDB(int number)
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int num;
- char name[20];
- EXEC SQL END DECLARE SECTION;
- num = number;
- EXEC SQL SELECT STR
- INTO :name
- FROM ym_test
- where I = :num;
- printf("/n%s /n", name);
- return 0;
- }
- int WriteDB(int number, char *names)
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int num;
- char name[20];
- EXEC SQL END DECLARE SECTION;
- num = number;
- strcpy(name, names);
- EXEC SQL INSERT
- INTO ym_test(
- I,
- STR
- )VALUES(
- :num,
- :name
- );
- return 0;
- }
- int DeleteDB(int number)
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int num;
- EXEC SQL END DECLARE SECTION;
- num = number;
- EXEC SQL DELETE FROM ym_test
- where I = :num;
- return 0;
- }
- void sqlerror()
- {
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- printf("/nORACLE error detected:/n");
- printf("%d/n", sqlca.sqlcode);
- printf("/n%s /n", sqlca.sqlerrm.sqlerrmc);
- /*回滚事务*/
- EXEC SQL ROLLBACK RELEASE;
- exit(1);
- }
main.cpp文件代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "dbop.h"
- int main(int argc, char *argv[])
- {
- ConnDB(user01/user001@testdb);
- ReadDB(2);
- ReadDB(1);
- WriteDB(22, "Mengge");
- ReadDB(22);
- DeleteDB(2);
- ReleaseDB();
- return 0;
- }
编译脚本为:
- #!/bin/sh
- proc code=cpp ltype=none iname=dbop.pc oname=dbop.cpp
- g++ -g -Wall -c dbop.cpp
- g++ -g -Wall -c main.cpp
- g++ -g -Wall -L $ORACLE_HOME/lib -l clntsh main.o dbop.o -o main
- #删除中间文件
- rm -f dbop.o dbop.cpp main.o