1、Linux 数据库编程实验指导书辽宁科技大学软件学院2015 年 12 月 10 日Linux 数据库编程实验指导书2 / 34实验一 Linux 数据库编程入门【实验目的】 1、熟练掌握 SQL*Plus工具的使用方法。 2、熟练掌握常用的 SQL语句。 【实验学时】 2学时 【实验内容】 执行 SQL*Plus命令和 SQL语句。1. 在命令行运行 SQL*plus是使用 sqlplus命令来完成,语法如下:CONNECT logon|/|proxy AS SYSOPER|SYSDBA|SYSASM edition=value2. 熟练掌握常用的 SQL 命令。Linux 数据库编程实验指
2、导书3 / 34实验二 Linux 数据库编程基础【实验目的】 1、熟练掌握 PRO*C/C+程序结构。 2、编写第一个简单 proc程序。【实验学时】 2学时 【实验内容】1. 了解 PRO*C/C+程序结构。P r o * C / C + +源 程 序 外 部 说 明部 分 程 序 体C 的 外 部变 量 说 明 外 部说 明 段 通 讯 区说 明 函 数C 局 部变 量 说 明内 部说 明 段 通 讯 区说 明 内 部 说明 部可 执 行语 句 C 语 句S Q L 语 句P L / S Q L 块Linux 数据库编程实验指导书4 / 342. 编写第一个 proc程序。#includ
3、e #include #include exec sql include sqlca;/嵌入式语句和c头文件二选一即可extern sqlglm(char*,int*,int*);void sqlerror()printf(“连接失败n“);char buf200;size_t mlen=200;size_t nlen=200;sqlglm(buf,printf(“错误描述%s“,buf);/定义所执行的错误函数int main()exec sql whenever sqlerror do sqlerror();exec sql whenever sqlwarning do sqlerror(
4、);exec sql whenever notfound do sqlerror();/使用whenever语句查错exec sql begin declare section;char *acount=“system/ty123456“;char ename20;int empno;exec sql end declare section;/使用声明区声明变量和常量/定义输入输出宿主变量exec sql connect:acount;/连接数据库exec sql select ename into:ename from scott.emp where empno=7900;printf(“e
5、name:%sn“,ename);/查询数据库return 0;Linux 数据库编程实验指导书5 / 34实验三 内嵌 SQL与游标操作【实验目的】 1、熟练掌握使用非滚动游标提取数据;2、熟练掌握使用滚动游标提取数据;【实验学时】4学时【实验内容】1. 编写程序:通过非滚动游标的使用,查询数据库中工资最高的前 n个雇员的雇员名及其工资。#include #include #include /*包含 c头文件*/#include /*包含 SQLCA头文件*/void connect();void cursor();void sql_error();void main()EXEC SQL W
6、HENEVER SQLERROR DO sql_error();/*SQL错误调用函数 sql_error处理*/connect();cursor();EXEC SQL COMMIT RELEASE;void connect()Linux 数据库编程实验指导书6 / 34char username10,password10,sever10;/*定义宿主变量:接受用户、口令和网络服务名*/printf(“输入用户名:“);gets(username);printf(“输入口令:“);gets(password);printf(“输入网络服务名:“)gets(sever);EXEC SQL CON
7、NECT:username IDENTIFIED BY :password USING :sever;/*连接到数据库*/void sql_error()pritf(“%.*s/n“, sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);void cursor()char name11;flort salary;int n;printf(“输入工资最高的 n个雇员的雇员数:“);scanf(“%d“,fflush(stdin);EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ename,sal FROM em
8、p ORDERBY sal DESC;/*定义游标*/EXEC SQL OPEN emp_cursor;/*打开游标*/Linux 数据库编程实验指导书7 / 34EXEC SQL WHENEVER NOT FOUND DO break;/*不能检索到数据:退出循环*/for(;)EXEC SQL FETCH emp_cursor INTO :name,:salary;printf(“雇员名:%s,工资:%7.2fn“,name,salary);if (sqlca.sqlerrd2=n) break;EXEC SQL CLOSE emp_cursor;/*关闭游标*/2. 使用滚动游标查询数据
9、库中数据。#include #include #include /*包含 c头文件*/#include /*包含 SQLCA头文件*/void connect();void cursor();void sql_error();void main();EXEC SQL WHENEVER SQLERROR DO sql_error();EXEC SQL WHENEVER NOT FOUND DO break;/*SQL错误调用函数 sql_error处理*未提取到数据-退出循环*/connect();cursor();EXEC SQL COMMIT RELEASE;Linux 数据库编程实验指导书
10、8 / 34void connect()char username10,password10,sever10;/*定义宿主变量:接受用户、口令和网络服务名*/printf(“输入用户名:“);gets(username);printf(“输入口令:“);gets(password);printf(“输入网络服务名:“)gets(sever);EXEC SQL CONNECT:username IDENTIFIED BY :password USING :sever;/*连接到数据库*/void sql_error()pritf(“%.*s/n“, sqlca.sqlerrm.sqlerrml,
11、sqlca.sqlerrm.sqlerrmc);void cursor()char name11;flort salary;char action;EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR SELECT ename,sal FROM emp;/*定义滚动游标*/EXEC SQL OPEN emp_cursor;/*打开游标*/EXEC SQL WHENEVER NOT FOUND DO break;/*不能检索到数据:退出循环*/Linux 数据库编程实验指导书9 / 34for(;)printf(“N:下一行,P:前一行,E:首行,L:尾行,
12、C:当前行,“);printf(“X,退出:输入选项:“);scanf(“%c“,fflush(stdin);switch(action)case “N“: case “n“:EXEC SQL FETCH NEXT emp_cursor INTO :name,salary;break;/*提取下一行*/case “P“: case “p“:EXEC SQL FETCH PRIOR emp_cursor INTO :name,salary;break;/*提取前一行*/case “F“: case “f“:EXEC SQL FETCH FIRST emp_cursor INTO :name,sa
13、lary;break;/*提取第一行*/case “L“: case “l“:EXEC SQL FETCH LAST emp_cursor INTO :name,salary;break;/*提取最后一行*/case “C“: case “c“:EXEC SQL FETCH CURRENT emp_cursor INTO :name,salary;break;/*提取当前行*/case “X“: case “x“:exit(0);Linux 数据库编程实验指导书10 / 34printf(“雇员名:%s,工资:%7.2fn“,name,salary);EXEC SQL CLOSE emp_cursor;/*关闭游标*/