【数据库】第八章 数据库编程

news2024/11/16 1:17:54

第八章 数据库编程

8.1 嵌入式SQL(C语言版)

在这里插入图片描述

被嵌入的语言(java ,C++)等被称为宿主语言,简称主语言

在这里插入图片描述

  • 当主语言 为 C 语言的时候

    ​ 语法格式为

    EXEC SQL <SQL语句>
    
  • 当主语言为java的时候

    格式为

    #SQL {<SQL语句>}
    

以下讲解是C语言

数据库的连接和断开

在这里插入图片描述
在这里插入图片描述

SQL执行的提交与撤销

在这里插入图片描述

示例

#include <stdio.h>
#include “prompt.h”
exec sql include sqlca;
char cid_prompt[ ] = “Please enter customer id:;
int main()
{ exec sql begin declare section;
char cust_id[5], cust_name[14];
float cust_discnt;
char user_name[20],user_pwd[20];
exec sql end declare section;
exec sql whenever sqlerror goto report_error;
exec sql whenever not found goto notfound;
strcpy(user_name, “poneilsql”);
strcpy(user_pwd, “XXXX”);
exec sql connect :user_name identified
by :user_pwd;
while((prompt(cid_prompt,1,cust_id,4)) >=0) {
exec sql select cname,discnt
into :cust_name, :cust_discnt
from customers where cid=:cust_id;
exec sql commit work;
printf(“Customer’s name is %s and discount 
is %5.1f\n”,cust_name,cust_discnt);
continue; 
notfound: printf(“Can’t find customer %s, 
continuing\n”,cust_id); }
exec sql commit release;
return 0;
report_error:
print_dberror();
exec sql rollback release;
return 1;
}

游标

  1. 检索单行结果,可将结果直接传送到宿主程序的变量中
EXEC SQL SELECT [ALL | DISTINCT] expression [, expression…]
INTO host-variable , [host-variable,]
FROM tableref [corr_name] [ , tableref [corr_name]]
WHERE search_condition;

example

exec sql select Sname, Sage into :vSname, :vSage from Student where
Sname = :specName ;

  1. 检索多行结果,则需使用游标(Cursor)

    • 游标是指向某检索记录集的指针
    • 通过这个指针的移动,每次读一行,处理一行,再读一行… , 直至 处理完毕

在这里插入图片描述

#define TRUE 1
#include <stdio.h>
#include “prompt.h”
exec sql include sqlca;
exec sql begin declare section;
char cust_id[5], agent_id[14];
double dollar_sum;
exec sql end declare section;
int main()
{ char cid_prompt[ ]=“Please enter customer ID:;
exec sql declare agent_dollars cursor for select aid,sum(dollars)
from orders where cid = :cust_id group by aid;
exec sql whenever sqlerror goto report_error;
exec sql connect to testdb;
exec sql whenever not found goto finish;
 while((prompt(cid_prompt,1,cust_id,4)) >=0) {
exec sql open agent_dollars;
while(TRUE) {
exec sql fetch agent_dollars into :agent_id, :dollar_sum;
printf(%s %11.2f\n”,agent_id, dollar_sum);
}
finish: exec sql close agent_dollars;
exec sql commit work; 
}
exec sql disconnect current;
return 0;
report_error:
print_dberror();
exec sql rollback;
exec sql disconnect current;
return 1;
}

通过QDBC可以使游标移动,进行增删改

异常

在这里插入图片描述

SQLCA

SQLCA是一个已被声明过的具C语言的结构形式的内存信息区,其中的成员变 量用来记录SQL语句执行的状态,便于宿主程序读取与处理  SQLCA是DBMS(执行SQL语句)与宿主程序之间交流的桥梁之一

8.2过程化sql

变量的声明与使用

在这里插入图片描述

流程控制

在这里插入图片描述
在这里插入图片描述

8.3存储过程

创建存储过程

​ CREATE OR REPLACE PROCEDURE 过程名([参数1,参数2,…]) AS <过程化SQL块>;

过程名:数据库服务器合法的对象标识
参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。参数也可以定义输入参数、输出参数或输入/输出参数,默认为输入参数
过程体:是一个<过程化SQL块>,包括声明部分和可执行语句部分

执行存储过程

CALL/PERFORM PROCEDURE 过程名([参数1,参数2,…]);

修改存储过程

ALTER PROCEDURE 过程名1 RENAME TO 过程名2;

删除存储过程

DROP PROCEDURE 过程名();
在这里插入图片描述

ODBC

OLE DB

JDBC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB | 如何解决实验数据散点图重叠问题(overlap)

本期部分实验效果&#xff1a; 这期讲一下如果数据重合严重该咋办(overlap)&#xff0c;事先说明&#xff0c;本文中的绘图均使用一个几行的简单小代码进行了修饰&#xff1a; function defualtAxes axgca;hold on;box on ax.XGridon; ax.YGridon; ax.XMinorTickon; ax.YMinor…

Redis 之企业级解决方案

文章目录一、缓存预热二、缓存雪崩三、缓存击穿四、缓存穿透五、性能指标监控5.1 监控指标5.2 监控方式&#x1f34c;benchmark&#x1f34c;monitor&#x1f34c;slowlog提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、缓存预热 1.1 现象…

云服务器产生背景与历史演进

云服务器产生背景  业务量爆发和衰退周期考验后端服务器性能匹配 在传统IT架构中&#xff0c;需要提前预估业务爆发时间和业务量&#xff0c;提前部署服务器以支撑业务。但是&#xff0c;往往预估与实际结果是有差距的&#xff0c;预估量过大会造成服务器采购成本高&#x…

阿里巴巴内网 Java 面试 2000 题解析(2023 最新版)

前言 这份面试清单是今年 1 月份之后开始收集的&#xff0c;一方面是给公司招聘用&#xff0c;另一方面是想用它来挖掘在 Java 技术栈中&#xff0c;还有一些知识点是我还在探索的&#xff0c;我想找到这些技术盲点&#xff0c;然后修复它&#xff0c;以此来提高自己的技术水平…

2016年chatGPT之父Altman与马斯克的深度对话(值得一看)

2016年9月&#xff0c;现今OpenAI CEO&#xff0c;ChatGPT之父&#xff0c;时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷&#xff0c;以及就他而言&#xff0c;对于未来最为重要的五件事。这是OpenAI的两…

【概念辨析】大小端存储

一、情境 在进行内存调试窗口的查看时&#xff0c;是不是会有一种错觉&#xff0c;就是它存的数据与我们预期的都是颠倒的&#xff0c;比如&#xff1a; 这里的a就和我们预期的不是很相同。 二、大小端 大小端是计算机厂家根据自己的习惯制定的关于数据字节序的规则。 1.大端…

2023中职网络安全竞赛Web安全应用任务解析答案

Web安全应用 任务环境说明: 服务器场景:match_win03-4-1(关闭链接)服务器场景操作系统:Windows Server 2003 使用渗透机Kali Linux,访问靶机FTP服务,下载靶机网站中的部分源码并分析,将源码文件post.php中${flag1}空缺处应填写的函数作为Flag值提交。Flag:isset 使用…

程序设计语言(做题)

程序设计语言部分一、高级语言与低级语言1、低级语言&#xff08;面向机器&#xff09;2、高级语言&#xff08;面向对象&#xff09;二、编译程序与解释程序1、区别2、流程&#xff08;加粗点为不可省略过程&#xff0c;顺序不可变&#xff09;&#xff08;1&#xff09;词法分…

(指针内容)当你申请一个变量,在这期间内存会发生什么?

一. 前言C语言是比较偏底层的语言&#xff0c;为什么他比较偏底层&#xff0c;就是因为他的很多操作都是直接针对内存操作的。这篇我们就来讲解C语言的一大特点&#xff0c;也是难点&#xff0c;指针和指针操作。这篇文章我会先从基本类型的存储过程和原理讲起&#xff0c;然后…

【Docker】命令总结

目录 1.镜像命令 1.1拉取镜像 1.2查看镜像 1.3保存镜像 1.4导入镜像 2.容器命令 2.1创建并运行容器 2.2删除容器 2.3进入容器 2.4查看容器状态 2.5暂停容器 2.6恢复容器 2.7停止容器 2.8启动容器 2.8查看容器日志 3.数据卷命令 3.1创建数据卷 3.2查看所有数据…

C语言刷题(2)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰来复习一下之前所学过的内容噢&#xff0c;复习的方式&#xff0c;那当然是刷题啦&#xff0c;现在&#xff0c;就让我们进入C语言的世界吧 当然&#xff0c;题目还是来源于牛客网 完完全全零基础 编程语言初学训练营_在线编程题…

OP-TEE使用过程记录

1 项目概述 1.1项目需求 为确保用户的数据的安全&#xff0c;ARM公司提出了trustzone技术&#xff0c;个人将trustzone理解为cortex的虚拟化技术。在不增加硬件的情况下&#xff0c;使用trustzone技术达到硬件加密的效果。 1.2重点概念简要介绍 1.2.1 TrustZone机制&#x…

电子科技大学数据库与软件工程三

适用于网工和物联网专业 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1.子查询 2. 伪列 3.数据库对象 4. 块、存储过程和触发器 五、实验结论及思考题 实验结论&#xff1a; 思考题&#xff1a; 六、总结及心得体会 七、对本实验过程及方…

【华为OD机试模拟题】用 C++ 实现 - 关联子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明关联子串题目输入输出示例一输入输出说明示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华…

Spring的Bean的生命周期,Bean的装配和注入

Spring容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期&#xff0c;了解bean是怎么来的又怎么没的。 一、Bean的作用域 在Bean容器启动会读取bean的xml配置文件&#xff0c;然后将xml中每个bean元素分别转…

Bean作用域和生命周期

目录 Bean作用域的例子 作用域定义 Bean的六种作用域 设置作用域 Spring的执行过程和Bean的生命周期 Spring的主要执行流程 Bean的生命周期 在上篇博客中我们使用Spring存储和获取Bean,因此Bean是Spring中最重要的资源,今天这篇博客就深入了解Bean对象 Bean作用域的例子 …

redis(8)有序集合Zset

有序集合Zset Redis 有序集合 zset 与普通集合 set 非常相似&#xff0c;是一个没有重复元素的字符串集合。 不同之处是有序集合的每个成员都关联了一个评分(score)&#xff0c;这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的&#xf…

如何在Linux中实现进程间通信

致前行路上的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.进程间通信介绍 1.1进程间通信的目的 1.2进程间通信发展 1.3进程间通信分类 1.4进程间通信的本质 2.管道 2.1什么是管道 2.2管道与进程的关系…

华为OD机试题,用 Java 解【玩牌高手】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

智能算法实现PID智能车控制系统

智能算法实现PID智能车控制系统摘要关键词第一章绪论1.1智能车概述1.2智能PID研究现状1.3本文工作第二章 PID控制简介第三章 内模PID简介3.1 内模PID控制第四章内模智能PID智能车控制系统设计4.1 系统设计4.2内模控制原理第五章 系统仿真及结果分析5.1 系统仿真分析5.2 控制效果…