您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > java中的JDBC
第一章JDBC的使用2Contents•分四部分:–基本的JDBC编码方法√–JNDI读取数据源–使用属性文件–通用的DAO类3什么是JDBC•百度百科的解释:–JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。4•简单地说,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编码方法5例:使用JDBC访问数据库•SQLServer中建立数据库•用MyEclipse编程访问文件名:BaseJdbcConn.java•软件工程师通常会写一个通用的类用于获取数据库连接等对象,避免重复编写代码,例如:ConnectionMannager.java测试该类ConnectionMannagerTest.java6Contents•分四部分:–基本的JDBC编码方法–JNDI读取数据源√–使用属性文件–通用的DAO类7JSP中的JDBC•什么是JSP?•基本方法:略•上述方法的缺点:每一次使用都要建立连接,占用大量的资源。•这里的解决方案是使用数据库连接池。8数据库连接池•普通电话----建立连接,等待回应•热线电话----已建立连接连接已连接开始通话开始通话已连接,直接通话连接中9流程框架图标使用规范•连接池中的连接数据库想要获得连接返回一个连接返回一个已连接好的空闲连接应用程序从连接池中获得连接连接池是由容器提供的,用来管理池中连接对象应用程序连接池Connection1Connection2Connection310数据源简介•数据源(DataSource)–javax.sql.DataSource接口负责建立与数据库的连接–从Tomcat的数据源获得连接–把连接保存在连接池中应用程序Connection1Connection2Connection3数据库想要获得连接返回一个连接连接池连接池中的连接对象是由谁创建的呢?11JNDI介绍•如何获得DataSource对象–数据源由Tomcat提供,不能在程序中创建实例–使用JNDI获得DataSource引用•什么是JNDI–JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API–javax.namming.Context接口的lookup()方法应用程序jdbc/s1jdbc/s2数据源数据源名称Connectioncontext.lookup(jdbc/s1)12使用JNDI获取连接对象•importjavax.naming.Context;importjavax.naming.InitialContext;importjavax.naming.NamingException;importjavax.sql.DataSource;publicclassTitlesBean{publicListgetTitles(){try{Contextic=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();}finally{closeConn();}}}使用JNDI和数据源要导入的包通过Context、DataSource获取Connection对象分为两部分java:comp/env为JavaEE默认路径jdbc/books为DataSource名定义JNDI异常13JNDI的配置•Tomcat的conf/context.xml中的配置属性名称说明name指定Resource的JNDI名称auth指定管理Resource的Manager(Container:由容器创建和管理|Application:由Web应用创建和管理)type指定Resource所属的Java类maxActive指定连接池中处于活动状态的数据库连接的最大数目maxIdle指定连接池中处于空闲状态的数据库连接的最大数目maxWait指定连接池中的连接处于空闲的最长时间,超过这个时间会抛出异常,取值为-1,表示可以无限期等待ContextResourcename=jdbc/booksauth=Containertype=javax.sql.DataSourcemaxActive=100maxIdle=30maxWait=10000username=sapassword=120010driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver://localhost:1433;DatabaseName=books//Context14JNDI的配置•加入数据库驱动文件–把数据库驱动的.jar文件,加入到Tomcat的common\lib中•应用程序的web.xml文件的配置–在web.xml中配置resource-refresource-refres-ref-namejdbc/books/res-ref-nameres-typejavax.sql.DataSource/res-typeres-authContainer/res-auth/resource-ref指定JNDI的名字,与Resource元素中的name一致指定引用资源的类名,与Resource元素中的type一致指定管理所引用资源的Manager与Resource元素中的auth一致15常见错误1、CannotloadJDBCdriverclass这是什么错误?通过数据源访问数据库,由于数据源由Tomcat创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat的common/lib目录下。16代码框图标使用规范2、CannotcreateJDBCdriverofclass‘’forconnectURL‘null’DataSourcesource=(DataSource)ic.lookup(java:comp/env/jdbc/books);connection=source.getConnection();titlesQuery=connection.prepareStatement(“SELECT*FROMtitles);Resourcename=jdbc/bookauth=Containertype=javax.sql.DataSource…../要一致这是什么错误?TitlesBean.javacontext.xml17常见错误3、NamejdbcisnotboundinthisContextDataSourcesource=(DataSource)ic.lookup(/jdbc/books);connection=source.getConnection();这是什么错误?参数错误,应该是java:comp/env/jdbc/books18JNDI小结如何配置JNDI?如何通过JNDI获得数据库连接对象?•JNDI相比JDBC有什么优点?举例:前述关于选课的例子19Contents•分四部分:–基本的JDBC编码方法–JNDI读取数据源–使用属性文件√–通用的DAO类20属性文件•数据库相关信息放在程序文件中,如果数据库信息发生变化,则需重新编译。•而把有关数据库配置的信息放入属性文件,进行数据库连接时,从该文件中读取连接信息,可避免重新编译的麻烦。21数据库的配置•关于数据库的配置–把配置信息写在代码中–把配置信息存储在db.properties文件中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;try{Class.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以键值对的形式存储数据,中间用‘=’分隔22基于属性文件的数据库配置•从属性文件中读取配置信息publicstaticConnectiongetConnection(){StringdriverClassName=Env.getInstance().getProperty(driver);Stringurl=Env.getInstance().getProperty(url);Stringpassword=Env.getInstance().getProperty(password);Stringuser=Env.getInstance().getProperty(user);Connectioncon=null;try{Class.forName(driverClassName);con=DriverManager.getConnect
本文标题:java中的JDBC
链接地址:https://www.777doc.com/doc-3381309 .html