JDBC关键技术以及面试问题_第1页
JDBC关键技术以及面试问题_第2页
JDBC关键技术以及面试问题_第3页
JDBC关键技术以及面试问题_第4页
JDBC关键技术以及面试问题_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 JDBC终端进入mysql: mysql -u root回车终端进入oracle: telnet 192.168.0.23 然后sqlplus openlab/open123MySQL常用命令: show databases; use databaseName; show tables;一、概述JDBC JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。 从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。 JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。 ODBC:基于C语言的数据库访问接口。 JDBC:是Java版的ODBC。

2、JDBC 特性:高度的一致性、简单性(常用的接口只有4、5个)。驱动程序按照工作方式分为四类: 1、JDBC-ODBC bridge + ODBC 驱动 JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译成访问数据库命令。 优点:可以利用现存的ODBC数据源来访问数据库。 缺点:从效率和安全性的角度来说的比较差。不适合用于实际项目。 2、基于本地API的部分Java驱动 我们应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动程序中的Java部分返回给客户端程序。 优点:效率较高。 缺点:安全性较差。 3、纯Java的网络驱动 (中间协议

3、) (本地协议) app JDBC 纯Java 中间服务器 DB 缺点:两段通信,效率比较差 优点:安全信较好 4、纯Java本地协议:通过本地协议用纯Java直接访问数据库。 特点:效率高,安全性好。二、JDBC 编程的步骤 import java.sql.*;导包 0.参数化 String driverName = com.mysql.jdbc.Driver;注册驱动 String url = jdbc:mysql:/localhost:3306/test; /协议;库或服务器名称;服务器IP,端口 String username = root; String password=root;

4、 /* Oracle的连接 String driverName = oracle.jdbc.driver.OracleDriver; String url = jdbc:oracle:thin:192.168.0.23:1521:ora10g; String username = openlab; String password=open123;*/ /以下这些都需要写在有异常的代码块里,所以需要提取出来。 Connection conn = null; Statement stmt = null; ResultSet rs = null;/建议用PreparedStatement 1.加载和

5、注册数据库驱动 Class.forName(driverName);/自动注册;需要把驱动的jar包导进来;需处理异常 /*方法二:实例化具体的Driver驱动,这写法一般不用(不能参数化驱动名,不够灵活) Driver driver = new com.mysql.jdbc.Driver(); DriverManager.registerDriver(driver); /将驱动交于DriverManager托管*/ /*方法三:Dos运行时,java -Djdbc.drives = oracle.jdbc.driver.OracleDriver; -可多个 */ 2.连接数据库 conn =

6、 DriverManager.getConnection(url, username, password);/需处理异常 /Connection返回数据库连接,如:“com.mysql.jdbc.Connection1ffb8dc”;连接不成功则返回 null 3.创建Statement对象 /为了类型安全和批量更新的效率,改用PreparedStatement stmt = conn.createStatement();/需处理异常 /返回其生成结果的对象oracle.jdbc.driver.OracleStatement198dfaf 4.操作数据库,执行SQL语句 String sql

7、= select * from tableName;/SQL语句里不需要写分号 rs = stmt.executeQuery(sql); /executeQuery(sqlString) 查询 返回查询结果集 /* String sql = insert into tableName values(?,?); / ?占位符 int number = stmt.executeUpdate(sql);/更新,再返回int(更新、修改影响的条数) */ 5.处理数据(游标) /创建索引 StringBuffer sb = new StringBuffer(); /缓存;用它可提高读取速度。当然,不用

8、也可以。 ResultSetMetaData md = rs.getMetaData(); /ResultSetMetaData可获取列的类型和属性信息 int col = md.getColumnCount(); /获取列的数目 while(rs.next() /rs.next()使游标下移一位,返回boolean,没有下一个结果则返回false for(int i=1; i| TM(事务管理器) | - DB1 con2 -| commit | - DB2 - commit 1、regester 2、TM-execute() 3、commit-TM 4、TM-commit-DB /不要(五

9、)RowSet 行集,这是一个JavaBean(事件机制),它增强了ResultSet的功能,包装了Connection、Statement、 ResultSet、DriverManage。通过RowSet可以获得数据源,设置隔离级别,也可以发送查寻语句,也实现了离线的操 作遍历,RowSet也支持预编译的Statement。是结果集的子接口,为快速开发而设(目前还不够成熟,没人用)。 RowSet中的方法大致上和ResultSet相同,当需要使用时请查阅JAVA API参考文档。八、JDBC应用的分层(DAO) 分层就是对功能的隔离,降低层与层之间的耦合性。 软件的分层初步: JSP Str

10、uts View(界面) - Controlle - Atio - Service/Biz - DAO - DB 重新封装 可复用 封装信息 懂业务逻辑 数据访问层 数据层 调业务 无技术难度 与业务无关 谁依赖谁就看谁调用谁。 软件的分层设计,便于任务的划分、降低层间的耦合。 结合PMS的设计方法,思考这样分层的好处。 并且,使代码尽量减少重复,可复用性好,扩展余地加大,而且尽量减少硬编码。 需求:实现对Person类的数据库持久化基本操作(CRUD)。 BS架构和CS架构: CS架构:两层体系结构,主要应用于局域网中。 BS架构:三层体系结构,表现层业务逻辑层数据存储层 注:层面越多,软件

11、越复杂,但更灵活。分层是必须的但是要有个度。 层次一但确定,数据必须按层访问,不能跨层访问。 层与层之间最好时单向依赖(单向调用)。 纵向划分:按功能划分。分成三层体系结构(也有两层的)。 横向划分:按抽象划分。分成抽象部分和实现部分。/*以下老师没讲的内容*/一、JDBC异常处理: JDBC中,和异常相关的两个类是SQLException和SQLWarning。 1.SQLException类:用来处理较为严重的异常情况。 比如: 传输的SQL语句语法的错误; JDBC程序连接断开; SQL语句中使用了错误的函数。 SQLException提供以下方法: getNextException()

12、 用来返回异常栈中的下一个相关异常; getErrorCode() 用来返回代表异常的整数代码 (error code); getMessage() 用来返回异常的描述信息 (error message)。 2.SQLWarning类:用来处理不太严重的异常情况,也就是一些警告性的异常。 其提供的方法和使用与SQLException基本相似。 结合异常的两种处理方式,明确何时采用哪种。 A. throws 处理不了,或者要让调用者知道; B. try catch 能自行处理,就进行异常处理。二、JavaBean的定义: 1、是一个普通的Java类 2、在结构上没有预先的规定,不需要容器,不需要

13、继承类或实现接口 3、要求必须放在包中,要求实现Serializable接口 4、要求有一个无参的构造方法. 5、属性的类型必须保持唯一,get方法返回值必须和set方法参数类型一致 6、对每个属性要有对应的get和set方法。注:隐藏属性可以没有 7、可以有外观作为显示控制,事件机制。三、SQL数据类型及其相应的Java数据类型 SQL数据类型 ? ? ? ? ? ? Java数据类型 ? ? ? ? ? ? ?说明?-? ?INTEGER或者INT ? ? ? ? ? int ? ? ? ? ? ? ? 通常是个32位整数? ?SMALLINT ? ? ? ? ? ? ? short ?

14、? ? ? ? ? 通常是个16位整数? ?NUMBER(m,n) ? ? ? Java.sql.Numeric ? ?合计位数是m的定点十进制数,小数后面有n位数 DECIMAL(m,n) 同上? ?DEC(m,n) ? ? ? ? ? ? ? Java.sql.Numeric ? ?合计位数是m的定点十进制数,小数后面有n位数? ?FLOAT(n) ? ? ? ? ? ? ? double ? ? ? ? ? 运算精度为n位二进制数的浮点数? ?REAL ? ? ? ? ? ? ? ? ? float ? ? ? ? ? ?通常是32位浮点数? ?DOUBLE ? ? ? ? ? ? ?

15、? double ? ? ? ? ? 通常是64位浮点数? CHAR(n) ? ? ? ? ? String ? ? ? ? ? 长度为n的固定长度字符串 CHARACTER(n) 同上? ?VARCHAR(n) ? ? ? ? ? ?String ? ? ? ? ? 最大长度为n的可变长度字符串? ?BOOLEAN ? ? ? ? ? ? ? ?boolean ? ? ? ? ?布尔值? ?DATE ? ? ? ? ? ? ? ? ? Java.sql.Date ? ? 根据具体设备而实现的日历日期? ?TIME ? ? ? ? ? ? ? ? ? Java.sql.Time ? ? ? 根

16、据具体设备而实现的时戳? ?TIMESTAMP ? ? ? ? ? ? Java.sql.Timestamp ?根据具体设备而实现的当日日期和时间? ?BLOB ? ? ? ? ? ? ? ? Java.sql.Blob ? ? 二进制大型对象? ?CLOB ? ? ? ? ? ? ? ? ?Java.sql.Clob ? ? 字符大型对象? ?ARRAY ? ? ? ? ? ? ? ? Java.sql.Array四、 面向对象的数据库设计 类的关联,继承在数据库中的体现: 类定义表定义 类属性表字段 类关系表关系 对 象表记录 注: Oid(对象id)业务无关 在数据库中每一条记录都对应一个唯一的id; Id通常是用来表示记录的唯一性的,通常会使用业务无关的数字类型 字段的个数不会影响数据库的性能,表则越多性能越低。 (一)类继承关系对应表, 1、 为每一个类建一张表。通过父类的Oid来体现继承关系。 特点:在子类表中引用父类表的主建作为自己的外建。 优点:方便查询。属性没有冗余。支持多态。 缺点:表多,读写效率低。生成报表比较麻烦。 2、 为每一个具体实现类建一个表 特点:父类的属性被分配到每一个子类表中。 优点:报表比较容易 缺点:如果父类发生改变会引起所有子类表随之更改。并且不支持多态。数据有少量冗余。 3、 所有的类在一张表中体现,加一个类型辨别

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论