JDBC简介
JDBC通过一系列接口定义了访问数据库的通用API,不同的数据库厂商根据各自数据库的特点提供的对JDBC的实现(实现类包)。
JDBC基本原理
JDBC执行流程:
- 连接数据源,如:数据库。
- 为数据库传递查询和更新指令。
- 处理数据库响应并返回的结果。
JDBC的架构
两层架构和三层架构
双层架构
作用:此架构中,Java Applet 或应用直接访问数据源。
条件:要求 Driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。
三层架构
该架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
三层?
UI(表现层) :主要是与用户交互的界面,用户接受用户输入的数据和显示处理后用户需要的数据。
BLL(业务逻辑层):UI层和DAL层之间的桥梁。实现业务逻辑(验证,计算,业务规则等)。
DAL(数据访问层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户).
Entity层
Entity(实体层):它不属于三层中的任何一层,但是它是必不可少的一层。
Entity在三层架构中的作用:
- 1、实现面向对象思想中的"封装";
- 2、贯穿于三层,在三层之间传递数据;(注:确切的说实体层贯穿于三层之间,来连接三层)
- 3、每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。
三层与实体层之间的依赖关系:
两层与三层的区别
两层:
(当任何一个地方发生变化时,都需要重新开发整个系统。"多层"放在一层,分工不明确耦合度高——难以适应需求变化,可维护性低、可扩展性低)
三层:
(发生在哪一层的变化,只需更改该层,不需要更改整个系统。层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高)。
综上,三层架构的优势:
- 结构清晰、耦合度低
- 可维护性高,可扩展性高
- 利于开发任务同步进行, 容易适应需求变化
劣势:
- 降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
- 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
- 增加了代码量,增加了工作量
JDBC使用步骤
- 导入jdbc操作
- 注册jdbc驱动
● -参数:"驱动程序类名"(mysql,oracle等不同的驱动名) ● -Class.forname("驱动程序类名") //加载MySql驱动 Class.forName("com.mysql.jdbc.Driver")
获得Connection 对象
● 3个参数:URL,username,password连接数据库 String url="jdbc:mysql://127.0.0.1:3306/test"; String username="root"; String password="123456"; Connection conn= DriverManager.getConnection(url,username,password);
创建Statement()对象
用于执行SQL语句 execute() 可以执行任何SQL语句,但是常用于执行ddl,dcl语句 executeUpdate() 执行dml语句,如 insert,update delete executeQuery() 执行DQL语句,如select //创建 Statement Statement st= conn.createStatement(); //执行DML语句 String dml="delete from k where age=24 "; String dml ="delete from k"+" where age=26";
处理SQL执行结果:
● execute(DDL) 如果没有异常则成功。 ● executeUpdate(DML) 返回数字,表示更新的行数,抛出异常则失败。 ● executeQuery(DQL) 返回resultset(结果集)对象,代表二维查询结果,使用for遍历处理,如果查询失败抛出异常。 int b=st.executeUpdate(dml);
关闭数据连接
conn.close();