数据库系统(上):模型与语言 战德臣主讲课堂笔记

第十讲 嵌入式SQL语言之动态SQL

2018-08-27  本文已影响0人  天际神游

动态SQL的概念

静态SQL特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量(高级语言程序语句中不带冒号) 传送给嵌入式SQL语句即可(嵌入式SQL语句中带冒号)
例如:

SpecName = ‘张三’;
exec sql select Sno, Sname, Sclass into :vSno, :vSname, :vSclass from
Student where Sname= :SpecName ;

动态SQL特点:SQL语句可以在程序中动态构造,形成一个字符串,然后再交给DBMS执行,交给DBMS执行时仍旧可以传递变量

动态的构造SQL的字符串, 然后执行...

动态SQL的执行方式

EXEC SQL PREPARE sql_temp FROM :host-variable;
...
EXEC SQL EXECUTE sql_temp USING :cond-variable

数据字典与SQLDA

数据字典(Data dictionary),又称为系统目录(System Catalogs)

数据字典的内容构成

数据字典通常存储的是数据库和表的元数据, 即模式本身的信息:

------程序员需要知道这些信息------

------数据库管理系统实现算法需要用到这些信息------

数据字典的结构:

不同的DBMS, 有不同的定义. 例如:

X/Open标准的系统目录

SQLDA

SQL Descriptor Area, SQL描述符区域.

ODBC简介

ODBC(Open DataBase Connection)是一种标准 -- 不同语言的应用程序与不同数据库服务器之间通讯的标准

ODBC

JDBC

JDBC是一组Java版的应用程序接口API,提供了Java应用程序与数据库服务器的连接和通讯能力.

概念性的基本过程

打开一个连接;创建"Statement"对象,并设置查询语句;使用Statement对象执行查询,发送查询给数据库服务器和返回结果给应用程序;处理错误的例外机制.

具体的实施过程

  1. 传递给Driver给DriverManager, 加载数据库驱动
    Class.forName()
  2. 通过URL得到一个Connection对象, 建立数据库连接
    • DriverManager.getConnection(sDBUrl)
    • DriverManager.getConnection(sDBUrl, sDBUserID, sDBPassword)
  3. 接着创建一个Statement对象(PreparedStatement或CallableStatement), 用来查询或者修改数据库
    • Statement stmt=con.createStatement()
  4. 查询返回一个ResultSet
    • ResultSet rs=stmt.executeQuery(sSQL)
public static void JDBCexample(String dbid, String userid, String passwd){ 
    try { //错误捕获
        Class.forName ("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection(
        "jdbc:oracle:thin:@db.yale.edu:1521:univdb", userid, passwd);
        //加载数据库驱动,建立数据库连接
        Statement stmt = conn.createStatement();
        //创建一个语句对象
        … Do Actual Work ….
        //进行SQL语句的执行与处理工作
        stmt.close();
        conn.close();
        //关闭语句对象,关闭连接
    } catch (SQLException sqle) {
        System.out.println("SQLException : " + sqle); 
    }
}

插入语句:

try { 
    stmt.executeUpdate( "insert into instructor values(‘77987', ‘Kim', ‘Physics’,98000)");
    //插入一条记录
} catch (SQLException sqle) {
    System.out.println("Could not insert tuple. " + sqle); 
}

获取值:

// 执行一条SQL语句。获取下一条记录。提取“dept_name”属性值,提取第2列即“平均工资”列的值
ResultSet rset = stmt.executeQuery( "select dept_name, avg(salary)"+ "from instructor group by dept_name");
while ( rset.next() ) {
    System.out.println(rset.getString("dept_name") + " " + rset.getFloat(2)); 
}

嵌入式语言-ODBC-JDBC比较

嵌入式SQL的思维模式

嵌入式SQL的思维模式

ODBC的思维模式

ODBC的思维模式

JDBC的思维模式

JDBC的思维模式 有无ODBC的差别

体会: 不断的抽象, 不断的分层达到, 通用, 易用的目的.

本讲回顾



数据库系统学习笔记

上一篇下一篇

猜你喜欢

热点阅读