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的载体是宿主语言

宿主语言          Pro程序

C/C++              Pro*C/C++

FORTRAN           Pro*FORTRAN

PASCAL            Pro*PASCAL

COBOL                    Pro*COBOL

PL/I                 Pro*PL/I

Ada              Pro*Ada

5、访问数据库的方法

(1)用SQL * Plus,它有SQL命令以交互的应用程序访问数据库;

(2)用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等.

(3)利用在第三代语言嵌入的SQL语言或ORACLE库函数来调用来访问。访问oracle数据库的方法。

其它:

6、第一个pro*C程序

A   在进行pro*c程序开发的时候,要配置/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/admin下的pcscfg.cfg。

上面的配置是一个正确的配置。

B   创建dm01_hello.pc

文件内容如下:

依赖的头文件:

/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public下的SQLCA.H

dm01_hello.pc文件内容(使用UE工具,保存后即可通过FTP上传到服务器上)

#include <stdio.h>

#include <string.h>

#include "sqlca.h"

//定义宿主变量 serverid

EXEC SQL BEGIN DECLARE SECTION;

//格式:用户名/用户密码@服务器名

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 dm01_hello.pc

接着生成.out文件。

注意一个错误1:

出现上面的错误的原因是没有引入共享库,要按照下面的方式执行:

gcc dm01_hello.c -o dm01_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

上面的是引入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   (可以通过ps –u oracle命令查看oracle相关启动服务)

再执行的时候就不会出现错误了。

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 =路径名 或 INCLUDE =(路径名1,路径名2)

PARSE=FULL | PARTIA | NONE (default FULL for C, Others for C++)  如果想编译c++,要改成PARTIA或NONE

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

执行结果:

注意上面红线部分和执行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)      values(:deptno, :dname, :loc);

EXEC SQL commit;

EXEC SQL COMMIT  RELEASE; //提交事务断开连接

return ret;

}

运行结果:

删除

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;

}

运行结果:

更新:

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)      values(:deptno, :dname, :loc);

EXEC SQL commit;

printf("enter key ... update \n");

getchar();

getchar();

strcpy(loc, "50locloc");

EXEC SQL  update dept set loc = :loc  where deptno=:deptno;

//EXEC SQL delete from dept where deptno=:deptno;

EXEC SQL COMMIT  RELEASE; //提交事务断开连接

return ret;

}

执行结果:

数据库中的结果:

查询并显示结果:

#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  from dept where deptno=:deptno;

printf("%d, %s, %s\n", deptno2, dname2, loc2);

EXEC SQL COMMIT  RELEASE; //提交事务断开连接

return ret;

}

什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查相关推荐

  1. Mendix一练一动: Mendix Studio Pro连接外围数据库(SQL Server)实现增删改查

    一. 环境准备 1: 连接外围数据库是Mendix的内置功能,不同数据库的连接方式都大同小异,本文以SQL Server为例讲解: 2:本文假设读者是Mendix初级学者,因此对每一步骤作者都尽量表述 ...

  2. 安卓增删改查用sql语句号码_详解Android中一些SQLite的增删改查操作

    在Android开发中经常要涉及到对数据的操作.Android本身提供了四种数据存储方式.包括:SharePreference,SQLite,Content Provider,File. 在Andro ...

  3. 【02】Java进阶:18-MySQL基础、数据库概述、数据库的安装/卸载/启动/登录、SQL概述、DDL操作数据库、DDL操作表、DML增删改查、

    day18-MySql基础 今日内容 数据库概述 数据库安装和卸载 SQL语句 DDL-----操作数据库,操作表 DML-----操作记录(增删改) DQL------操作记录(查) 学习目标 能够 ...

  4. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  5. vs连接mysql建一个表并增删查改_VS连接SQL Server数据库,增删改查详细教程(C#代码)...

    工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server  (我使用的是sql server2008) 操作: 1.打开SQL Server,打开后会看到数据库的初 ...

  6. sql增删改查_增删改查!sql2pandas方法手册

    数据分析 Author:louwill Machine Learning Lab 作为一名数据分析师,利用SQL熟练的取数是一项必备的基础能力.除了SQL以外,Python的pandas也为我们提供了 ...

  7. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)

    Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法) 目录 自定义创建数据库的各种表demo集合 具体案例 1.学生信息数据表案例

  8. sql增删改查_快速搞定数据库增删改查|附思维导图

    数据库学习,增删改查一直是测试工程师面试笔试的必考知识点,对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实. 下面是关 ...

  9. php pdo 更新sql语句,增删改查sql语句及PDO数据库连接操作流程实例-2019年7月24日...

    一.增删改查sql语句语法: 增: INSET INTO `表名` SET `字段名`=值 (也可写别名用,值前面加冒号->:别名): 删: DELETE FROM `表名`  WHERE `字 ...

最新文章

  1. 打工人,打工魂,抽终身会员,成为人上人!
  2. django-rest-framework第一次使用使用常见问题
  3. Sgen.exe: Speed up XmlSerializer's Startup Performance [.NET 2.0, XML Serialization]
  4. LightGBM中GBDT的实现
  5. powershell自动化操作AD域、Exchange邮箱系列(1)——powershell 简介
  6. python 3 json 序列化
  7. linux计划任务与日志管理(日志分割/切割)
  8. python——迭代器itertools.cycle
  9. Leetcode-树
  10. 120多套各种类别微信小程序模板源码
  11. 海康摄像头不记得登陆密码了怎么办?2020年联系人工客服最新版解答方案
  12. 计算机wind10切换桌面wind7系统,win10一键切回win7桌面方法_Win10桌面切换成Win7界面的方法...
  13. android手机速度太慢,如果我的Android手机速度变慢该怎么办?加快手机速度的五种方法...
  14. 通讯接口应用笔记1:RS485通讯上下拉电阻的选择
  15. 一些有用软件收藏(更新中)
  16. java 素数 五行_(1)转载:八卦数论(二)
  17. 超级马里奥【附源码】
  18. windows IIS Web服务器 发布网站
  19. 内存超频trfc_就是这么的简单,微星主板内存超频分享
  20. 测试人真实面试经历:十面阿里,七面头条,六个Offer

热门文章

  1. kmean python实现
  2. 【Python】集合类型产生KeyError异常原因及数据去重
  3. Java8 LinkedHashMap 源码阅读
  4. VTK:直纹面过滤器用法实战
  5. JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码)
  6. wxWidgets:wxRichTextHTMLHandler 类用法
  7. boost::math::barycentric_rational相关用法的测试程序
  8. GDCM:gdcm::Dumper的测试程序
  9. boost::container实现从内存资源派生的测试程序
  10. Boost:libbz2.dll测试程序