数据库应用编程 6、7

数据库应用编程

enter description here

数据库连接技术

数据库接口中间件:

ODBC 开放式数据库连接服务

由微软公司开发,ODBC建立了一组规范,为多种数据库的开发提供统一的API接口
ODBC技术为应用程序提供了一套CLI(调用层接口)函数库和基于DLL(动态链接库)的运行支持环境。
层次结构及访问步骤
ODBC体系结构由四个部分组成:

  • ODBC数据库应用程序
  • 启动程序管理器 - 最重要的部件
  • DBMS驱动程序
  • 数据源

JDBC Java数据库连接服务

由SUN(Oracle)开发
JDBC包括一组用JAVA语言书写的接口和类,独立于特定的DBMS统一对数据库的操作。
接口封装位于java.sql、Javax.sql两个包
enter description here

数据库访问步骤

  • java程序加载java包java.sql.*中的核心类和接口,然后加载驱动程序
  • 创建数据库connection连接对象
  • 创建statement对象
  • 调用statement对象的相关方法执行对应的SQL语句
  • 处理数据库返回结果
  • 关闭连接
    enter description here
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package JDBCtest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;\

public class JDBCdemo{
public static void main(String args[]){
Connection conn=null;
Statement stmt=null;
String URL="jdbc:postgresql://localhost:5432/testDB";
String userName="name";
String passWord="123";

try{
Class.forName("org.postgresql.Driver");
conn=DriverManager.getConnection(URL,userName,passWord);//建立连接
String sql ="select * from test";
stmt=(Statement)conn.createStatement();//创建statement对象
ResultSet rs=stmt.executeQuery(sql);//executeQuery用于select返回结果集;executeUpdate用于update、delete、insert返回受影响的行数
while(rs.next()){//rs中即保存了返回的结果集
System.out.println(rs.getString("id")+" "+rs.getString("name"));
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e){
System.err.println(e.getClass().getName()+":"+e.getMessage());
System.exit(0);
}
}
}

储存过程编程

是数据库的一种对象,由一组完成特定数据处理功能的SQL语句和过程语句组成的程序,
编译后储存在数据库中
外部程序可以直接调用储存过程执行,不用再次编译

1
2
3
4
5
6
7
8
9
10
11
12
CREATE [ OR REPLACE ] FUNCTION name
( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS retype | RETURNS TABLE ( column_name column_type [, ...] ) ]
AS $$ //实际代码的开始

DECLARE
-- 声明段
BEGIN
--函数体语句

END;
$$ LANGUAGE lang_name; //结束并指明所用的编程语言

优点

  1. 减少网络通信量
  2. 执行速度更快
  3. 更强的适应性
  4. 降低了业务实现与应用程序的耦合
  5. 降低了开发的复杂性
  6. 保护数据库元信息
  7. 增强了数据库的安全性

缺点

  1. SQL本身是一种结构化查询语言,而存储过程本质上是过程化的程序;面对复杂的业务逻辑,过程化处理逻辑相对比较复杂;而SQL语言的优势是面向数据查询而非业务逻辑的处理
  2. 如果存储过程的参数或返回数据发生变化,一般需要修改存储过程的代码,同时还需要更新主程序调用存储过程的代码。
  3. 开发调试复杂,由于缺乏支持存储过程的集成开发环境,存储过程的开发调试要比一般程序困难。
  4. 可移植性差

enter description here
此例创建过程函数Out_Record()
将查询的学生ID与姓名成对输出

触发器编程

由事件触发启动而不是运行启动,所以不能有参数
可用于定义逻辑比较复杂的完整性约束或业务规则约束

分类

按执行次数

  • 语句级触发器 - FOR EACH STATEMENT
  • 行级触发器 - FOR EACH ROW 指定表数据每变化一行就执行一次触发器

按执行时间

  • BEFORE触发器
  • AFTER触发器
  • INSTEAD OF触发器

特殊变量

  • NEW - RECORD类型,对于行级触发,它保存INSERT/UPADTE操作产生的新行数据
  • OLD - RECORD类型,对于行级触发,它保存INSERT/DELETE操作前的旧行数据
  • TG_OP - text类型,获取触发器是由INSERT/UPDATE/DELETE哪类操作引发

规则触发器

附加到一个表,只捕获DML事件
将function安装为触发器的格式
enter description here

enter description here
此例在Audit_score中进行delete|update|insert的记录

事件触发器

针对一个数据库DDL操作的触发器,在数据库级别上捕获DDL事件
类型

  • ddl_command_start
  • ddl_command_end
  • sql_drop删除一个数据库前触发

安装格式
enter description here

游标

  1. 游标(Cursor)是一种临时的数据库对象;
  2. 用来存放从数据库表中查询返回的数据记录;
  3. 提供了从结果集中提取并分别处理每一条记录的机制;
  4. 游标总是与一条SQL查询语句相关联;
  5. 游标包括:SQL语言的查询结果,指向特定记录的指针。

NoSQL数据库技术

enter description here

---------------THEEND---------------