ODBC和JDBC
ODBC:Open DataBase Connection
1.ODBC是什么
  ODBC是⼀种标准--不同语⾔的应⽤程序与不同数据库服务器之间通讯的标准,可以配合很多⾼级语⾔来使⽤
2.ODBC的内容
  (1)⼀组API(应⽤程序接⼝),⽀持应⽤程序与数据库服务器的交互
  (2)应⽤程序通过调⽤ODBC API,实现
    1)与数据服务器的连接
    2)向数据库服务器发送SQL命令
    3)⼀条⼀条的提取数据库检索结果中的元组传递给应⽤程序的变量
  (3)具体的DBMS提供⼀套驱动程序,即Driver 库函数,供ODBC调⽤,以便实现数据库与应⽤程序的连接
3.应⽤程序如何通过ODBC连接⼀个数据库服务器
  (1)ODBC应⽤前,需要确认具体DBMS Driver被安装到ODBC环境中
  (2)当应⽤程序调⽤ ODBC API时,ODBC API 会调⽤具体DBMS Driver库函数,DBMS Driver库函数则与数据库服务端通讯,执⾏相应的请求动作并返回检索结果
  (3)ODBC应⽤程序⾸先要分配⼀个SQL环境,再产⽣⼀个数据库连接句柄
  (4)应⽤程序通过使⽤SQLConnect(),打开⼀个数据库连接,SQLConnect()的具体参数:
    1)connection handle,连接句柄
    2)the server,要连接的数据库服务器
    3)the user identifier,⽤户
    4)password,密码
    5)SQL_NTS类型说明前⾯的参数是空终⽌的字符串
  (5)举例
1int ODBCexample()
2 {
3//分配数据库连接环境
4    RETCODE error;    //返回状态吗
5    HENV env;    //环境变量
6    HDBC conn;    //连接句柄
7    SQLAllocEnv(&env);
8    SQLAllocConnect(env,&conn);
9//打开⼀个数据库连接
10    SQlConnect(conn,"aura.bell-labs",SQL_NTS,"avi",SQL_NTS,"avipasswd",SQL_NTS);
11
12    {
13        ...Do actual work ...
14    }
15
16//断开连接与释放环境
17    SQLDisconnect(conn);
18    SQLFreeConnect(conn);
19    SQLFreeEnv(env);
20 }
View Code
4.应⽤程序如何通过ODBC与数据库服务器进⾏通讯
  (1)应⽤程序使⽤SQLExecDirect()函数向数据库发送SQL命令
  (2)使⽤SQLFetch()获取产⽣的结果元组
  (3)使⽤SQLBindCol()绑定C语⾔变量与结果中的属性
    1)当获取⼀个元组时,属性值会⾃动地传送到相应的C语⾔变量中
    2)SQLBindCol()的参数
    ODBC定义的stmt变量,查询结果中的属性位置
    SQL到C的类型变换,变量的地址
    对于类似字符数组⼀样的可变长度类型,应该给出
      a.变量的最⼤长度
      b.当获取⼀个元组后,实际长度的存储位置
      c.当返回的实际长度是负数时,说明是⼀个空值
5.ODBC的其他功能
  (1)动态SQL语句的预编译-动态参数传递功能java的jdbc连接数据库
  (2)获取元数据特性
    1)发现数据库中的所有关系的特性
    2)发现每⼀个查询结果的列的名字和类型等
  (3)默认每⼀条SQL语句都被作为⼀个独⽴的能够⾃动提交的事务来处理
    1)应⽤程序可以关闭⼀个连接的⾃动提交特性
    2)有些事务要显式的给出提交和撤销的命令
JDBC:Java DataBase Connection
1.JDBC是什么?
  JDBC是⼀组Java版的应⽤程序接⼝API,提供了Java应⽤程序与数据库服务器的连接和通讯能⼒
2.JDBC API
  JDBC API分为两个程序包
  (1)Java.sql:核⼼API--使⽤java.sql.DriverManager类,java.sql.Driver和java.sql.Connection接⼝连接到数据库
  (2)javax.sql:可选扩展API--包含了JNDI的资源,以及管理连接池,分布式事务等,使⽤DataSource接⼝连接到数据库
3.JDBC的功能
  (1)核⼼API所包含的功能
    1)java.sql.DriverManager--处理驱动的调⼊并且对产⽣新数据库连接提供⽀持
    2)java.sql.Driver--通过驱动对数据库访问,连接到数据库的应⽤程序必须具有该数据库的特定驱动
    3)java.sql.Connection--代表对特定数据库的连接
    4)java.sql.Statement--对特定的数据库执⾏SQL操作
    5)java.sql.PreparedStatement--⽤于执⾏预编译的SQL语句
    6)java.sql.CallableStatement--⽤于执⾏对数据库内嵌过程的调⽤
    7)java.sql.ResultSet--从当前执⾏的SQL语句中返回结果数据
  (2)java⾃带的异常捕获及其处理
    Try(...) Catch(...)
4.应⽤程序使⽤ java api 访问数据库的过程
  (1)概念性的过程
    1)打开⼀个连接:创建“Statement”对象,并设置查询语句
    2)使⽤Statement对象执⾏查询,发送查询给数据库服务器和返回结果给应⽤程序
    3)处理错误的例外机制
  (2)实际过程
    1)传递⼀个Driver给DriverManager,加载数据库驱动  //Class.forName()
    2)通过URL得到⼀个Connection对象,建⽴数据库连接  //Connection(sDBRrl) Connection(sDBUrl, sDBRserID, sDBPassword)
    3)创建⼀个Statement对象(PreparedStatement 或 CallableStatement),⽤来查询或修改数据库  //Satement stmt = ateStatement     stmt是⼀个Statement类型的句柄
    4)查询返回⼀个ResultSet  //ResultSet rs = uteQuery(sSQL)
    5)错误捕获语句
  (3)更新操作Update to database
  (4)查询操作Execute query and fetch and print results
  (5)⽰例
1//Java 类
2public static void JDBCexample(String dbid, String userid, String passwd)
3 {
4try{
5        Class.forName("oracle.jdbc.driver.OracleDriver");
6        Connection conn = Connection("jdbc:oracle:thin:@db.yale.edu:1521:univdb",userid,passwd);
7        Statement stmt = ateStatement();
8try{
9            uteUpdate("insert into instructor values('77978','Kim','Physics','98000')");
10        }catch(SQLException sqle){
11            System.out.println("Could not insert tuple."+sqle);
12        }
13        ResultSet rset = uteQuery("select dept_name, avg(salary)"+"from instructor group by dept_name");
())
15        {
16            System.out.String("dept_name")+""+Float(2));
17        }
18        stmt.close();
19        conn.close();
20    }catch (SQLException sqle){
21        System.out.println("SQLException:"+sqle);
22    }
23 }
View Code
5.ODBC和JDBC⽐较
  (1)嵌⼊式SQL的思维模式:语句形式执⾏
    建⽴数据连接--声明⼀个游标--打开游标--获取⼀条记录--关闭游标--断开数据库连接
  (2)ODBC的思维模式:API函数形式执⾏
    建⽴数据库连接--分配语句句柄--⽤句柄执⾏SQL--建⽴⾼级语⾔变量与句柄属性的对应--获取⼀条⼀条的记录--释放语句句柄--断开数据库连接
  (3)JDBC的思维模式:对象形式执⾏
    建⽴数据连接--创建语句对象--⽤语句对象执⾏SQL,并返回结果对象--从结果对象获取⼀条⼀条记录--提取对象的属性值传给⾼级语⾔变量--释放语句对象--断开数据库连接
  (4)嵌⼊式SQL对数据库的访问
    ⽤户<-->应⽤程序<-->数据库管理系统<-->操作系统
  (5)基于JDBC/ODBC的数据库访问
    ⽤户<-->应⽤程序<-->通⽤编程接⼝(ODBC)<-->数据库管理系统<-->操作系统    通⽤编程接⼝:使得不同数据库管理系统可以执⾏同⼀命令

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。