1. 怎么在linux环境下通过c/c++语言连接oracle数据库
推荐你使用pc语言,用这个编写代码很容易对数据库oracle进行操作.各种操作都非常简单.
例如:
EXEC sql CONNECT :UserName IDENTIFIED BY :PassWord using :ServerName;
这样一个简单语句就可以实现连接数据库.
EXEC SQL CALL insert_data_sms(:spnumber,:usernumber,:content,:flag,:priority,:spnode,:sequenid_sp,:iresult);
EXEC SQL COMMIT;/*提交事务*/
可调用存储过程.
你可以找找这方便的书看看
2. ppcs是什么意思,我下了个软件,里面有个PPCS选项,就是不知道什么意思,睡能告诉我一下
世源衡界最早和唯一的端对端客户/服务器(Peer to Peer Client/Server)PPCS系统。PPCS使得任何一台计算机可以和其他的计算机共享在各自不同计算机上的数据而不需要中心的服务器。
基于Superbase3.6I版本已经实现的PPCS的观念,管理系统目前又增加了新的PPCS SQL部分,使得PPCS服务器和SQL的连接就如同Oracle和SQL服务器连接一样。这使得功能强大的端末应用的开发变得十分简单。
作为一种独立的应用,为PPCS移动雹指做客户提供的Superbase文件引擎的应用程序接口,使得客户可以通过该接口访问PPCS服务器的数据。这将使由C语言和Delphi语言开发的应用程序可以利用Superbase ODBC通过网络访问Oracle数据库成为可能。另外,客户应用可通过简单格式逗老的界面访问各种平台上的PPCS数据源,包括Windows CE, Palm Pilot, EPOC, Linux等平台。
3. ORACLE数据库是用C语言编写的吗
不是,是使用sql与pl/sql语言操作的。
SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。
pl/sql语言是sql语言的扩展,pl/sql中可以嵌入sql语言。
块是pl/sql的基本单位,编写pl/sql程序实际是编写pl/sql块
4. 中南大学商学院的教学设施
教学实验室面积约为300平方米,共建有19个为教学、科研服务的实验室、多媒体教室和案例讨论室,计算机、多媒体音像设备等处于全国先进水平。实验中心设有信息资源中心、多媒体制作室和7个为教学科研服务的专业实验室。
·ERP实验室,主要配备有金蝶K/3 ERP系统和SAP Business One教学软件,可进行财务管理、供应链管理、生产管理、人力资源管理、管理信息系统开发等实验和设计,能满足计算机应用与开发等教学要求,并可提供ERP认证培训与咨询服务。
·金融实验室,配有世华金融软件,包括:资讯分析系统、证券模拟交易系统、期货模樱高拟交易系统和外汇模拟交易系统,供学生进行证券、期货及外汇行情分析与交易、投资分析等实验,可同时接纳300名学生在线做实验,进行与实际业务完全相同的操作与分析,学生即可以在实验室做实验,也可在能够上网的任何地方和时间进行实验,实现了24小时在线开放。
·会计模拟实验室,运行有我院教师参与开发的会计模拟实习实验教学软件,该软件即能做单项课程的会计实务教学,又能做综合模拟实习,该实验室可供学生进行系列会计模拟实验。
·经济与贸易综合实验室,配有进出口贸易模拟操作实习软件,学生可将进出口业务、英语电涵和电子邮件与网络操作训练有机地结合起来,通过计算机网络,实现国际贸易的无纸化操作。
·沙盘模拟实验室,投资建立了用友沙盘模拟系统,运用沙盘模拟企业的竞争环境,供学生模拟进行经营决策的练习。
·计算机网络实验室,实验室配置有路由器、防火墙、三层交换机等先进的网络设备,可供学生进行交换、路由、网络安全等配置与网络互联实验;配备的高档服务器和先进的网络环境,使学生可进行各种网络服务的安装与配置。
·电子商务实验室,实验室配置有高性能计算机系统,建有电做物子商务开发平台及Web开发平台,可供学生进行电子商务模式模拟、电子支付模拟、电子商务网站建设等实验。
实验中心还自行开发建立了实验管理信息系统,运行和管理各类服务器10余台,包括:学院网站服务、数字图书馆服务、邮件服务、ERP软件服务、金融服务、出口贸易模拟服务、企业决策模拟服务、大型分布式网络数据库服务等教学和管理应用服务器,这些服务器分别运行Unix、Windows NT等技术平台,实验中心所有计算机都可与国际互联网实现连接。实验室还配备有网络彩色激光打印机、DVD刻录机、数码摄像机、数码照相机、视频采集与编辑系统等设备,每间实验室都配有多媒体教学投影机。
实验中心现已开出的实验:
·微型计算机原理及应用 ·信息系统开发工具与环境 ·数据库原理及应用
·C语言程序设计 ·会计管理信息系统 ·ORACLE数据库
·国际贸易与实务 ·软件开发技术 ·系统分析与系统模拟
·数据通讯与计算机网络 ·管理信息系统 ·数据结构
·证券投资学 ·期货交易理论与实务 ·统计学
·运筹学 ·PROLOG语言程序设计 ·信息组织存储与检索技术
学院拥有一个工商管理图书分馆,藏书60000余册,中文期刊290多种,外文期刊50多种,该图书馆设有Internet终端和电子阅览室,能方便快捷地查阅全球范围内的图书资料。
学院有两间共100个座位的“语音实验室”,供外语教学使用。
◎多媒体制作室
为了提高教学质量,将商学院教学活动的多媒体化落到实处,学院特为此建立了一间子课件制作室。该制作室配置了制作电子课件所需全套设施,包括:七套联想计算机、扫描仪、光盘刻录机、摄影机、数码照相机、激光打印机、采集卡、DVD 机、录象机和相应软件,功能齐全,能制作集文字、影象、声音、动画等为一体的精美的多媒体课件。
◎案例讨论室
高质量的案例教学能够体现MBA人才培养的特点和特色,对MBA学员的学习产生积极的促进作用,受到学员们的普遍欢迎脊胡尺。为满足日益扩大的案例教学需求,我院拥有多个高标准的专用案例讨论室。
◎多媒体教室
学院拥有7间多媒体教室,作为MBA学员的专用教室,进行多媒体教学。所有多媒体教室设备先进,均配置有可连入Internet的教师用机、多媒体投影机、视频展示台、扩音设备等,平均每间教室有80-90个座位 。
5. C语言数据库是什么
C语言是一门编程语言,而数据库则是数据的集合。
1、C语言是一门通用计算机编程语言,应用广泛,用它可以开发数据库管理软件,也可以通过C语言借助于SQL语句来操作数据库。
2、数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。一般来数据库都族肢裤需要数据库管理软件,比如acess、oracle等等,这些大型并且对执行效饥闭率要求较高的软兆简件,往往都是C语言开发的。
6. c语言oracle>0是什么意思
oracle>0 是逻辑表达式,计算 变量 oracle 的当前值 是否 大于 0,大于得 真 (数值 1),
小于察告等于 0 得 假 (数值 0)。
接下去,根据这个 条件 决定 执行 什么 子 过程。例如 Oracle 数败升明据笑乎库什么 操作。
7. C语言程序连接oracle数据库高可用报ora03115错
可以的。
OracleDatabase,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(DennisMacAlistairRitchie)以肯尼斯·蓝·汤普森(KennethLaneThompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSIC”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。
8. C语言,OCI多线程建立session的问题,需要一个多线程连接的示例代码
。。
你子线程控制同步了么? 断错误一般是内存操作出错 和oci 或者pthread的关系不大!
void* OracleProcess(GPS_DATA GpsRec) // 数据库数据处理
{
interval = 0;
struct HashItem* pHash;
pHash = inithashtable(MAX_REC<<2);
char sql[384] = {0};
char temp[256] = {0};
char tName[10] = {0}; // 表名字
int i,k;
int j = TotalRec >> RATE;
double distance;
for(i=0; i < j; i++)
{
sprintf(temp,"%s%f%f%f%d",gps_last[i].tid,gps_last[i].lon,gps_last[i].lat,gps_last[i].speed,gps_last[i].udate);
InsertHash(temp, pHash, MAX_REC<<2); // 插入最后GPS信息到hash
memset(temp,0x00,256);
}
for(i = 0; i < TotalRec; i++)
{
for(k=0; k<j; k++) // 查询车机是否在册
if(strcmp(GpsRec[i].tid,tid[k]) == 0)
break;
if(k < j)
{
if(GpsRec[i].udate != 0.00)
{
distance = InfoUpdate(GpsRec,i); // 最新GPS数据更新
sprintf(temp,"%s%f%f%f%d",GpsRec[i].tid,GpsRec[i].lon,GpsRec[i].lat,GpsRec[i].speed,GpsRec[i].udate);
if(GetHashTablePos(temp, pHash, MAX_REC<<2) == -1) // 查找hash是否存在
{
if (distance > 0.0001)
{
sprintf(tName,"GPS_%d_Y",tf[k]);
InsertHash(temp, pHash, MAX_REC<<2); // 插入
sprintf(sql,"insert into %s (id,tm_id,lon,lat, speed, utc_time, udate,mileage,DIRECTION,DISTANCE) values (seq_gps.nextVal,'%s','%f','%f','%f','%d','%d','%f','%d','%f','%d')",
tName,GpsRec[i].tid,GpsRec[i].lon,GpsRec[i].lat,GpsRec[i].speed,GpsRec[i].utime,GpsRec[i].udate,GpsRec[i].mileage,GpsRec[i].dir,distance,interval);
printf("%s\n",sql);
oci_excu(oracle_env,(text *)sql,0); // 插入数据
memset(tName,0x00,10);
}
}
memset(sql,0x00,384);
memset(temp,0x00,256);
}
}
}
memset(GpsRec,0x00,sizeof(GpsRec));
free(pHash);
pthread_exit(NULL);
}
void TcpProcess(int tfd) // 处理TCP连接上的事务
{
struct timeval ntime;
int index = 0,times,ret;
int rlen = 0,rflag = 0;
char recvbuf[513] = {0};
bzero(recvbuf,513);
while(1)
{
ret = rlen = read(tfd,recvbuf,512);
if(rlen <= 0)
break;
if((rlen%32) == 0) // 32长度为标准TCP信息
{
times = 0;
ret >>= 5;
while(ret--)
{
if(tflag[tfd] == tfd) // 已经存在的socket
{
LOVENIX *info = (LOVENIX *)malloc(sizeof(LOVENIX));
memset(info,0x00,sizeof(LOVENIX));
if(recvbuf[times] == 0x58 || recvbuf[times] == 0x59)
ProtocolAnalysisLovenixTcp(&recvbuf[times],info);
else if(recvbuf[times] == 0x24)
ProtocolAnalysisLovenixUdp(&recvbuf[times],info);
sprintf(info->tid,"%s",seq[tfd]); // 合成车辆ID
DataProcess(info); // 处理GPS数据
free(info);
gettimeofday(&ntime, NULL);
cntime[tfd] = ntime.tv_sec; // 更新时间
times += 32;
}
}
}
else if(rlen > 32)
{
if(!rflag)
{
if((index = RegLovenix(tfd,recvbuf)) > -1)
{
sprintf(seq[tfd],"%s",tid[index]); // 将对应的socket设备ID保存
gettimeofday(&ntime, NULL);
sfd[tfd] = tfd;
cntime[tfd] = ntime.tv_sec;
tflag[tfd] = tfd;
rflag = 1;
}
}
}
if(rlen < 512); // 已经读完
break;
memset(recvbuf,0x00,rlen);
}
}
void *TcpServer(void *arg)
{
int port = (unsigned int) arg;
int efd,i;
struct timeval ntime;
int listener, nfds, n, listen_opt = 1, lisnum;
struct sockaddr_in my_addr, their_addr;
socklen_t len = sizeof(their_addr);
lisnum = MAXLISTEN;
for(i=0; i<MAX_REC; i++)
{
sfd[i] = 0;
tflag[i] = 0;
}
if ((listener = socket(PF_INET, SOCK_STREAM, 0)) == -1) // 开启 socket 监听
{
lprintf(lfd, FATAL, "TCP Socket error!\n");
exit(1);
}
else
lprintf(lfd, INFO, "TCP socket creat susscess!\n");
setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, (void *) &listen_opt,(int) sizeof(listen_opt)); // 设置端口多重邦定
setnonblocking(listener);
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = PF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(listener, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1)
{
lprintf(lfd, FATAL, "TCP bind error!\n");
exit(1);
}
else
lprintf(lfd, INFO, "TCP bind susscess!\n");
if (listen(listener, lisnum) == -1)
{
lprintf(lfd, FATAL, "TCP listen error!\n");
exit(1);
}
else
lprintf(lfd, INFO, "TCP listen susscess!\n");
kdpfd = epoll_create(MAXEPOLLSIZE); // 创建 epoll句柄,把监听socket加入到epoll集合里
ev.events = EPOLLIN | EPOLLET; // 注册epoll 事件
ev.data.fd = listener;
if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, listener, &ev) < 0)
lprintf(lfd, FATAL, "EPOLL_CTL_ADD error!\n");
while (1)
{
sem_wait(&sem_tcp); // 等待 sem_TCP
sem_wait(&sem_tp); // 将tp值减一
nfds = epoll_wait(kdpfd, events, MAXEPOLLSIZE, 1); // 等待有事件发生
if (nfds == -1)
lprintf(lfd, FATAL,"EPOLL_WAIT error!\n");
for (n = 0; n < nfds; ++n) // 处理epoll所有事件
{
if (events[n].data.fd == listener) // 如果是连接事件
{
if ((efd = accept(listener, (struct sockaddr *) &their_addr,&len)) < 0)
{
lprintf(lfd, FATAL, "accept error!\n");
continue;
}
else
lprintf(lfd, INFO, "Client from :%s\tSocket ID:%d\n", inet_ntoa(their_addr.sin_addr) ,efd);
setnonblocking(efd); // 设置新连接为非阻塞模式
ev.events = EPOLLIN | EPOLLET; // 注册新连接
ev.data.fd = efd;
if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, efd, &ev) < 0) // 将新连接加入EPOLL的监听队列
lprintf(lfd, FATAL, "EPOLL_CTL_ADD error!\n");
else
{
gettimeofday(&ntime, NULL);
cntime[efd] = ntime.tv_sec;
sfd[efd] = efd;
}
}
else if (events[n].events & EPOLLIN)
tpool_add_work(pool, TcpProcess, (void*)events[n].data.fd); // 读取分析TCP信息
else
{
close(events[n].data.fd);
epoll_ctl(kdpfd, EPOLL_CTL_DEL, events[n].data.fd, &ev);
}
}
sem_post(&sem_cm);
sem_post(&sem_udp);
}
close(listener);
}
int DataProcess(LOVENIX *info) // 处理GPS数据
{
if(sflag == 0 && (CacheRec != TotalRec)) // 缓存1可用且没有满
{
gps_cache[CacheRec].lat = info->lat;
gps_cache[CacheRec].mileage = info->mileage;
gps_cache[CacheRec].lon = info->lon;
gps_cache[CacheRec].speed = atod(info->speed, strlen(info->speed))*0.514444444*3.6;
gps_cache[CacheRec].udate = atoi(info->udate);
gps_cache[CacheRec].utime = atoi(info->utime);
gps_cache[CacheRec].dir = atoi(info->dir);
sprintf(gps_cache[CacheRec].tid ,"%s",info->tid);
CacheRec++;
// printf("CacheRec %d\tTotalRec %d \t sflag:%d\n",CacheRec,TotalRec,sflag);
if(CacheRec == TotalRec)
{
sflag = 1;
pthread_attr_init(&attr); // 初始化属性值,均设为默认值
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); // 设置线程为分离属性
if (pthread_create(&thread, &attr,(void*) OracleProcess,(void*)gps_cache)) // 创建数据处理线程
lprintf(lfd, FATAL, "oracle pthread_creat error!\n");
CacheRec = 0;
}
}
else if(sflag == 1 && (Cache1Rec != TotalRec)) // 缓存2可用且没有满
{
gps_cache1[Cache1Rec].mileage = info->mileage;
gps_cache1[Cache1Rec].lat = info->lat;
gps_cache1[Cache1Rec].lon = info->lon;
gps_cache1[Cache1Rec].speed = atod(info->speed, strlen(info->speed))*0.514444444*3.6;
gps_cache1[Cache1Rec].udate = atoi(info->udate);
gps_cache1[Cache1Rec].utime = atoi(info->utime);
gps_cache1[Cache1Rec].dir = atoi(info->dir);
sprintf(gps_cache1[Cache1Rec].tid ,"%s",info->tid);
Cache1Rec++;
if(Cache1Rec == TotalRec)
{
sflag = 0;
pthread_attr_init(&attr); // 初始化属性值,均设为默认值
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); // 设置线程为分离属性
if (pthread_create(&thread, &attr,(void*) OracleProcess,(void*)gps_cache1)) // 创建数据处理线程
lprintf(lfd, FATAL, "oracle pthread_creat error!\n");
Cache1Rec = 0;
}
}
else
{
lprintf(lfd, FATAL, "No cache to use!\n");
return (0);
}
return (1);
}
9. oci 连接 oracle
ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
在普通的情况下,用户可以通过SQL和PL/SQL来访问数据库中的数据。ORACLE数据库除了提供SQL和PL/SQL来访问数据库外,还提供了一个第三代程序设计语言的接口,用户可以通过C、COBOL、FORTRAN等第三代语言来编程访问数据库。OCI就是为了实现高级语言访问数据库而提供的接口。OCI允许开发者在程序里使用SQL和PL/SQL来访问数据库。开发者可以使用第三代语言来编写程序,而使用OCI来访问数据库。
10. C语言数据库是什么
数据库是用来存入数据的仓库。用户可以对文件中的数据进行新增、查询、更新、删除等操作。但是C语言和数据库是两个东西,他们之间的关系就是C语言可以用来开发数据库管理软件,也可以通过C语言借助于SQL语句来操作数据库。
C语言普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现在以下三个方面:
其一,广泛性。C 语言的运算范围的大小直接决定了其优劣性。C 语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C 语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
其二,简洁性。9 类控制语句和32个KEYWORDS是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁琐。
(10)c语言连接oracle数据库扩展阅读
数据库架构
1、内层:最接近实际存储体,亦即有关数据的实际存储方式。
2、外层:最接近用户,即有关个别用户观看数据的方式。
3、概念层:介于两者之间的间接层。