proc:基本数据库操作
导师布置了一作业:
- int ConnectDB() {
- /*connect to database*/
- EXEC SQL BEGIN DECLARE SECTION;
- char s_conn[];
- EXEC SQL END DECLARE SECTION;
- memset( s_conn, 0x00, sizeof( s_conn ));
- sprintf( s_conn, "finance/oracle@orcl" );
- EXEC SQL CONNECT :s_conn ;
- if ( != sqlca.sqlcode) {
- printf("failed!:%s\n", sqlca.sqlerrm.sqlerrmc);
- exit();
- }
- else {
- printf("success!:%s\n", sqlca.sqlerrm.sqlerrmc);
- }
- return ;
- }
- void insert(){
- EXEC SQL BEGIN DECLARE SECTION;
- char buf[][];
- EXEC SQL END DECLARE SECTION;
- static char input[]="2014-05-17,10022002,yannic,2014-05-17,incase,1000,1003,3,1,1,success";
- int i=;
- char *p=strtok(input,",");
- while(p!=NULL)
- {
- strcpy(buf[i++],p);
- p=strtok(NULL,",");
- }
- for(i=;i<;i++)
- {
- printf("%d %s \n",i,buf[i]);
- }
- /*将string转换为number*/
- organization=atoi(buf[]);
- money=atoi(buf[]);
- user_account=atoi(buf[]);
- user_id=atoi(buf[]);
- state=atoi(buf[]);
- answer_id=atoi(buf[]);
- ConnectDB();
- EXEC SQL insert into business values(,:buf[],:organization,:buf[],:buf[],:buf[],:money,:user_account,:user_id,:state,:answer_id,:buf[]);
- if ( != sqlca.sqlcode) {
- printf("[%s]\n",sqlca.sqlerrm.sqlerrmc );
- }
- EXEC SQL COMMIT WORK RELEASE; /* 提交事务并断开数据库连接 */
- }
最后是查询了,要把结果生成报表输出到文件中,最麻烦的是要打印成Excel的样式,要很有耐心呢:
- void selectDB()
- {
- FILE *fp;
- int i=0;
- ConnectDB();
- /*定义游标*/
- EXEC SQL DECLARE emp_cursor CURSOR FOR
- select t.trade_date,t.channel,t.ORGANIZATION,
- NVL(s.SUCCESS,0) as succeed,//查询成功的记录,如果没有就默认为0.使用函数NVL(字段,0),设置默认值为0.
- NVL(s.success_money,0) as succeed_money,
- (t.total-NVL(s.SUCCESS,0)) as FAIL,
- (t.total_money-NVL(s.success_money,0)) as FAIL_MONEY
- from VIEW_TOTAL t ,VIEW_SUCCESS s
- where s.trade_date(+)=t.trade_date and s.channel (+)=t.channel and s.organization (+)= t.organization;//通过左连接,只要查询到有记录就要输出来。
- EXEC SQL OPEN emp_cursor;
- /* 以覆盖的方式写数据到文件*/
- if((fp=fopen("excel.txt","wt+"))==NULL)
- {
- printf("Cannot open file strike any key exit!");
- exit(1);
- }
- char column[][20]={{"TRADE_DATE"},{"CHANNEL"},{"ORGANZATION"},{"SUCCEED"},{"SUCCEED_MONEY"},{"FAIL"},{"FAIL_MONEY"}};
- fputs(" TRADE INFORMATION\n",fp);
- fputs(xline,fp);
- for(i=0;i<7;i++)
- {
- fprintf(fp,"|%-21s",column[i]);
- }
- fputs("|\n",fp);
- fputs(xline,fp);//xline 是我宏定义的一行横线,方便后面使用。
- for(;;){
- EXEC SQL WHENEVER NOT FOUND DO break;
- EXEC SQL FETCH emp_cursor INTO :trade_date,:channel,:organization,:succeed,:succeed_money,:fail,:fail_money;
- fprintf(fp,"|%-21s|%-21s|%-21d|%-21d|%-21d|%-21d|%-21d|\n",trade_date,channel,organization,succeed,succeed_money,fail,fail_money);//控制每一列数据占位长度,用格式控制符.-代表左对齐,21代表每列占位21个字符。
- fputs(xline,fp);
- }
- EXEC SQL CLOSE emp_cursor;
- EXEC SQL COMMIT WORK RELEASE;
- fclose(fp);
- }
最后打印效果:
最后导师提出来了两个问题一个是char数组定义长度太小,真正项目中可能会来很长一字符串那就造成内存溢出。还有一个就是文件打开那儿我直接失败就退出,老师建议不要这样,实际项目中流程退出再重新建流程要初始化等会浪费资源,所以异常时关闭游标等资源好了,不释放这些资源的话时间长了会造成内存泄漏。
proc:基本数据库操作的更多相关文章
- 数据库操作语句大全(sql)
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
- ABP创建数据库操作步骤
1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- django数据库操作和中间件
数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...
- [Android Pro] 完美Android Cursor使用例子(Android数据库操作)
reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...
- phpcms v9 中的数据库操作函数
1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='') 返回 ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
随机推荐
- java基础---->自定义gradle的插件
这里面简单的介绍一下gradle插件的编写. 自定义gradle插件 我们编写的gradle脚本一般是放在build.gradle文件中.所以首先创建一下build.gradle文件,下面的例子都是在 ...
- webpack使用小记
前言 webpack是目前前端开发必不可少的一款模块加载器兼构建工具,它能极其方便的处理各种资源的打包和使用, 让前端开发获得与后端开发几乎一致的体验. webpack特点 webpack 是以 co ...
- java开学考试有感以及源码
一.感想 Java开学测试有感 九月二十号,王老师给我们上的第一节java课,测试. 说实话,不能说是十分有自信,但还好,直到看见了开学测试的题目,之前因为已经做过了王老师发的16级的题目,所以当时还 ...
- 无网络 使用pip安装mxnet
# 在有网络的同系统机器上运行以下命令:pip download mxnet# 目前mxnet版本为1.3.0,执行后当前目录得到以下文件: # . # ├── certifi--py2.py3-no ...
- Sring 类的例子
public class ZongHe { public static void main(String[] args) { function1(); funct ...
- 补充:CSS选择器样式的规范!
css----页面样式,美化页面 css样式的三个规则 1内联式:直接写在html标签中 <p style="color:red"> 直接对html标签使用 style ...
- org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password:
tationProcessor' to allow for resolving potential circular referencesDEBUG 2018-05-28 11:32:35,016 o ...
- Ps去除背景
http://www.16xx8.com/photoshop/jiaocheng/26905.html
- C和C指针小记(十四)-字符串、字符和字节
1.字符串 C语言没有字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中. 字符串常量和适用于那些程序不会对他们进行修改的字符串. 所有其他字符串都必须存储于字符串数组或动态分配的内存 ...
- TypeScript笔记
#安装typescript [1] npm install -g typescript #编译typescript tsc test.ts //会生成test.js文件 #泛型,即使用“类型变量”,函 ...