




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章 JDBC技术和数据库开发应用,本章知识点,JDBC技术 JDBC的体系结构 JDBC驱动程序类型 SQL语言 MySQL数据库 MySQL的安装、配置 在MySQL环境下创建数据库及数据表 JDBC中的主要接口和类的使用 DriverManager类 Connection接口 Statement接口 PreparedStatement接口 ResultSet接口 数据库开发模式,14.1 JDBC技术,JDBC(Java Database Connectivity):Java数据库连接。 Java程序使用JDBC API与数据库进行通信,并用它操作数据库中的数据。这种API与特定数据库的驱动程序相分离,使开发人员能够改变底层的数据库,而不必修改访问数据库的Java代码。,14.1.1 JDBC的体系结构,JCP(Java Community Process):一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新Java技术规范等。,JCP为不同的数据库厂商的数据库连接制定了接口规范,各数据库厂商针对接口编程。,JDBC规范两部分组成:API(Application Program Interface)+SPI(Service Provider Interface)服务提供者接口。SPI要实现API。,程序设计者调用API,API调用SPI,SPI与数据库直接打交道,称为数据库的驱动程序。如果更换数据库则需更改SPI。,14.1.2 JDBC数据库驱动程序的实现方式,JDBC-ODBC bridge plus ODBC driver(类型1):JDBC-ODBC桥接驱动程序。其底层通过ODBC(Open Database Connectivity)驱动程序来连接数据库。 用户的计算机(客户端)必须事先安装好ODBC驱动程序。 将JDBC的调用方式转换为ODBC驱动程序的调用方式。 Access数据库存取为此类型。,JDBC-ODBC Bridge,Java 应用程序,ODBC Driver,数据库,14.1.2 JDBC数据库驱动程序的实现方式,Native API Bridge,Java 应用程序,Native Driver,数据库,Native-API partly-Java driver(类型2):本地 API-部分用Java来编写的驱动程序。 应用程序使用JDBC API访问数据库时,驱动程序将JDBC API访问转换成数据库厂商提供的数据库API访问。 要求客户端必须安装特定的数据库客户端开发包,限制了应用程序对其他数据库的使用(可移植性)。 例如,Oracle提供有此类型的驱动。最大的好处就是功能强大;缺点:需要在客户端安装一个很大的数据库客户端开发包、非可移植性,数据库升级可能要修改客户端API,线程不安全等等。,14.1.2 JDBC数据库驱动程序的实现方式,JDBC-Net pure Java driver(类型3):JDBC 网络纯 Java 驱动程序。 JDBC驱动程序会将JDBC API调用解释成与数据库无关的网络通信协议,经过中间服务器的第二次解析,最后才转换成相对应的数据库通信协议。 通过中间件存取数据库,用户不需要安装特定的驱动程序,而是调用中间件。 具有最大的灵活性,通常由非数据库厂商提供。,JDBC-middleware,Java 应用程序,middleware,数据库,14.1.2 JDBC数据库驱动程序的实现方式,Native-protocol pure Java driver(类型4):本地协议纯 Java驱动程序。 这种驱动程序将 JDBC API调用直接转换为 DBMS 所使用的网络协议。 性能最高。,Pure Java Driver,Java 应用程序,数据库,14.1.3 JDBC API的主要类和接口简介,JDBC API由一系列与数据库访问有关的类和接口组成,它们放在java.sql包中。其中主要的类和接口有: DriverManager类 Connection接口 Statement接口 PreparedStatement接口 ResultSet接口,14.1.3 JDBC API的主要类和接口简介,14.2 MySQL数据库,MySQL是一个多用户、多线程的数据库,由瑞典MySQL AB公司开发,2010年被甲骨文公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。其特点是体积小、速度快、总体拥有成本低,为开源软件,MySql已经成为目前最受欢迎的中小型企业数据库之一。 MySQL官方网址: 下载MySQL服务器安装包:5.0版本 下载MySQL JDBC驱动程序:connector/J,14.2.1 MySQL数据库的安装和配置,MySQL的安装过程:按向导采取默认安装即可 MySQL服务器的配置 总体上采取默认向导选项的处理 在”Character Set”(字符集)步骤将选项改为”Mannual Selected Default Character Set/Collation”,在列表框中选择”gb2312” 在”set security options”(安全选项)中为默认用户”root”指定密码,14.2.2 MySQL的环境,启动MySQL后首先输入密码,进入命令行方式,14.2.3 MySQL数据库的基本命令,14.2.4 创建MySQL数据库、表,【例】创建数据库和表。 数据库名sim(Student Information Management) 创建学生表 create table student ( id int not null auto_increment, no varchar(15) not null, name varchar(10) not null, birthday date, department varchar(20), primary key (id) );,附:SQL语言,SQL全称是“结构化查询语言(Structured Query Language)”,最早由IBM公司提出,目的是为了在不同的数据库之间构建一个统一的操作平台。由于SQL具有结构化、功能强大,简单易学的特点,1987年被ANSI制定为标准,此后几乎所有的关系型数据库都支持SQL语言。 SQL包含4个部分 数据查询语言DQL(Data Query Language): select 数据操纵语言DML(Data Manipulation Language): insert, update, delete 数据定义语言DDL(Data Definition Language): create, drop 数据控制语言DCL(Data Control Language): commit, rollback 在使用Java语言开发关于数据库的应用程序中主要使用insert、 delete、update、select 4个命令(增删改查)。,附:SQL语言-插入语句,insert 格式 insert into 表名(字段1,字段2 ,) values(取值1,取值2,) 功能:按照给定的值对给定的字段依次赋值 说明: 如果没有给出任何字段,则必须给出所有字段的取值,由系统依次为所有字段赋值。 没有列出的字段的默认取值为null。 举例: insert into student(no, name, birthday,department) values(01, tom, 1980-1-1, 计算机系);,附:SQL语言-删除语句,delete 格式 delete from 表名 where 条件 功能:删除表中满足条件的记录 说明:如果没有条件,则对表中所有记录进行删除 举例: delete from student where birthday 2010-6-1 ,附: SQL语言-更新语句,update 格式 update 表名 set 字段1=取值1,字段2=取值2 ,) where 条件 功能:将经条件筛选后的记录,由给定的取值为指定的字段进行更新 说明: 如果没有条件,则对表中所有记录进行更新。 举例: update student set department= 外语系 where name=tom update student set department= 管理系,附:SQL语言-查询语句,select命令 常用格式 select 字段1,字段2, from 表名 where 条件 功能:从数据表中检索满足条件的记录。 举例 select * from student; select id, name from student where birthday=1980-1-1 select * from student where name like t%,14.2.5 在Eclipse中加载MySQL的驱动,需要将MySQL的驱动包.jar加入到Java的项目中,14.2.5 在Eclipse中加载MySQL的驱动,添加”User Library”,14.2.5 在Eclipse中加载MySQL的驱动,新建”User Library”,14.2.5 在Eclipse中加载MySQL的驱动,为”User Library”指定jar包,14.2.6 在程序中驱动MySQL数据库,public static void main(String args) Connection con = null; Statement st = null; try / 注册驱动 Class.forName(“com.mysql.jdbc.Driver“); / 获取数据库的连接 con = DriverManager.getConnection(“jdbc:mysql:/:3306/sim“, “root“, “1234“); / 创建对数据库的操纵对象 st = con.createStatement(); / 执行SQL语句 String sql = “insert into student(no, name, birthday,department) values(02, jerry, 1980-5-1, 计算机系)“; int rows = st.executeUpdate(sql); / 处理SQL结果 System.out.println(rows + “ rows affected.“); catch (ClassNotFoundException e) System.out.println(“failed to register driver.“); catch (SQLException e) System.out.println(“failed to execute sql.“); finally /释放资源 try st.close(); catch (Exception e) try con.close(); catch (Exception e) ,14.3 Java应用程序通过JDBC存取数据库的过程,1. 加载(注册)数据库的JDBC驱动程序 2. 建立数据库连接 3. 建立与执行SQL语句 4. 处理结果集 5. 关闭数据库连接,1. 加载(注册)JDBC驱动程序,(1)使用类装载器 Class.forName(driverName); 例如:Class.forName(“com.mysql.jdbc.Driver“); (2)直接实例驱动 Driver d=new com.mysql.jdbc.Driver(); DriverManager.registerDriver(d);,1. 加载(注册)JDBC驱动程序,类什么时候被加载? 第一,创建该类对象的时候,会加载该类及该类的所有父类。 第二:访问该类的静态成员的时候。 第三:classforName(“类名”)。,2. 建立数据库连接,使用DriverManger.getConnection()建立与数据库的连接 Connnetion getConnection(String URL, String user, String password ) 返回连接到特定数据库的Connnetion对象。 参数URL由三部分组成 jdbc : subProtocol : subName 主通信协议 子通信协议 子名称 user:数据库用户名 password:用户密码,2. 建立数据库连接,JDBC-ODBC桥方式连接Access数据库 url = “jdbc:odbc:AccessDSN “ 说明: AccessDSN表示为Access数据库建立的ODBC的DSN。 DSN(Data Source Name,数据源名称) Type4方式连接MySQL数据库 URL = “ jdbc:mysql:/ip:port/database “ 例如:URL= “ jdbc : mysql: /: 3306/sim “ Connection con = DriverManager.getConnection(“jdbc:mysql:/:3306/sim“, “root“, “1234“);,3. 建立SQL语句对象,建立数据库连接后,必须先建立Statement对象才能执行SQL语句。 常用的Statememt Statement接口 PreparedStatement接口,3. 建立SQL语句对象,Statement接口 方式一:Statement createStatement() 方式二:Statement createStatement(int resultSetType, int resultSetConcurrency) resultSetType:结果集类型 ResultSet.TYPE_FORWARD_ONLY(1003): 结果集只能向前移动,使用得最广泛。默认。 ResultSet.TYPE_SCROLL_INSENSITIVE(1004): 结果集可以双向滚动,但不及时更新。即在数据库并发工作环境下,如果记录被修改过,修改的结果不在结果集中反应出来。该方式会加载所有查询到的记录,在大量记录集返回时慎用。 ResultSet.TYPE_SCROLL_SENSITIVE(1005): 结果集可以双向滚动,并及时跟踪数据库的更新,更改结果集中的数据 。该方式也会加载所有查询到的记录,且要进行二次查询,效率最低,开销最大。,3. 建立SQL语句对象,resultSetConcurrency:并发类型 ResultSet.CONCUR_READ_ONLY(1007): 结果集为只读。默认。 ResultSet.CONCUR_UPDATABLE(1008): 结果集可被更改。 【例】 st = con.createStatement(ResultSet. TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); String sql=“select * from student”; ResultSet rs = st.executeQuery(sql);,3. 建立SQL语句对象,使用PreparedStatement 用于处理预编译的SQL语句,即将SQL语句先放到数据库中进行编译,以后如再出现相同的SQL语句(这时可能参数值不同),也不需要再进行编译。 提高了数据库执行SQL语句的性能。 先定义SQL语句,交给PreparedStatement去编译。 创建方式同Statement。 【例】执行select查询语句。 String sql = “select * from student“; PreparedStatement pst= con.prepareStatement(sql); ResultSet rs = pst.executeQuery();,3. 建立SQL语句对象,【例】执行带参数的select查询语句。 String sql = “select *from student where name=? “; PreparedStatement pst = con.prepareStatement(sql); pst.setString(1, “tom“); /设置要传入的第一个参数(?)的值 ResultSet rs = pst.executeQuery(); 【例】执行带参数的update语句。 String sql = “update student set no=? where name= ? “; PreparedStatement pst= con.prepareStatement(sql); pst.setString(1, “101“); /设置要传入的第一个参数(?)值 pst.setString(2, “Rich“); /设置要传入的第二个参数(?)值 pst.executeUpdate();,3. 建立SQL语句对象,Statement对象创建后,有3种方法执行SQL语句 executeQuery():执行select语句。 executeUpdate():执行insert、delete、update等。 execute():执行select、insert、delete、update等。 举例 ResultSet rs=st.executeQuery(“select * from course “); int rows = st.executeUpdate(“update student set age=age+1“); int rows = st.executeUpdate(“delete course for credit=3“);,4. 处理结果集ResultSet,说明:结果集的游标(指针)指在当前记录的前一个位置,即使查询结果为空也是如此。通过rs.next()操作结果的真/假可以判断结果集是否空。 if(rs.next() while(rs.next() 迭代方式处理ResultSet记录集中所有记录 while( rs.next() ) System.out.println(rs.getInt(1); System.out.println(rs.getString(2); 1、2、3、表示各字段相对位置,也可以使用字段名称。,4. 处理结果集ResultSet,ResultSet 中的常用方法 rs.next(); 让游标下移一个位置 rs.previous(); 让游标上移一个位置 绝对定位方法 rs.first(); 定位到第一条记录 rs.last(); 定位到最后一条记录 rs.avsolute(n); 定位到第n 条记录。n 为正数,从第一条开始往后第n 条;n 为负数,从最后一条往前第n 条;0 为非法。 相对定位方法 rs.relative(n): 定位到相对于当前记录的第n条记录。n 为正数,以当前记录位置为起始位置向下移动n 条;n 为负数,以当前记录位置为起始位置向上移动n 条;0 不移动,指向当前记录。 判断游标位置方法: isFirst(); isLast(); 得到当前游标位置:getRows();,4. 处理结果集ResultSet,ResultSet 中的常用方法 String getString(int columnIndex):按字段的位置取出文本型字段值。 String getString(String columnName) :按字段的名字取出文本型字段值。 getLong(int) getLong(String) getInt(int), getInt(String) getDouble(int), getDouble(String) getDate(int), getDate(String) getBoolean(int), getBoolean(String) ,MySQL字段类型与java基本数据类型的对比,5. 关闭数据库连接,通过JDBC存取数据库的最后一个操作是依次关闭ResultSet 、Statement 、Connection等对象。 rs.close(); st.close(); con.close();,14.3 Java应用程序通过JDBC存取数据库的过程,【例】对student表进行增删改查操作。,14.4 数据库操作模式,数据库操作模式-面向接口的编程方式 DAO(Data Access Object 数据访问对象) “数据访问”的含义:在业务逻辑与数据库资源之间的操作,与数据库打交道。 DAO 的设计:将DAO定义为接口,把对数据库的操作(如最基本的增删改查)全部封装在里面。 以用户Student管理为例,DAO中提供如下方法 插入一个新学生- void insert (Student stu); 更新学生所在系- updateDep (String oldDep, String newDep); 查询并显示所有学生- void showAllStudents(); 按姓名查询学生- Student selectByName(String name);,14.4 数据库操作模式,DAO接口 public interface StudentDao void insert (Student stu); void updateDep(String oldDep, String newDep); void showAllStudents(); Student selectByName(String name); ,14.4 数据库操作模式,DAO的实现类 public class StudentDaoImpl implements StudentDao public static Connection getConnection() Connection con = null; try Class.forName(“com.mysql.jdbc.Driver“); con = DriverManager.getConnection(“jdbc:mysql:/:3306/sim“, “root“, “1234“); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); return con; ,14.4 数据库操作模式,public void insert(Student stu) Connection con = null; PreparedStatement pst = null; String sql = null; con = getConnection(); try sql = “insert into student(no, name, birthday, department) values(?,?,?,?)“; pst = con.prepareStatement(sql); pst.setString(1, stu.getNo(); pst.setString(2, stu.getName(); pst.setDate(3, new java.sql.Date(stu.getBirthday().getTime(); pst.setString(4, stu.getDepartment(); pst.executeUpdate(); catch (SQLException e) e.printStackTrace(); finally if(pst!=null) trypst.close(); catch(SQLException e) if(con!=null) trycon.close(); catch(SQLException e) ,14.4 数据库操作模式,public void updateDep(String oldDep, String newDep) Connection con = null; PreparedStatement pst = null; String sql = null; con = getConnection(); try sql = “update student set department=? where department=?“; pst = con.prepareStatement(sql); pst.setString(1, newDep); pst.setString(2, oldDep); pst.executeUpdate(); catch (SQLException e) e.printStackTrace(); finally if(pst!=null) trypst.close(); catch(SQLException e) if(con!=null) trycon.close(); catch(SQLException e) ,14.4 数据库操作模式,public void showAllStudents() Connection con = null; Statement st = null; String sql = null; ResultSet rs = null; con = getConnection(); try sql = “select * from student“; st = con.createStatement(); rs = st.executeQuery(sql); while (rs.next() System.out.println(rs.getInt(“id“)+“,“+rs.getString(“no“)+“,“+rs.getString(“nam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区重阳节工作总结模版
- 小学数学教师教育教学工作总结模版
- 统编人教版三年级语文下册《口语交际:春游去哪儿玩》示范公开课教学课件
- 苏少版四年级音乐下册第一单元四季放歌教学设计
- 灾害急救护理体系构建
- 员工心态培训总结模版
- 陕西省2025届七下数学期末经典模拟试题含解析
- 新员工入职工作心得体会模版
- 级长工作总结大班级级长工作总结模版
- 大学生职业规划大赛《经济统计学专业》生涯发展展示
- 初三数学总复习教学策略课件
- 一年级语文下册识字表(可打印最全版本)
- 结晶葡萄糖生产工艺简介课件
- 危大工程验收记录表(模板工程)
- 中班科学活动:风车转转转课件-2
- 医院职能部门监管及持续改进记录表(DOC57)
- 质量整改通知单(样板)
- 2022年教学教材《石油裂解与乙烯》精品优秀教案
- 八年级地理上册《第一章中国的疆域与人口》教案湘教
- 品质异常8D改善报告(杂项)
- 深圳城市更新工改工专题研究报告
评论
0/150
提交评论