《java中的JDBC》PPT课件.ppt

上传人:w****2 文档编号:14684670 上传时间:2020-07-28 格式:PPT 页数:34 大小:783.50KB
返回 下载 相关 举报
《java中的JDBC》PPT课件.ppt_第1页
第1页 / 共34页
《java中的JDBC》PPT课件.ppt_第2页
第2页 / 共34页
《java中的JDBC》PPT课件.ppt_第3页
第3页 / 共34页
点击查看更多>>
资源描述
高级数据库开发技术,谭立伟,第一章 JDBC的使用,Contents,分四部分: 基本的JDBC编码方法 JNDI读取数据源 使用属性文件 通用的DAO类,什么是JDBC,百度百科的解释: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。,简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。下列代码段给出了以上三步的基本示例: Connection con = DriverManager.getConnection(jdbc:odbc:wombat,login, password); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM Table1); while (rs.next() int x = rs.getInt(a); String s = rs.getString(b); float f = rs.getFloat(c); 上述代码对基于JDBC的数据库访问做了经典的总结,基本的JDBC编码方法,例:使用JDBC访问数据库,SQL Server中建立数据库 用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引用 什么是JNDI JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API javax.namming.Context接口的lookup()方法,应用程序,jdbc/s1,jdbc/s2,数据源,数据源名称,Connection,context.lookup( jdbc/s1 ),使用JNDI获取连接对象,import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class TitlesBean public List getTitles() try Context ic = new InitialContext(); DataSource source = (DataSource)ic.lookup(java:comp/env/jdbc/books); Connection connection = source.getConnection(); titlesQuery = connection.prepareStatement(SELECT * FROM titles ); ResultSet results = titlesQuery.executeQuery(); /为BookBean对象的属性赋值,并添加到titlesList中 catch (SQLException exception) exception.printStackTrace(); catch (NamingException namingException) namingException.printStackTrace(); finally closeConn(); ,使用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/books javax.sql.DataSource Container ,指定JNDI的名字,与元素中的name一致,指定引用资源的类名,与 元素中的type一致,指定管理所引用资源的Manager与元素中的auth一致,常见错误,1、Cannot load JDBC driver class,这是什么错误?,通过数据源访问数据库,由于数据源由Tomcat创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat的common/lib目录下。,代码框图标使用规范,2、Cannot create JDBC driver of class for connect URL null,DataSource source = (DataSource) ic.lookup(java:comp/env/jdbc/books); connection = source.getConnection(); titlesQuery = connection.prepareStatement(“SELECT * FROM titles );,要一致,这是什么错误?,TitlesBean.java,context.xml,常见错误,3、Name jdbc is not bound in this Context,DataSource source = (DataSource) ic.lookup(/jdbc/books); connection = source.getConnection();,这是什么错误?,参数错误,应该是 java:comp/env/jdbc/books ,JNDI小结,如何配置JNDI? 如何通过JNDI获得数据库连接对象? JNDI相比JDBC有什么优点?,举例:前述关于选课的例子,Contents,分四部分: 基本的JDBC编码方法 JNDI读取数据源 使用属性文件 通用的DAO类,属性文件,数据库相关信息放在程序文件中,如果数据库信息发生变化,则需重新编译。 而把有关数据库配置的信息放入属性文件,进行数据库连接时,从该文件中读取连接信息,可避免重新编译的麻烦。,数据库的配置,关于数据库的配置 把配置信息写在代码中 把配置信息存储在db.properties文件中,private static final String DATASOURCE = jdbc:odbc:NewsDataSource; private static final String DRIVER_CLASS = com.microsoft.sqlserver.jdbc.SQLServerDriver; private static final String DATABASE_URL = jdbc:sqlserver:/localhost:1433;DatabaseName=books; private static final String DATABASE_USRE = sa; private static final String DATABASE_PASSWORD = ; public static Connection getConnction() Connection dbConnection = null; try Class.forName(DRIVER_CLASS); dbConnection = DriverManager.getConnection(DATABASE_URL, DATABASE_USRE, DATABASE_PASSWORD); catch (Exception e) e.printStackTrace(); return dbConnection; ,数据库的配置信息,如果数据库信息改变,要重新进行编译,程序才能正确执行。,driver=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver:/localhost:1433;DatabaseName=books user=sa password=120010,以键值对的形式存储 数据,中间用=分隔,基于属性文件的数据库配置,从属性文件中读取配置信息,public final class Env extends Properties private static Env instance; public static Env getInstance() if (instance != null) return instance; else makeInstance(); return instance; private static synchronized void makeInstance() if (instance = null) instance = new Env(); private Env() InputStream is = getClass().getResourceAsStream(/db.properties); try load(is); is.close(); catch (Exception e) e.printStackTrace(); ,Java用来操作.properties文件的类,静态方法可以通过类名直接调用,同步方法,在同一时间,只允许一个人调用,保证安全性,把.properties文件内容加载到对象中,属性文件举例,将要介绍的例子来自: 上文中有一句话:“几个主要文件,为了既能在IDE环境中使用该属性配置文件,又能在实际的web应用中保证该属性文件的正常调用。该属性文件存放的位置很重要。 “/init.properties”表示该属性文件存放在CLASSPATH的根目录中,在Eclipse环境下存放在工程/bin下。 在web应用中init.properties存放在当前应用的WEB-INF/classes目录下。更简单的处理方式是将init.properties打到工程的包中。这样,当多个应用部署在同一个Context下时,相互之间能够保持独立性。但是这时候千万要注意同一个Context下多个应用的属性文件是否文件命名冲突。”,Class与Object(2-1),Class总结 forName(String className); getResourceAsStream(String fileName); 查找具有给定名称fileName的资源 返回InputStream或者null(如果没有找到),应用程序,Class,className,调用Class.forName(className),返回className类的对象,Object,forName,Class与Object(2-2),回顾Object 类 Object 是类层次结构的根类。每个类都继承了Object类。所有对象(包括数组)都具有这个类的方法 Object类的常用方法 getClass() 返回一个对象的运行时类 toString()返回该对象的字符串表示 equals(Object obj)判断某个对象是否与此对象“相等”,Contents,分四部分: 基本的JDBC编码方法 JNDI读取数据源 使用属性文件 通用的DAO类,通用的DAO类,可以用于任何需要访问数据库的项目中。 连接数据库的方式可使用前述三种的任何一种。,通用的DAO类,public class SQLCommandBean private Connection conn; private String sqlValue; private List values; public void setConnection(Connection conn) this.conn = conn; public void setSqlValue(String sqlValue) this.sqlValue = sqlValue; public Result executeQuery() throws SQLException ./执行查询 private void setValues(PreparedStatement pstmt, List values) throws SQLException ./设定语句的参数 ,SQLCommandBean.java,通过set 方法进行属性的设置,通过setValues( )方法, 进行SQL参数的设置,在DAO类中对数据库的查询和修改(增、删、改)的操作,演示示例2:SQLCommandBean.java,通用DAO类的测试,/测试类的main方法 public static void main(String args) throws DBAccessException,SQLException SQLCommandBean sqlCommandBean = new SQLCommandBean( ); sqlCommandBean.setConnection(ConnectionManager .getConnection( ) ); String sql =SELECT * FROM titles WHERE price ? and copyright ? ); sqlCommandBean.setSqlValue( sql ); List values = new ArrayList( ); values.add( new Double( 60.00 ) ); values.add( new Integer( 1997 ) ); sqlCommandBean.setValues( values ); Result result = 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中), public Result executeQuery() throws SQLException try stmt = conn.createStatement(); rs = stmt.executeQuery(sqlValue); result = ResultSupport.toResult(rs); catch(Exception e) finally rs.close();stmt.close(); return result; ,把ResultSet转换为Result,操作ResultSet时,必须与数据库连接,而Result不用,SQLCommandBean.java,Result的使用,从Result中读取数据, Result result = sqlCommandBean.executeQuery(); if (result = null | result.getRowCount() = 0) System.out.println(没有书籍!); else for (int i = 0; i result.getRowCount(); i+) Map row = result.getRows()i; BookBean book = new BookBean(); book.setTitle(String) row.get(title); /设置其它属性值 titlesList.add(book); ,每行数据对应一个Map,在Map中根据字段名取出值,把封装好的对象,保存在List中,总结,为什么使用JNDI? 到目前为止连接数据库有几种方式? 说明从.properties文件中读取数据的步骤? 为什么要用通用的DAO,没有了,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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