Java面向对象程序设计案例教程课件:Java数据库编程基础_第1页
Java面向对象程序设计案例教程课件:Java数据库编程基础_第2页
Java面向对象程序设计案例教程课件:Java数据库编程基础_第3页
Java面向对象程序设计案例教程课件:Java数据库编程基础_第4页
Java面向对象程序设计案例教程课件:Java数据库编程基础_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

Java数据库编程基础本讲目标JDBC概述JDBC常用API(Driver、DriverManager、Connection、Statement、ResultSet)连接数据库的基本过程执行查询语句处理数据集应用JDBC访问SQLServer数据库2JDBC概述概述(什么是JDBC)java数据库连接(JavaDatabaseConnectivity,JDBC)是一种用于执行SQL语句的JavaAPI,由一组用Java编程语言编写的类和接口组成。JDBC为数据库开发人员提供了一组标准的API,使他们能够用纯JavaAPI来编写数据库应用程序。3JDBC概述JDBC的目的? 推广java的应用。 设计出一种通用的数据库访问接口。使应用程序开发人员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统。JDBC的用途是什么? 简单地说,JDBC可做三件事: 数据库建立连接。 发送SQL语句。 处理结果。

4JDBC概述JDBC工作原理JDBC有两部分组成,第一部分是供程序员调用的API,另一部分是需要数据库厂商实现的SPI(ServlceProviderInterface,数据库厂商需要实现的接口),也就是驱动程序。java/web应用程序JDBCMysqlOracledb2Mysql驱动Oracle驱动db2驱动5JDBC常用API常用的类或者接口作用DriverManager类驱动管理类,支持驱动器和数据库连接的创建Connection接口代表与某一数据库的连接Statement接口在连接中执行SQL并取得执行结构PreparedStatement接口是Statement的子接口,代表预编译的SQL声明CallableStatement接口是Statement的子接口,代表SQL的存储过程ResultSet接口代表执行SQL后产生的数据库结果集6JDBC常用APIDriverManager DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。 对于简单的应用程序,一般程序员需要在此类中直接使用的唯一方法是DriverManager.getConnection。正如名称所示,该方法将建立与数据库的连接。JDBC允许用户调用DriverManager的方法getDriver、getDrivers和registerDriver及Driver的方法connect。但多数情况下,让DriverManager类管理建立连接的细节为上策。7JDBC常用APIDriverManagerDriverManager类包含一个Driver类,它们已通过调用方法DriverManager.registerDriver对自己进行了注册。所有Driver类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时DriverManager类进行注册。这样,用户正常情况下将不会直接调用DriverManager.registerDriver;而是在加载驱动程序时由驱动程序自动调用。加载Driver类,然后自动在DriverManager中注册 可以通过如下方式:Class.forName("jdbc:sqlserver://ip:port;databaseName=TestDB”) 通过调用方法Class.forName。这将显式地加载驱动程序类。由于这与外部设置无关,因此推荐使用这种加载驱动程序的方法。8JDBC常用APIDriverManager加载Driver类并在DriverManager类中注册后,它们即可用来与数据库建立连接。当调用DriverManager.getConnection方法发出连接请求时,DriverManager将检查每个驱动程序,查看它是否可以建立连接。 以下代码是通常情况下用驱动程序建立连接所需所有步骤的示例:9JDBC常用APIDriverManager//加裁驱动程序并自动注册连接实例Class.forName(“com.microsoft.sqlserver.dbc.SQLServerDriver");//设置URLStringurl="jdbc:sqlserver://ip:port;databaseName=TestDB";//设置用户名和密码Stringusername=“sa";Stringpassword=“sasa";//通过DriverManager向DB发出连接请求,获得连接对象Connectionconn=DriverManager.getConnection(url,username,password);10JDBC常用APIConnection与数据库的连接对象Connection对象代表与数据库的连接。连接过程包括所执行的SQL语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。Connectioncon=DriverManager.getConnection("jdbc:sqlserver://ip:port;databaseName=TestDB",“sa",“sasa");11JDBC常用APIConnection什么是JDBCURLJDBCURL提供了一种标识数据库的方法,可以使相应的驱动程序能识别该数据库并与之建立连接。实际上,驱动程序编程人员将决定用什么JDBCURL来标识特定的驱动程序。用户不必关心如何来形成JDBCURL;他们只须使用与所用的驱动程序一起提供的URL即可。JDBC的作用是提供某些约定,驱动程序编程人员在构造他们的JDBCURL时应该遵循这些约定。JDBCURL的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:jdbc:<子协议>:<子名称>12JDBC常用APIStatement作用:完成发送SQL文SQL语句连接一旦建立,就可用来向它所涉及的数据库传送SQL语句。JDBC对可被发送的SQL语句类型不加任何限制。这就提供了很大的灵活性,即允许使用特定的数据库语句或甚至于非SQL语句。然而,它要求用户自己负责确保所涉及的数据库可以处理所发送的SQL语句,否则将自食其果。例如,如果某个应用程序试图向不支持储存程序的DBMS发送储存程序调用,就会失败并将抛出异常。JDBC提供了三个类,用于向数据库发送SQL语句。Statement、PreparedStatement、CallableStatement13JDBC常用APIStatementConnection接口中的三个方法可用于创建这些类的实例。Statement─由方法createStatement所创建。Statement对象用于发送简单的SQL语句。14JDBC常用APIStatement Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,它们都作为在给定连接上执行SQL语句的包容器:Statement、PreparedStatement(从Statement继承而来)和CallableStatement(从PreparedStatement继承而来)。它们都专用于发送特定类型的SQL语句: Statement对象用于执行不带参数的简单SQL语句; PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句; CallableStatement对象用于执行对数据库已存储过程的调用。15JDBC常用APIStatement

Statement接口提供了执行语句和获取结果的基本方法。PreparedStatement接口添加了处理IN参数的方法;而CallableStatement添加了处理OUT参数的方法。

16JDBC常用APIStatement创建Statement对象 建立了到特定数据库的连接之后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建,如下列代码段中所示:Connectioncon=DriverManager.getConnection(url,“sa",“123456a?");Statementstmt=con.createStatement();/*为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法:*/ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable2");

17JDBC常用APIStatement使用Statement对象执行语句

Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。方法executeQuery用于产生单个结果集的语句,例如SELECT语句。方法executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate的返回值总为零。方法execute用于执行返回多个结果集、多个更新计数或二者组合的语句。18JDBC常用APIStatement关闭Statement对象 Statement对象将由Java垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要Statement对象时显式地关闭它们。这将立即释放DBMS资源,有助于避免潜在的内存问题。19JDBC常用APIResultSet定义:ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。 结果集一般是一个表,其中有查询所返回的列标题及相应的值。例如,如果查询为SELECTname,age,jobsFROMTable1,则结果集将具有如下形式:

nameagejobsJerry80teacher20JDBC常用APIResultSet代码示例:下面的代码段是执行SQL语句的示例。该SQL语句将返回行集合,其中列name和jobs为varchar,列age为int。Statementstmt=conn.createStatement(); ResultSetrs=stmt.executeQuery(“SELECTname,age,jobsFROMTable1”); while(rs.next()){ //输出当前行的值 Stringname=rs.getString(“name”); Stringjobs=rs.getString(“jobs”); intage=rs.getInt(“age”); }21连接数据库的基本过程加载驱动建立数据库连接发送sql语句处理结果集释放资源22加载驱动1.绝对路径引入2.使用类库添加3.本项目内相对路径引入创建连接创建数据库连接需要使用到DriverManager类和Connection接口。DriverManager类负责根据已经加载的驱动程序,按照规定格式的URL去连接指定的数据库,并且返回Connection类型对象。这里说的URL是根据各数据库系统的不同,各厂商分别提供了合格的URL,参看表8-2。连接数据库服务器我们还需要拥有合法的数据库用户名和密码,如果其中涉及到空白密码,需要用连续两个双引号表示空白字符,切记不能不写或者写null。Stringurl=”jdbc:sqlserver://localhost:1433;databaseName=TestDB”;Stringusername=”sa”;Stringpswd=”sasa”;Connectionconnection=DriverManager.getConnection(url,username,pswd);执行查询语句JDBC中,使用Statement接口来执行静态的SQL语句,Statement对象由Connection对象获得。Statementstmt=connection.createStatement();获得Statement对象后,可以分别使用executeUpdate和executeQuery的方法来执行增加、删除、修改和查询语句。Stringsql=”insertintotb_users(uname)values(‘tom’)”;intr=stmt.executeUpdate(sql);其中r表示sql变量所代表的SQL语句执行过后,数据表中改变的记录数量。或者Stringsql=”selectuserid,unamefromtb_users”;ResultSetrs=stmt.executeQuery(sql);处理数据集//书写查询的SQL语句StringSQL="SELECTuserid,unameFROMtb_users";//获得Statement对象Statementstmt=con.createStatement();//获得查询结果集ResultSetrs=stmt.executeQuery(SQL);//遍历结果集while(rs.next()){//取出每一行中,两个字段的数据值System.out.println(rs.getInt("userid")+""+rs.getString("uname"));}更新数据库操作更新数据库的操作由数据的插入(insert),删除(delete),修改(update)构成,这三种操作都会修改数据库的数据文件,可以理解为数据库写入操作。//书写插入的SQL语句StringSQL="insertintotb_users(uname)values('lilei')";//获得Statement对象stmt=con.createStatement();//获得执行结果intresult=stmt.executeUpdate(SQL);//处理结果if(result>0){System.out.println("操作成功,影响"+result+"行记录");}断开与数据库的连接作为程序编写者,在程序完成对于数据库的操作后,必须要关闭数据库,释放连接资源。关闭数据库的步骤一般按照最先创建的最后关闭的顺序来完成,对象的创建顺序一般是Connection,Statement,ResultSet,所以关闭顺序就是ResultSet,Statement,Connection。并且无论数据库操作执行成功与否,都不能一直占用数据库连接,所以关闭数据库操作多数与finally块联合使用。finally{//关闭ResultSetif(rs!=null)try{rs.close();}catch(Exceptione){ }//关闭Statementif(stmt!=null)try{stmt.close();}catch(Exceptione){}//关闭Connnectionif(con!=null)try{con.close();}catch(Exceptione){ }}应用JDBC访问SQLServer数据库第一步:导入java.sql包importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;第二步:加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");方法参数中的字符串是驱动程序的全限定名,可以在驱动程序文档或者驱动程序jar文件中找到。第三步:创建数据库连接StringconnectionUrl="jdbc:sqlserver://localhost:1433;databaseName=TestDB";Connectioncon=DriverManager.getConnection(connectionUrl,"sa","sasa");创建连接时需要根据不同的数据库系统编写不同的连接URL,还需要数据库管理员给定的用户名和密码方可完成。不同的数据库的URL都有不同,参考驱动程序文档和自带的示例程序即可。第四步:创建Statement对象Statementstmt=con.createStatement();Statement对象是用来执行SQL语句的工具类对象,创建之前必须确定Connection对象已经初始化完毕。第五步:书写SQL语句StringSQL="insertintotb_users(uname)values('lilei')";作为基础教学来说,固定值的SQL语句是读者必须要掌握的技能,但在实际应用中,这种类型的SQL不多。本次insert操作中,为uname字段指定了lilei的数据值,则本条SQL语句仅能够完成固定值的插入,如何能够在SQL语句中加入变量?一般的解决方法是将原有SQL语句进行拆分后,连入变量,再重新组合成完整的SQL语句,所用到的技术是Java语言字符串的拼接操作,具体原理请看下图:用变量s表示”lilei”,SQL语句由3部分拼接而成,第一部分是SQL语句的固定部分,第二部分是变量s,第三部分还是SQL语句的固定部分。要特别注意的是第一部分结尾和第三部分开头的单引号,一定不能省略,这种SQL语句拼接需要同时满足Java中字符串的格式规定和SQL语句的语法规定。第六步:执行SQL语句in

温馨提示

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

评论

0/150

提交评论