《java中的JDBC》PPT课件.ppt_第1页
《java中的JDBC》PPT课件.ppt_第2页
《java中的JDBC》PPT课件.ppt_第3页
《java中的JDBC》PPT课件.ppt_第4页
《java中的JDBC》PPT课件.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

高级数据库开发技术,谭立伟,第一章JDBC的使用,Contents,分四部分:基本的JDBC编码方法JNDI读取数据源使用属性文件通用的DAO类,什么是JDBC,百度百科的解释:JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。,简单地说,JDBC可做三件事:与数据库建立连接、发送操作数据库的语句并处理结果。下列代码段给出了以上三步的基本示例:Connectioncon=DriverManager.getConnection(jdbc:odbc:wombat,login,password);Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable1);while(rs.next()intx=rs.getInt(a);Strings=rs.getString(b);floatf=rs.getFloat(c);上述代码对基于JDBC的数据库访问做了经典的总结,基本的JDBC编码方法,例:使用JDBC访问数据库,SQLServer中建立数据库用MyEclipse编程访问文件名:BaseJdbcConn.java软件工程师通常会写一个通用的类用于获取数据库连接等对象,避免重复编写代码,例如:ConnectionMannager.java测试该类ConnectionMannagerTest.java,Contents,分四部分:基本的JDBC编码方法JNDI读取数据源使用属性文件通用的DAO类,JSP中的JDBC,什么是JSP?基本方法:略上述方法的缺点:每一次使用都要建立连接,占用大量的资源。这里的解决方案是使用数据库连接池。,数据库连接池,普通电话-建立连接,等待回应热线电话-已建立连接,连接,已连接,开始通话,开始通话,已连接,直接通话,连接中,流程框架图标使用规范,连接池中的连接,数据库,想要获得连接,返回一个连接,返回一个已连接好的空闲连接,应用程序从连接池中获得连接,连接池是由容器提供的,用来管理池中连接对象,应用程序,连接池,数据源简介,数据源(DataSource)javax.sql.DataSource接口负责建立与数据库的连接从Tomcat的数据源获得连接把连接保存在连接池中,应用程序,Connection1,Connection2,Connection3,数据库,想要获得连接,返回一个连接,连接池,连接池中的连接对象是由谁创建的呢?,JNDI介绍,如何获得DataSource对象数据源由Tomcat提供,不能在程序中创建实例使用JNDI获得DataSource引用什么是JNDIJNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的APIjavax.namming.Context接口的lookup()方法,应用程序,jdbc/s1,jdbc/s2,数据源,数据源名称,Connection,context.lookup(jdbc/s1),使用JNDI获取连接对象,importjavax.naming.Context;importjavax.naming.InitialContext;importjavax.naming.NamingException;importjavax.sql.DataSource;publicclassTitlesBeanpublicListgetTitles()tryContextic=newInitialContext();DataSourcesource=(DataSource)ic.lookup(java:comp/env/jdbc/books);Connectionconnection=source.getConnection();titlesQuery=connection.prepareStatement(SELECT*FROMtitles);ResultSetresults=titlesQuery.executeQuery();/为BookBean对象的属性赋值,并添加到titlesList中catch(SQLExceptionexception)exception.printStackTrace();catch(NamingExceptionnamingException)namingException.printStackTrace();finallycloseConn();,使用JNDI和数据源要导入的包,通过Context、DataSource获取Connection对象,分为两部分java:comp/env为JavaEE默认路径jdbc/books为DataSource名,定义JNDI异常,JNDI的配置,Tomcat的conf/context.xml中的配置,JNDI的配置,加入数据库驱动文件把数据库驱动的.jar文件,加入到Tomcat的commonlib中应用程序的web.xml文件的配置在web.xml中配置,jdbc/booksjavax.sql.DataSourceContainer,指定JNDI的名字,与元素中的name一致,指定引用资源的类名,与元素中的type一致,指定管理所引用资源的Manager与元素中的auth一致,常见错误,1、CannotloadJDBCdriverclass,这是什么错误?,通过数据源访问数据库,由于数据源由Tomcat创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat的common/lib目录下。,代码框图标使用规范,2、CannotcreateJDBCdriverofclassforconnectURLnull,DataSourcesource=(DataSource)ic.lookup(java:comp/env/jdbc/books);connection=source.getConnection();titlesQuery=connection.prepareStatement(“SELECT*FROMtitles);,要一致,这是什么错误?,TitlesBean.java,context.xml,常见错误,3、NamejdbcisnotboundinthisContext,DataSourcesource=(DataSource)ic.lookup(/jdbc/books);connection=source.getConnection();,这是什么错误?,参数错误,应该是java:comp/env/jdbc/books,JNDI小结,如何配置JNDI?如何通过JNDI获得数据库连接对象?JNDI相比JDBC有什么优点?,举例:前述关于选课的例子,Contents,分四部分:基本的JDBC编码方法JNDI读取数据源使用属性文件通用的DAO类,属性文件,数据库相关信息放在程序文件中,如果数据库信息发生变化,则需重新编译。而把有关数据库配置的信息放入属性文件,进行数据库连接时,从该文件中读取连接信息,可避免重新编译的麻烦。,数据库的配置,关于数据库的配置把配置信息写在代码中把配置信息存储在perties文件中,privatestaticfinalStringDATASOURCE=jdbc:odbc:NewsDataSource;privatestaticfinalStringDRIVER_CLASS=com.microsoft.sqlserver.jdbc.SQLServerDriver;privatestaticfinalStringDATABASE_URL=jdbc:sqlserver:/localhost:1433;DatabaseName=books;privatestaticfinalStringDATABASE_USRE=sa;privatestaticfinalStringDATABASE_PASSWORD=;publicstaticConnectiongetConnction()ConnectiondbConnection=null;tryClass.forName(DRIVER_CLASS);dbConnection=DriverManager.getConnection(DATABASE_URL,DATABASE_USRE,DATABASE_PASSWORD);catch(Exceptione)e.printStackTrace();returndbConnection;,数据库的配置信息,如果数据库信息改变,要重新进行编译,程序才能正确执行。,driver=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver:/localhost:1433;DatabaseName=booksuser=sapassword=120010,以键值对的形式存储数据,中间用=分隔,基于属性文件的数据库配置,从属性文件中读取配置信息,publicfinalclassEnvextendsPropertiesprivatestaticEnvinstance;publicstaticEnvgetInstance()if(instance!=null)returninstance;elsemakeInstance();returninstance;privatestaticsynchronizedvoidmakeInstance()if(instance=null)instance=newEnv();privateEnv()InputStreamis=getClass().getResourceAsStream(/perties);tryload(is);is.close();catch(Exceptione)e.printStackTrace();,Java用来操作.properties文件的类,静态方法可以通过类名直接调用,同步方法,在同一时间,只允许一个人调用,保证安全性,把.properties文件内容加载到对象中,属性文件举例,将要介绍的例子来自:,Class与Object(2-1),Class总结forName(StringclassName);getResourceAsStream(StringfileName);查找具有给定名称fileName的资源返回InputStream或者null(如果没有找到),应用程序,Class,className,调用Class.forName(className),返回className类的对象,Object,forName,Class与Object(2-2),回顾Object类Object是类层次结构的根类。每个类都继承了Object类。所有对象(包括数组)都具有这个类的方法Object类的常用方法getClass()返回一个对象的运行时类toString()返回该对象的字符串表示equals(Objectobj)判断某个对象是否与此对象“相等”,Contents,分四部分:基本的JDBC编码方法JNDI读取数据源使用属性文件通用的DAO类,通用的DAO类,可以用于任何需要访问数据库的项目中。连接数据库的方式可使用前述三种的任何一种。,通用的DAO类,publicclassSQLCommandBeanprivateConnectionconn;privateStringsqlValue;privateListvalues;publicvoidsetConnection(Connectionconn)this.conn=conn;publicvoidsetSqlValue(StringsqlValue)this.sqlValue=sqlValue;publicResultexecuteQuery()throwsSQLException./执行查询privatevoidsetValues(PreparedStatementpstmt,Listvalues)throwsSQLException./设定语句的参数,SQLCommandBean.java,通过set方法进行属性的设置,通过setValues()方法,进行SQL参数的设置,在DAO类中对数据库的查询和修改(增、删、改)的操作,演示示例2:SQLCommandBean.java,通用DAO类的测试,/测试类的main方法publicstaticvoidmain(Stringargs)throwsDBAccessException,SQLExceptionSQLCommandBeansqlCommandBean=newSQLCommandBean();sqlCommandBean.setConnection(ConnectionManager.getConnection();Stringsql=SELECT*FROMtitlesWHEREprice?andcopyright?);sqlCommandBean.setSqlValue(sql);Listvalues=newArrayList();values.add(newDouble(60.00);values.add(newInteger(1997);sqlCommandBean.setValues(values);Resultresult=sqlCommandBean.executeQuery();/判断结果是否为null,通过setValues()方法,进行SQL语句中参数的设置,调用DAO类中查询数据的方法,返回Result,TestSQLCommBean.java,DAO的测试类,演示示例3:TestSQLCommBean.java,Result与ResultSet,Result与ResultSet的区别ResultSet是java.sql.ResultSet接口,表示数据库结果集的数据Result是javax.servlet.jsp.jstl.sql.Result接口,用来迭代SQL查询的结果(在JSTL中),publ

温馨提示

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

评论

0/150

提交评论