第13章 JDBC

上传人:熏** 文档编号:243133230 上传时间:2024-09-16 格式:PPT 页数:42 大小:1.12MB
返回 下载 相关 举报
第13章 JDBC_第1页
第1页 / 共42页
第13章 JDBC_第2页
第2页 / 共42页
第13章 JDBC_第3页
第3页 / 共42页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,第,13,章,JDBC,主要内容,:,13.1 JDBC,的结构,13.2,通过,JDBC,访问数据库,13.3,数据库存取优化,13.4 JDBC,编程实例,JDBC,1996,年夏,,Sun,公司推出了,Java,数据库连接(,Java Database Connectivity,,,JDBC,)工具包的第一个版本。,该工具包使得程序员可以使用结构化查询语言(,SQL,)连接到一个数据库,对数据库进行查询,或者对数据库进行更新。,JDBC,使得,Java,不仅能够和远程数据通信,也能够在各种不同得数据源之间通信,从而扩大了,Java,这种跨平台编程语言的应用范围,提高了它的应用价值。,JDBC,是,Java,程序连接和存取数据库的应用程序接口(,API,),它是,Java,核心,API,的一部分。,13.1.1 JDBC,数据库应用模型,JDBC,由两层组成,上面一层是,JDBC API,,下面一层是,JDBC,驱动程序,API,。,13.1.1 JDBC,数据库应用模型,Java,应用程序,Java,程序包括应用程序、,Applet,和,Servlet,,这些类型的程序都可以利用,JDBC,方法完成对数据库的访问和操作。,JDBC,驱动程序管理器,JDBC,驱动程序管理器能够动态地管理和维护数据库查询所需要的所有厂商或第三方所提供的驱动程序对象,实现,Java,任务与特定驱动程序的连接,从而体现,JDBC,与平台无关这一特点。,驱动程序,这里的驱动程序一般由数据库厂商或第三方提供,它由,JDBC,方法调用,向特定数据库发送,SQL,请求,并为,Java,程序获取结果。,数据库,这里的数据库是指,Java,程序需要的数据库以及数据库管理系统。,1.JDBC API,JDBC API,是一系列抽象的接口,它能够应用程序进行数据库连接,执行,SQL,语句,并且得到返回结果。常用接口如下:,(,1,),java.sql.DriverManager,:,用于处理驱动程序的调入,(,2,),java.sql.Connection,:,用于与特定数据库建立连接,(,3,),java.sql.Statement,:,用于,SQL,语句的执行,(,4,),java.sql.ResultSet,:,用于保存查询所得的结果,2.,JDBC,驱动程序,JDBC,驱动程序按照连接方式的不同可以分为四种类型:,Type 1,:,JDBC-ODBC Bridge,Type 2,:,Native API Bridge,Type 3,:,JDBC-Middleware,Type 4,:,Pure JDBC Driver,Type 1,:,JDBC-ODBC Bridge,使用,JDBC,ODBC Bridge,,,用于存取标准的,ODBC,数据源,一般用来存取,Microsoft Access,、,VFP,数据库等。,JDBC,调用最终转化为,ODBC,调用,适合于开发小规模的应用程序,因为,JDBC-ODBC,桥街驱动程序中的任何错误都可能造成服务器死机。,这种方式也存在局限性。,JDBC-ODBC Bridge,采用,Native,代码(,C,语言),因此,在使用时,所有的本地数据库都必须安装在一台计算机上,并被正确设置。,这种数据库连接有着相当的开销和复杂性,因为调用必须从,JDBC,到,Bridge,,再到,ODBC,,并再从,ODBC,到本地客户,API,,直到数据库。,这种驱动程序不容许,Java Applet,即时发送。,ODBC,不能解决的问题,,JDBC,ODBC Bridge,也不能解决,比如:,Bridge,不能通过,Internet,来访问数据库。,Type 2,:,Native API Bridge,:原生,API,结合,Java,驱动程序,Native API Bridge,驱动程序利用客户机上的本地代码库来与数据库进行直接通信。与,JDBC-ODBC Bridge,一样,这种驱动程序也存在着许多限制。由于它使用的是本地库,因此这些库就必须事先安装在客户机上。,Type 3,:,JDBC-Middleware,这种类型的,JDBC,驱动程序是,4,种类型中最灵活的。这种驱动程序通常被用在三层网络解决方案中,并能够被发布到,Internet,上。这种驱动程序将,JDBC,的调用转换成个别数据库系统的独立网络协议,再转换成个别数据库系统的原生码调用。,Type 4,:,Pure JDBC Driver,这种,JDBC,驱动程序也是一种纯,Java,的驱动程序,它通过本地协议直接与数据库引擎相连。有了合适的通信协议,这种驱动程序也能够应用于,Internet,。该类驱动程序相对于其他类型的驱动程序的优势在于它的性能,在它与数据库引擎和客户机之间没有本地代码层或中间层软件。 它属于专用的驱动程序,要靠厂商提供支持。,第,13,章,JDBC,13.1 JDBC,的结构,13.2,通过,JDBC,访问数据库,13.3,数据库存取优化,13.4 JDBC,编程实例,基本流程,1,建立连接,2,执行,SQL,语句,3,检索结果,4,关闭连接,建立数据库连接,Java,应用程序与数据库交互信息必须首先与数据库建立连接。有两种方法:,建立,JDBC-ODBC,桥接器,加载纯,Java,数据库驱动程序,13.2.1,通过,JDBC-ODBC,桥接器访问数据库的基本流程,基本流程,1,建立数据库,如,Access,2,建立,ODBC,数据源,3,建立连接,4,执行,SQL,语句,5,检索结果,6,关闭连接,2.,建立,ODBC,数据源,当使用,JDBC-ODBC Bridge,来建立连接时,必须先建立,ODBC,数据源。,ODBC,数据源的配置步骤:,打开,Windows,的,“,控制面板,”,,在,“,管理工具,”,中找到,“,数据源,(ODBC),”,2.,建立,ODBC,数据源,在,“,用户,DNS,”,选项卡的,“,用户数据源,”,列表中,单击,“,添加,”,按钮,弹出,“,创建新数据源,”,对话框,2.,建立,ODBC,数据源,选择创建,“,Microsoft Access Driver,”,类型的数据源,然后单击,“,完成,”,按钮,弹出,“,ODBC Microsoft Access,安装,”,对话框,2.,建立,ODBC,数据源,在此对话框中,输入数据源名称,并单击,“,创建,”,按钮,弹出,“,新数据库,”,对话框。如果事先已经建立了数据库,可以单击,“,选择,”,按钮,并指明数据库的存放路径。,2.,建立,ODBC,数据源,在,“,新建数据库,”,对话框中,输入需要新建的数据库名称,选择数据库的保存路径,然后单击,“,确定,”,按钮,返回,“,ODBC Microsoft Access,安装,”,对话框。,在,“,ODBC Microsoft Access,安装,”,对话框中单击,“,确定,”,按钮,返回,“,ODBC,数据源管理器,”,对话框,新添加的用户数据源将出现在此对话框中。此时,单击,“,确定,”,按钮,新用户数据源创建完成。数据源创建完成之后,便可以对这个数据源进行数据表的创建和修改,记录的添加、修改和删除等数据库操作。,建立,JDBC-ODBC,桥接器连接数据库,try,Class.forName,(“sun.jdbc.odbc.JdbcOdbcDriver,”);,catch(ClassNotFoundException,ce,),System.out.println(“SQLException:”+ce.getMessage,();,常用数据库的驱动类全称:,JDBC-ODBC,连接桥:,sun.jdbc.odbc.JdbcOdbcDriver,MySQL,数据库:,Org.gjt.mm.mysql.Driver,Oracle,数据库:,Oracle.jdbc.driver.OracleDriver,SQL Server,数据库:,com.microsoft.sqlserver.jdbc.SQLServerDriver,Java SE,安装之后仅仅自带了,JDBC-ODBC,桥的驱动程序,,其他类型的数据库在加载驱动类之前要首先从,Internet,上下载或从安装数据库的安装目录中寻找驱动程序的,jar,包,并将,jar,包文件所在的路径添加到,classpath,环境变量中。,加载纯,Java,驱动程序连接数据库,JDBC,提供的,API,通过将纯,Java,数据库驱动程序转换为,DBMS,所使用的专门协议来实现与特定,DBMS,交互信息,也就是说,JDBC,可以调用本地的纯,Java,驱动程序与相应的数据库建立连接。,使用纯,Java,驱动程序连接数据库的步骤分一下三步:,(,1,)建立数据库,(,2,)加载驱动程序,(,3,)连接数据库,(,4,)建立数据库,加载驱动程序,使用纯,Java,数据库驱动程序,不需要设置数据源,,由于不依赖,ODBC,,因此应用程序可移植性好,缺点是必须安装专门的数据库驱动程序。目前,许多数据库厂商都提供了自己的相应的纯,Java,数据库驱动程序,当使用纯,Java,数据库驱动程序访问数据库时,必须保证连接数据库的应用程序所驻留的计算机上安装有相应的,DBMS,提供的纯,Java,数据库驱动程序。,例如:要连接,SQL Server2005,数据库,首先,要到微软网站上下载,Microsoft SQL Server2005 JDBC Driver1.2,驱动程序,,解压后,把解压的文件夹,sqljdbc_1.2,复制到,c:ProgramFiles,,在解压的文件夹中包含,sqljdbc.jar,文件。,然后设置,classpath,变量,,,JDBC,驱动程序未包含在,Java SDK,中。加入,.;%ProgramFiles%sqljdbc_1.2chssqljdbc.jar,应用程序加载,SQL Server,驱动程序的代码如下:,try,Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver,);,catch(Exception,e)e.printStackTrace,();,建立数据库连接的代码如下:,try,String,dbURL,=“jdbc:sqlserver:/localhost1489;DatabaseName=book”;,String,userName,=“,sa,”;,String,userPwd,=“123”;,dbConn,=,DriverManager.getConnection(dbURL,userName,userPwd,);,catch (Exception,e)e.printStackTrace,();,Localhost,表示本机地址,如果应用程序与数据库不再同一计算机上,此处应为,SQL Server,数据库所驻留的计算机,IP,地址,,1489,是数据库服务器占用的端口号,如果,1489,端口被占用,可以在,SQL Server2005,管理器中更改端口号。,建立连接,与数据库建立连接的标准方法是调用方法:,DriverManger.,getConnection,(,String,url,),DriverManger.getConnection(String,url, String user, String password),JDBC,中,URL,字符串的准确形式随着数据库的不同而有所变化,其一般形式是:,jdbc,:,如:,Connection,conn,=,DriverManager.getConnection(“jdbc:odbc:myBookDB”,”sa”,”123”);,进行数据库查询,执行,SQL,语句,连接一旦建立,就可用来向它所涉及的数据库传送,SQL,语句。,JDBC,提供了三个类,用于向数据库发送,SQL,语句。,Connection,接口中的三个方法可用于创建这些类的实例。,(1) Statement,,由方法,createStatement,所创建。,Statement,对象用于发送简单的,SQL,语句。,(2),PreparedStatement,,由方法,prepareStatement,所创建。,PreparedStatement,对象用于发送带有一个或多个输入参数的,SQL,语句。,(3),CallableStatement,,由方法,prepareCall,所创建。,CallableStatement,对象用于执行,SQL,存储程序,一组可通过名称来调用(就像函数的调用那样)的,SQL,语句。,Statement,类,1.,创建,Statement,对象,Statement SQL,语句变量,=,连接变量,.,createStatement,();,例如:,Statement stmt=,conn.createStatement,();,2.,执行查询语句,在,Java,中可以使用,executeQuery,(),方法来执行一个查询语句。该方法返回值是一个,ResultSet,类的对象,即结果集。,例如:,ResultSet,rs,=,stmt.executeQuery(“select,* from student”);,查询结果放在结果集,rs,中,在,rs,中有一个指向当前记录的指针。此指针位于当前首条记录之前,所以需要使用方法,next(),将指针指向结果集的第一行记录,这时可以对第一行的数据进行处理。方法,next(),的返回值是一个,boolean,值,若为,true,,则说明指针成功移向下一行,若为,false,,则结果集处理完毕。,While(rs.next,(),/,对记录进行处理;,3.,执行修改、插入、删除语句,格式如下:,stmt.executeUpdate(“UPDATE,修改,SQL,语句”,),;,stmt.executeUpdate(“INSERT,INTO,插入,SQL,语句”,),;,stmt.executeUpdate(“DELETE,FROM,删除,SQL,语句”,),;,4.,创建、删除表语句,格式如下:,stmt.executeUpdate(“CREATE,TABLE,创建表,SQL,语句”,);,stmt.executeUpdate(“DROP,TABLE,删除表,SQL,语句”,);,检索结果,SQL,语句发送以后,返回的结果通常存放在一个,ResultSet,类的对象中,,ResultSet,对象可以看作是一个表,这个表中包含由,SQL,返回的列名和相应的值,,ResultSet,对象中维持了一个指向当前行的指针,通过一系列的,getXXX,方法,可以检索当前行的各个列,并显示出来。,关闭连接,在对象使用完毕后,应当使用,close( ),方法解除与数据库的连接,并关闭数据库。,例如:,con.close,();,13.2.2,常用的,JDBC API,JDBC API,提供的类和接口在,java.sql,包中定义。,类或接口名称,说明,java.sql.CallableStatement,用于执行,SQL,存储过程,java.sql.Connection,表示与一个特定数据库的会话。在一个,Connection,的上下文中,执行,SQL,语句并返回结果。,java.sql.DataTruncation,截断一个数据的值产生的异常,java.sql.Date,对日期的处理类,java.sql.Driver,数据库驱动程序类。,java.sql.DriverManager,提供管理,JDBC,驱动器设置的基本服务。,java.sql.DriverPropertyInfo,程序员与驱动器交互的类,以发现和提供连接特性,java.sql.PreparedStatement,可用于有效地多次执行预编译的,SQL,语句,java.sql.ResultSet,提供了通过执行一条语句访问所生成的数据表的功能,java.sql.SQLException,提供了关于数据库访问错误的信息。,java.sql.SQLWarning,提供了关于数据库访问的警告信息,java.sql.Statement,用于执行一条静态的,SQL,语句并获取它产生的结果,java.sql.Time,处理时间,java.sql.Types,此类定义用于标识,SQL,类型的常量,java.sql.Timestamp,处理具有毫秒级的时间,java.sql.DatabaseMetaData,该类提供了关于数据库的整体信息,13.2.2,常用的,JDBC API,下图是,JDBC,接口之间的详细关系,是我们调用,JDBC,数据库进行连接、执行和获取数据的更详细的过程。,13.2.4 Java,数据类型和,SQL,数据类型间的关系,从,Java,类型到,SQL,类型的反向映射。,Java,类型,SQL,类型,String,VARCHAR,或,LONGVARCHAR,java.math.BigDecimal,NUMERIC,boolean,BIT,byte,TINYINT,short,SMALLINT,int,INTEGER,long,BIGINT,float,REAL,double,DOUBLE,byte,VARBINARY,或,LONGVARBINARY,java.sql.Date,DATE,java.sql.Time,TIME,java.sql.Timestamp,TIMESTAMP,第,13,章,JDBC,13.1 JDBC,的结构,13.2,通过,JDBC,访问数据库,13.3,数据库存取优化,13.4 JDBC,编程实例,13.3,数据库存取优化,在前面提到的,JDBC,例子中,都是将,SQL,语句直接嵌入到,Java,代码中,并由,JDBC,接口将其送到数据库,由数据库进行解释。如果在,JDBC,程序中,能够将,SQL,语句做成一个黑箱,将其存放在数据库中,而不是在,Java,程序中直接调用,将大大优化对数据库的访问。,13.3.1 Prepared,语句,prepared,语句类似于前面使用的,SQL,语句。两者不同的是,,prepared,语句在它被应用程序调用之前就被送到数据库进行解释。这种方法的好处在于当程序包含了相同的,SQL,语句时,可以提高程序的执行效率。,PreparedStatement,类是,Statement,类的子类。与,Statement,相比,PreparedStatement,增加了在执行,SQL,调用之前,将输入参数绑定到,SQL,调用中的功能。所谓绑定参数,是指它容许将相关参数转换为,Java,数据类型。当需要在同一个数据库表中完成一组记录的更新时,使用,PreparedStatement,类是一个很好的选择。,在执行,SQL,语句之前,必须告诉,JDBC,哪些值作为输入参数,为了绑定输入参数,,PreparedStatement,提供了,setXXX,(),方法,比如:,setString,( ),、,setFloat,( ),、,setInt,( ),等,这些方法与,java.sql.ResultSet,中提供的,getXXX,( ),方法相对应。,getXXX,( ),方法被用来读出,SQL,语句的查询结果,而,setXXX,( ),方法则按照,prepareStatement,( ),中的顺序从左到右的绑定参数。在上面的例子中,我们将字符串类型的第一个参数绑定为从,consumer,对象中取出的,totalmoney,,第一个,“,?,”,就对应了第一个参数。,13.3.2,存储过程,java.sql.CallableStatement,类则提供了类似,“,黑箱,”,的数据库访问方式,即:通过存储过程来访问数据库。与嵌入的,SQL,语句相比,存储过程有着以下优点:,由于在大多数数据库系统中,存储过程都是在数据库中进行预编译的,因此,它比每次都需要进行解释的动态,SQL,执行速度快得多。,存储过程中的任何语法错误都能在编译时就被发现,而不是等到运行时才发现。,Java,开发人员只需要知道存储过程的名字,以及它的输入、输出数据,而无需了解执行情况,比如:所访问的表的名称、表的结构等等。,13.3.2,存储过程,一个存储过程通常是带有一些参数,这些参数在该过程被调用时便绑定到相应的列。列绑定是指定存储过程参数的一个好方法。,CallableStatement,类与,PreparedStatement,类相似。使用,prepareCall,(),能够在初始化,CallableStatement,对象时指定所要调用的存储过程。,JDBC,提供了一组独立于数据库的语法,即:,call,prodedure_name,(?,?),?=call,prodedure_name,(?,?),这些语句中,每一个,“,?,”,代表一个存储过程的输入变量或返回变量,,JDBC,会将这些语句转换成数据库驱动程序自己的存储过程语法。,如果存储过程有一个输出参数,则在执行这个存储过程之前需要先注册这个返回值的类型。这可以通过,registerOutParameter,(),方法来完成。,第,13,章,JDBC,13.1 JDBC,的结构,13.2,通过,JDBC,访问数据库,13.3,数据库存取优化,13.4 JDBC,编程实例,13.4 JDBC,编程实例,【,例,13-1】,创建顾客,consumer,表,此表有三个字段:顾客编号,id,,姓名,name,,购物总金额,totalmoney,【,例,13,2】,在上例创建的数据表,consumer,中插入三个顾客的纪录,【,例,13-3】,修改上例中的第二条和第三条纪录的顾客总消费金额字段的值,并把数据表的内容输出到屏幕上,【,例,13,4】,在上例创建的数据表,consumer,中删除第二条记录,然后把数据表的内容输出,课后作业:,用,JDBC,完成以下编程:设有如下数据库模式:,Product(maker, model),,,PC(model, speed, ram,hd, price),。其中,每个字段的类型和含义如下:,(,1,)使用,JDBC,在现有的数据库系统,(Access, SQL Server, Oracle,等均可,),中建立上述两个表。,(,2,)使用,JDBC,将下述数据加到两个表中,model Maker speed ram,hd,price,1100 Dell 500 128 10 8900,1101 Dell 677 128 20 12000,1201 Compaq 677 128 10 11500,1202 Compaq 733 128 20 15000,(,3,)从数据库中查找硬盘容量为,20G,,生产厂家为,Compaq,的机器型号和价格。,(,4,)将原先为,10G,的,Dell,机器的硬盘更换为,12G,,而价格不变。,(,5,)删除所有时钟频率小于或等于,500,兆赫的机器。,(,6,)列出时钟频率大于,500,兆赫的,Compaq,机器的平均价格。,字段名,类型,描述,maker,Varchar(20),生产厂家的代码,model,Number(4),产品的型号,(primary key),表,Product,表,PC,字段名,类型,描述,model,Number(4),产品的型号,(primary key),speed,Number(4),计算机的时钟频率,以兆赫计算,ram,Number(4),內存容量,以兆字节计算,hd,Number(3,1),硬盘容量,以,G,字节计算,price,Number(6),价格,以人民币元计算,讨论课,每个小组就自己最终要上交的课程设计作品进行开题答辩,要求将作品主要内容、背景分析、主要模块分工进行,ppt,讲解。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!