![(第三、四讲)ch04JDBC编程技术_第1页](http://file4.renrendoc.com/view/98c8df51d14df8bae30f52652bb3ef59/98c8df51d14df8bae30f52652bb3ef591.gif)
![(第三、四讲)ch04JDBC编程技术_第2页](http://file4.renrendoc.com/view/98c8df51d14df8bae30f52652bb3ef59/98c8df51d14df8bae30f52652bb3ef592.gif)
![(第三、四讲)ch04JDBC编程技术_第3页](http://file4.renrendoc.com/view/98c8df51d14df8bae30f52652bb3ef59/98c8df51d14df8bae30f52652bb3ef593.gif)
![(第三、四讲)ch04JDBC编程技术_第4页](http://file4.renrendoc.com/view/98c8df51d14df8bae30f52652bb3ef59/98c8df51d14df8bae30f52652bb3ef594.gif)
![(第三、四讲)ch04JDBC编程技术_第5页](http://file4.renrendoc.com/view/98c8df51d14df8bae30f52652bb3ef59/98c8df51d14df8bae30f52652bb3ef595.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JDBC编程技术MySQL数据库JDBC编程基本概念JDBC高级编程数据库分层设计
本章主要目标
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。另外MySQL尤其受到Java教育的欢迎。是学习JavaEE编程者的首选数据库。MySQL数据库JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface,即应用程序设计接口)。它由一些Java类组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问SyBase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。JDBC编程基本概念(1)简单地说,JDBC能完成下列三件事:(1)同一个数据库建立连接;(2)向数据库发送SQL语句;(3)处理数据库返回的结果。JDBC编程基本概念(2)JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface,即应用程序设计接口)。它由一些Java类组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问SyBase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。JDBC数据库编程基本步骤(1)第1步:将驱动程序导入到工程,程序中加载驱动。应用程序与数据库是两个独立的产品,如果我们使用Java连接数据库,我们需要驱动将两者联系起来。如果把连接对象看做是应用程序同数据库连接的桥梁的话,驱动程序类似于建造该桥梁的原材料。随着连接的数据库不同,驱动也不同。JDBC驱动程序是由很多访问数据库的类构成,为了管理方便将这些类打包成一个.jar文件。驱动可以在网上下载。并且需要添加到工程中。我们访问MySQL数据库驱动文件为”mysql-connector-java-3.1.10-bin.jar”Stringdriver="com.mysql.jdbc.Driver";//驱动程序描述字符串
Class.forName(driver);//在程序中根据驱动程序描述字符串加载驱动程序JDBC数据库编程基本步骤(2)第2步:创建连接对象Connection在主函数中定义的连接数据库字符串url,url包括数据库服务器地址及数据库名。我在这里使用的是MySQL数据库,所以我用的是MySQL驱动程序,不同的数据库用不同的驱动程序,如果你用的不是MySQL,请替换此行。服务器地址是你安装数据库的主机的IP,如果在本机,你也可以用"localhost"来连接。数据库名是你已经在数据库系统中建立过的,这里是support.Stringurl="jdbc:mysql://127.0.0.1:3306/support";//一般形式是jdbc:mysql://数据库IP地址:端口/数据库名
Connectioncon=DriverManager.getConnection(url,"root","1234");//"root","1234"是连接MySQL的用户名,密码,根据实际情况修改JDBC数据库编程基本步骤(3)第3步:在连接对象上创建命令对象Statement通过Statement类所提供的方法,可以利用标准的SQL命令,对数据库直接新增、删除或修改操作
Statementcmd=con.createStatement();第4步:执行SQL语句
Stringsql="select*fromcustomers";
执行select语句,返回结果集ResultSet,ResultSet本质上是指向数据行的游标。每调用一次next()方法,游标向下移动一行。最初它位于第一行之前,因此第一次调用next将把光标置于第一行上,使它成为当前行。随着每次调用next导致游标向下移动一行,按照从上至下的次序获取ResultSet行。JDBC数据库编程基本步骤(4)createtablestudents(snointnotnullprimarykey,snamevarchar(15),ssexvarchar(2),sdeptvarchar(15));
则我们执行查询命令之后取数据语句如下:Statementcmd=con.createStatement();Stringsql="select*fromstudents";ResultSetrs=cmd.executeQuery(sql);JDBC数据库编程基本步骤(5)while(rs.next()){intsno=rs.getInt(1);//表示取当前行第一列,因为这列数据类型是int类型的所以使用getInt()方法
Stringsname=rs.getString(2);//表示取当前行第二列
Stringssex=rs.getString(3);//表示取当前行第三列
Stringsdept=rs.getString(4);//表示取当前行第四列
System.out.printf("%-8d%-20s%-3s%-20s\n",sno,sname,ssex,sdept);}第5步:关闭连接。关闭连接是一种好的编程习惯。不使用数据库就不要占着连接了。
con.close();JDBC数据库编程基本步骤(6)完整示例连SQLServer数据库的加载驱动、创建连接
:driver=com.microsoft.jdbc.sqlserver.SQLServerDriverurl="jdbc:sqlserver://127.0.0.1:1433;databaseName=usermanager";JDBC数据库编程基本步骤(7)JDBC高级编程(1)1、PreparedStatement概念什么是带参数的Sql语句,在JDBC中如果Sql语句带有?(占位符)号,如:Stringsql="select*fromstudentswheresno=?";这里并不是表示查询学号为?的学生,而是表示这里是一个参数,在执行该语句之前,必须到参数赋值。在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,减少使用Statement。基于以下的原因:(1)代码的可读性和可维护性虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码好多了。cmd.executeUpdate("insertintotb_name(col1,col2,col2,col4)values('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");cmd=con.prepareStatement("insertintotb_name(col1,col2,col2,col4)values(?,?,?,?)")JDBC高级编程(2)(2)PreparedStatement提高性能每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用。所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行。JDBC高级编程(3)2、如何使用PreparedStatement第1步:通过连接获得PreparedStatement对象,用带占位符(?)的构造sql语句。
PreparedStatementcmd=con.preparedStatement(“select*fromStudentswheresname=?”);第2步:设置输入参数值。一定要在执行sql语句设置值。
cmd.setString(1,"张三");//1表示从左到右数的第一个参数,"张三"是为第一个参数设置的值,如果还有其它参数需要一个一个赋值。JDBC高级编程(4)第3步:执行sql语句rs=cmd.excuteQuery();Statement发送完整的Sql语句到数据库不是直接执行而是由数据库先编译,再运行。每次都需要编译。而PreparedStatement是先发送带参数的Sql语句,由数据库先编译,再发送一组组参数值。JDBC高级编程(5)JDBC高级编程(6)元数据最本质、最抽象的定义为:dataaboutdata(关于数据的数据)。它是一种广泛存在的现象,在许多领域有其具体的定义和应用。简单的说元数据就是关于数据的数据或关于信息的信息。例如:书的文本就是书的数据,而书名、作者、版权数据都是书的元数据。一般数据库系统用他来表示数据的信息,例如数据的类型,长度,存放位置等关于数据的信息用来管理和维护数据。元数据的使用,可以大大提高系统的检索和管理的效率。连接和结果集的大量信息可以从元数据对象中得到,JDBC提供了两个元数据对象类型DatabaseMetaData和ResultSetMetaData。如何获得元数据MetaData(1)JDBC通过元数据(MetaData)来获得具体的表的相关信息,例如,可以查询数据库中有哪些表,表有哪些字段,以及字段的属性等。MetaData中通过一系列getXXX将这些信息返回给我们。数据库元数据DatabaseMetaData用connection.getMetaData()获得;包含了关于数据库整体元数据信息。结果集元数据ResultSetMetaData用resultSet.getMetaData()获得;比较重要的是获得表的列名,列数等信息。如何获得元数据MetaData(2)
1、结果集元数据对象:ResultSetMetaDatameta=rs.getMetaData();
字段个数:meta.getColomnCount();
字段名字:meta.getColumnName();
字段JDBC类型:meta.getColumnType();
字段数据库类型:meta.getColumnTypeName();2、数据库元数据对象:DatabaseMetaDatadbmd=con.getMetaData();
数据库名:dbmd.getDatabaseProductName();
数据库版本号:dbmd.getDatabaseProductVersion();数据库驱动名:dbmd.getDriverName();数据库驱动版本号:dbmd.getDriverVersion();数据库Url:dbmd.getURL();该连接的登陆名:dbmd.getUserName();如何获得元数据MetaData(3)
如何获得元数据MetaData(4)事务处理(1)
1、什么是Java事务通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简洁的说就是:要么全部执行成功,要么撤销全不不执行。既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系?实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。事务处理(2)2、为什么需要事务事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。举一个简单例子:比如银行转帐业务,账户A要将自己账户上的1000元转到B账户下面,A账户余额首先要减去1000元,然后B账户要增加1000元。假如在中间网络出现了问题,A账户减去1000元已经结束,B因为网络中断而操作失败,那么整个业务失败,必须做出控制,要求A账户转帐业务撤销。这才能保证业务的正确性,完成这个操走就需要事务,将A账户资金减少和B账户资金增加方到一个事务里面,要么全部执行成功,要么操作全部撤销,这样就保持了数据的安全性。事务处理(3)3、JDBC事务JDBC事务是用Connection对象控制的。Connection提供了两种事务模式:自动提交和手工提交。在JDBC中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。在JDBC中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:事务处理(4)数据库分层设计(1)1、常用的O/R映射对象关系映射(ObjectRelationalMapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。ORM是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。数据库分层设计(2)分层设计示例我们现在编写程序都要分层设计,也即数据库访问放在一个类或几个类中。然后界面层调用,我今天使用一下OR映射思想,这个在后面开源章节里会详细介绍,所谓OR映射是指将数据库的表映射成程序中的类,表中列映射称为类的属性。对数据库访问的一些操作简称DAO层。
本章小结我们主要介绍了Java数据访问技术JDBC。在应用程序中数据都要进行持久化存储。持久化存储就是将数据存储在文件中或数据库中,不会因
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年成都房产预约买卖居间服务合同
- 2025年公司租赁共享协议模板
- 2025年报废汽车收购与再利用谅解协议
- 2025年建筑工人雇佣合同样本
- 2025年建设银行二手住房贷款合同
- 2025年全球研发合作与专利授权合同范本
- 2025年工程退款协议书模板下载
- 2025年专业清洁服务劳动合同范本
- 2025年分公司之间业务合作与分工的策划协议
- 2025年交通工具抵债协议
- 小学数学教学评一体化教学探究
- 2024年保安员考试题库【典型题】
- 人教版数学八年级下册第十九章课堂同步练习
- 第一章创新意识课件
- 2024-2029年中国R290制冷剂行业市场现状分析及竞争格局与投资发展研究报告
- 售后工程师绩效考核指南
- 自动测试系统第1章第1节测试系统发展综述
- 北师大版(2019)选择性必修第三册Unit 7 Careers Topic Talk 导学案
- 春节复工复产安全教育培训
- 2024年广西公务员考试行测真题及答案解析
- 护理质量改进项目
评论
0/150
提交评论