什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
1
什么是Pro*C/C++
|
1、通过在过程编程语言C/C++中嵌入SQL语句而开发出的应用程序 |
2、什么是嵌入式SQL
|
1、在通用编程语言中使用的SQL称为嵌入式SQL |
|
2、在SQL标准中定义了非常多中语言的嵌入式SQL |
|
3、各个厂商对嵌入式SQL的详细实现不同 |
3、什么是Pro*C/C++
|
1、在C/C++语言中嵌入SQL语句而开发出的应用程序。 |
|
2、目的:使c/c++这样的效率语言称为訪问数据库的工具。 |
4、嵌入式SQL的载体是宿主语言
|
宿主语言 C/C++ FORTRAN PASCAL COBOL PL/I Ada |
5、訪问数据库的方法
|
(1)用SQL |
|
(2)用第四代语言应用开发工具开发的应用程序訪问数据库,这些工具有SQL*Froms。QL*Reportwriter,SQL*Menu等. (3)利用在第三代语言嵌入的SQL语言或ORACLE库函数来调用来訪问。 訪问oracle数据库的方法。 |
|
其他:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""> |
6、第一个pro*C程序
A
在进行pro*c程序开发的时候。要配置/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/admin下的pcscfg.cfg。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
上面的配置是一个正确的配置。
B
创建dm01_hello.pc
文件内容例如以下:
|
依赖的头文件: /home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public下的SQLCA.H |
|
dm01_hello.pc文件内容(使用UE工具。保存后就可以通过FTP上传到server上) |
|
#include <stdio.h> #include <string.h> #include "sqlca.h" //定义宿主变量 serverid EXEC SQL BEGIN DECLARE SECTION; //格式:username/用户password@server名 char *serverid = "scott/123456@orcl"; EXEC SQL END DECLARE SECTION; int main() { int ret = 0; printf("hello....\n"); //在C中是宿主变量 printf("serverid:%s \n", serverid); //嵌入式SQL语言必需要以 EXEC SQL开头 //:serverid 加上:表示使用这个变量 EXEC SQL connect :serverid; if (sqlca.sqlcode != 0) { ret = sqlca.sqlcode; printf("EXEC SQL connect:err, %d\n", ret); return ret; } printf("connect ok\n"); return ret; } |
|
编译并执行:dm01_hello.pc,执行的命令是:proc 接着生成.out文件。 注意一个错误1: 出现上面的错误的原因是没有引入共享库。要依照以下的方式运行: gcc dm01_hello.c -o dm01_hello 上面的是引入clntsh.so这个共享库 注意错误2: [oracle@localhost day03]$ ./dm01_hello hello.... serverid:scott/123456@orcl EXEC SQL connect:err, -12541 能够通过以下的命令查看错误原因: oerr ora 12541 这时候要: sqlplus /nolog conn /as sysdba startup quit 在运行: lsnrctl start 再运行的时候就不会出现错误了。 |
7 PreCompile编译器预编译程序
|
1、该工具在什么地方 |
|
功能:完毕Pro*c源程序到纯C源程序的转换 |
|
基本命令格式: PROC INAME=filename [OptionName1=value1]…[OptionNameN=valueN] 经常使用编译选项: INAME=path and filename (name of the input file) ONAME=path and filename (name of the output file) INCLUDE=path --INCLUDE =路径名 PARSE=FULL | PARTIA | NONE (default FULL for C, Others for C++) CODE=ANSI_C | CPP (default ansi_c) USERID=username/password |
8
proc编译c++文件
默认情况下proc是编译
.c 文件的。要想编译c++文件。须要运行类似以下的操作:
proc iname=./dm02_hello.pconame=dm02_hello.cc PARSE=NONE CODE=CPP
|
#include <iostream> #include <stdio.h> #include <string.h> #include "sqlca.h" using namespace std; //定义宿主变量 serverid EXEC SQL BEGIN DECLARE SECTION; char *serverid = "scott/123456@orcl"; EXEC SQL END DECLARE SECTION; int main() { int ret = 0; cout << "hello..." << endl; //在C中宿主变量 printf("serverid:%s \n",serverid); //嵌入式SQL语言必需要以EXEC SQL开头 //:serverid 要引用serverid时。要使用: EXEC SQL connect :serverid; if(sqlca.sqlcode != 0) { ret = sqlca.sqlcode; printf("EXEC SQL connect:err,%d\n",ret); return ret; } printf("connect ok \n"); return ret; } |
|
运行命令: proc iname=./dm02_hello.pc oname=dm02_hello.cc PARSE=NONE CODE=CPP 运行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""> 注意上面红线部分和运行C的不同样 |
|
接着编译cc文件: g++ dm02_hello.cc -o dm02_hello -I/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public -L/home/oracle_11/app/oracle/product/11.2.0/db_1/lib –lclntsh |
9.编写一个最简单的MakeFile
|
all:dm01_hello dm02_hello dm01_hello: @echo 'proc dm01_hello begin' proc dm01_hello.pc @echo 'gcc dm01_hello begin' gcc dm01_hello.c -o dm01_hello -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib -lclntsh dm02_hello: @echo 'proc dm02_hello begin' proc iname=./dm02_hello.pc oname=dm02_hello.cc PARSE=NONE CODE=CPP @echo 'gcc dm02_hello begin' g++ dm02_hello.cc -o dm02_hello -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib -lclntsh clean: @rm dm01_hello @rm dm02_hello |
|
运行命令: make |
10
数据库的增删改查:
|
编写公共的Makefile |
|
all: dm01_dbop dm01_dbop: @echo 'proc dm01_dbop begin' proc dm01_dbop.pc @echo 'gcc dm01_dbop begin' gcc dm01_dbop.c -o dm01_dbop -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib –lclntsh clean: @rm dm01_dbop |
|
插入数据: |
|
#include <stdio.h> #include <string.h> #include <string.h> #include "sqlca.h" //定义宿主变量 serverid EXEC SQL BEGIN DECLARE SECTION char *serverid = "scott/tiger@orcl"; int deptno; char dname[20]; char loc[20] ; int deptno2; char dname2[20]; char loc2[20] ; EXEC SQL END DECLARE SECTION; int main() { int ret = 0; printf("hello....\n"); //在C中是宿主变量 printf("serverid:%s \n", serverid); //嵌入式SQL语言必需要以 EXEC SQL开头 //:serverid EXEC SQL connect :serverid; if (sqlca.sqlcode != 0) { ret = sqlca.sqlcode; printf("EXEC SQL connect:err, %d\n", ret); return ret; } printf("connect ok\n"); deptno = 50; strcpy(dname, "50name"); strcpy(loc, "50loc"); //添加数据 EXEC SQL insert into dept (deptno, dname, loc) EXEC SQL commit; EXEC SQL COMMIT RELEASE; //提交事务断开连接 return ret; } |
|
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""> |
删除
|
Makefile略 |
|
#include <stdio.h> #include <string.h> #include <string.h> #include "sqlca.h" //定义宿主变量 serverid EXEC SQL BEGIN DECLARE SECTION char *serverid = "scott/tiger@orcl"; int deptno; char dname[20]; char loc[20] ; int deptno2; char dname2[20]; char loc2[20] ; EXEC SQL END DECLARE SECTION; int main() { int ret = 0; printf("hello....\n"); //在C中是宿主变量 printf("serverid:%s \n", serverid); //嵌入式SQL语言必需要以 EXEC SQL开头 //:serverid EXEC SQL connect :serverid; if (sqlca.sqlcode != 0) { ret = sqlca.sqlcode; printf("EXEC SQL connect:err, %d\n", ret); return ret; } printf("connect ok\n"); deptno = 50; strcpy(dname, "50name"); strcpy(loc, "50loc"); EXEC SQL delete from dept where deptno=:deptno; EXEC SQL commit; EXEC SQL COMMIT RELEASE; //提交事务断开连接 return ret; } |
|
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""> |
更新:
|
Makefile公用上面的 |
|
#include <stdio.h> #include <string.h> #include <string.h> #include "sqlca.h" //定义宿主变量 serverid EXEC SQL BEGIN DECLARE SECTION char *serverid = "scott/tiger@orcl"; int deptno; char dname[20]; char loc[20] ; int deptno2; char dname2[20]; char loc2[20] ; EXEC SQL END DECLARE SECTION; //更新 int main() { int ret = 0; printf("hello....\n"); //在C中是宿主变量 printf("serverid:%s \n", serverid); //嵌入式SQL语言必需要以 EXEC SQL开头 //:serverid EXEC SQL connect :serverid; if (sqlca.sqlcode != 0) { ret = sqlca.sqlcode; printf("EXEC SQL connect:err, %d\n", ret); return ret; } printf("connect ok\n"); deptno = 50; strcpy(dname, "50name"); strcpy(loc, "50loc"); //添加数据 EXEC SQL insert into dept (deptno, dname, loc) EXEC SQL commit; printf("enter key ... update \n"); getchar(); getchar(); strcpy(loc, "50locloc"); EXEC SQL update dept set loc = :loc //EXEC SQL delete from dept where deptno=:deptno; EXEC SQL COMMIT RELEASE; //提交事务断开连接 return ret; } |
|
运行结果: 数据库中的结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""> |
查询并显示结果:
|
#include <stdio.h> #include <string.h> #include <string.h> #include "sqlca.h" //定义宿主变量 serverid EXEC SQL BEGIN DECLARE SECTION char *serverid = "scott/123456@orcl"; int deptno; char dname[20]; char loc[20] ; int deptno2; char dname2[20]; char loc2[20] ; EXEC SQL END DECLARE SECTION; //获取 int main() { int ret = 0; printf("hello....\n"); //在C中是宿主变量 printf("serverid:%s \n", serverid); //嵌入式SQL语言必需要以 EXEC SQL开头 //:serverid EXEC SQL connect :serverid; if (sqlca.sqlcode != 0) { ret = sqlca.sqlcode; printf("EXEC SQL connect:err, %d\n", ret); return ret; } printf("connect ok\n"); deptno = 50; strcpy(dname, "50name"); strcpy(loc, "50loc"); EXEC SQL select deptno, dname, loc into :deptno2, :dname2, :loc2 printf("%d, %s, %s\n", deptno2, dname2, loc2); EXEC SQL COMMIT RELEASE; //提交事务断开连接 return ret; } |
什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查的更多相关文章
- Sql中常用的创建表 约束 主外键 增删改查的语句
创建数据库 USE master; GO --日记数据库 create database DiaryBase on ( name=DiaryBase_Dat,--逻辑名称 FILENAME='c:\D ...
- sqlHelper做增删改查,SQL注入处理,存储值,cookie,session
一.存储值 eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来] 存储值得方式有两种,一种是cookie,一种是session 1.1区别: 代码: if ...
- Sql Server xml 类型字段的增删改查
1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...
- MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存
二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- 数据库开发基础-SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)
控制数据库的服务: 方法一: 1.Windows+R 打开运行 打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]
SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数 --创建表格 create table aa ( UserName varchar(50 ...
- EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ...
随机推荐
- 如何获取(GET)一杯咖啡——星巴克REST案例分析
英文原文:How to GET a Cup of Coffee 我们已习惯于在大型中间件平台(比如那些实现CORBA.Web服务协议栈和J2EE的平台)之上构建分布式系统了.在这篇文章里,我们将采取另 ...
- hdu 5167(dfs)
Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- (4)三剑客之awk
(1)awk工作原理#awk -F: '{print $1,$3}' /etc/passwd 1)awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,已换行符结束 2)然后行被 ...
- debug 英文翻译
declaration of 'int a' shadows a parameter :函数参数里,已经有这两个名称的变量了,指定义了同名的参数,造成了隐藏. expected primary-exp ...
- 百度之星资格赛 2016 Problem 1002
本文链接:http://www.cnblogs.com/Ash-ly/p/5494623.html 题意: 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个 ...
- 集训考试题tents
题目描述Pb 去郊游啦!他来到一块空地打算在这里搭一个帐篷.但是,帐篷的四个支撑点不能在落在任何位置上,而只能落在一些固定点上.现在,他找到地面上有 N 个点可以支撑帐篷.(四个支撑点必须围成一个矩形 ...
- hadoop 编译代码及运行
搞定了hadoop配置之后,可以写代码运行了,首先要配一下CLASS_PATH,修改/etc/profile export JAVA_HOME=/usr/lib/jvm/java--openjdk-i ...
- [BZOJ 4720] 换教室
Link: BZOJ 4720 传送门 Solution: 2016年$NOIP$考的一道语文题 题面虽长,但思路并不难想 对于这类期望问题,大多数时候都用期望$dp$来解决 根据询问:在$n$个时间 ...
- 小白的Python之路 day5 os,sys模块详解
os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...
- [CF842E]Nikita and game
[CF842E]Nikita and game 题目链接: CF842E 博客地址: [CF842E]Nikita and game - skylee 题目大意: 一棵树初始只有一个编号为\(1\)的 ...