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小时内删除。
发表评论