JavaEE数据库开发基础.ppt

上传人:小飞机 文档编号:6509317 上传时间:2023-11-07 格式:PPT 页数:36 大小:893.50KB
返回 下载 相关 举报
JavaEE数据库开发基础.ppt_第1页
第1页 / 共36页
JavaEE数据库开发基础.ppt_第2页
第2页 / 共36页
JavaEE数据库开发基础.ppt_第3页
第3页 / 共36页
JavaEE数据库开发基础.ppt_第4页
第4页 / 共36页
JavaEE数据库开发基础.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《JavaEE数据库开发基础.ppt》由会员分享,可在线阅读,更多相关《JavaEE数据库开发基础.ppt(36页珍藏版)》请在三一办公上搜索。

1、第4章 JavaEE数据库开发基础,JDBC概述JDBC API的应用PreparedStatement和CallableStatement连接池、DataSource及其应用事务,JDBC是Java程序连接和存取数据库的应用程序接口(API),此接口是Java核心API的一部分。JDBC向应用程序开发者提供了独立于数据库的统一的API。JDBC是由一组驱动程序实现的Java接口,驱动程序负责从标准JDBC调用向支持的数据库所需要的具体调用转变。除了向开发者提供统一的独立于DBMS之外的框架,JDBC还提供了让开发者保持数据库厂家提供的特定功能的办法。,5.1 JDBC概述,JDBC(Java

2、 DataBase Connection)是Java数据库访问API的统称,主要完成以下功能:与一个数据库建立连接。向数据库发送SQL语句。处理数据库返回的结果。,JDBC API,在java.sql包中主要提供了以下接口,JDBC的结构,JDBC有两种接口,分别是面向开发人员的JDBC API和面向低层的JDBC Driver APIJDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。,JDBC的结构,java.sql.DriverManager用来装载驱动程序,并且为创建新的数据库连接提供支持。java.sql.Connection完成对某

3、一指定数据库的连接。java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,它包含了两个重要的子类型。java.sql.PreparedSatement用于执行预编译的sql声明java.sql.CallableStatement用于执行数据库中存储过程的调用java.sql.ResultSet对于给定声明取得结果的途径,JDBC接口之间的关系,5.2 JDBC API的应用,1、访问数据库的基础2、JDBC应用实例3、ResultSet的高级应用,访问数据库的步骤,Statement的使用,创建:connection.createStatement()执行select

4、查询语句:statement.executeQuery(“查询语句)执行insert、update、delete等更新语句:statement.executeUpdate(“更新语句”)如executeUpdate(insert into MyFriend(name,age,qq)values(+name+,+age+,+qq+)name=“abc”,age=20,qq=“1234”时执行如下SQL语句insert into MyFriend(name,age,qq)values(abc,20,1234),ResultSet的使用,创建:executeQuery(SQL语句)定位记录:next

5、()方法访问数据:getXXX(int)或getXXX(String)其中XXX为一数据类型名称,int为列编号(从1开始编号),String为列名。如getInt(2),getString(name)对照INT、INTEGER getInt()TINYINT、SMALLINTgetShort()BIGINT getLong()DATE getDate()CHAR、VARCHAR getString()FLOATgetFloat(),JAVA访问数据库示例1,读入ACCESS数据库的内容数据库 LIB.mdb表 user,JDBC-ODBC方法,Class.forName(sun.jdbc.o

6、dbc.JdbcOdbcDriver);Connection con=DriverManager.getConnection(jdbc:odbc:tt);Statement sql=con.createStatement();ResultSet rs=sql.executeQuery(select*from user);while(rs.next()System.out.print(rs.getInt(ID)+t);System.out.print(rs.getString(2)+t);System.out.print(rs.getString(3)+t);System.out.print(r

7、s.getInt(4)+t);System.out.print(rs.getInt(5)+t);System.out.println(rs.getDate(6);rs.close();sql.close();con.close();,建立ODBC-名称为 tt,多种方法访问数据库,通过JSP访问数据库通过Servlet访问数据库通过JavaBean访问,JSP访问数据库,JDBC实例:通过JSP访问数据库,jsp.jsp,JSP访问数据库,if(rs.next()%序号 姓名 电话 年龄 QQ 日期);out.println(+rs.getString(1)+);out.println(+rs

8、.getString(2)+);out.println(+rs.getString(3)+);out.println(+rs.getString(4)+);out.println(+rs.getString(5)+);out.println(+rs.getString(6)+);out.println();while(rs.next();%,jsp.jsp,Servlet访问数据库,protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExce

9、ption response.setContentType(text/html;charset=gb2312);PrintWriter out=response.getWriter();out.println(JDBC实例:通过Servlet访问数据库);try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con=DriverManager.getConnection(jdbc:odbc:tt);Statement sql=(Statement)con.createStatement();ResultSet rs=sql.exe

10、cuteQuery(select*from user);if(rs.next()/if结束 catch(Exception e)out.println(e);,Servlet.java,Servlet访问数据库,out.println();out.println(序号姓名);out.println(电话年龄);out.println(QQ日期);do out.println();out.println(+rs.getString(1)+);out.println(+rs.getString(2)+);out.println(+rs.getString(3)+);out.println(+rs.

11、getString(4)+);out.println(+rs.getString(5)+);out.println(+rs.getString(6)+);out.println();while(rs.next();out.println();,Servlet.java,通过JavaBean访问,package mybean;import java.sql.*;public class DBConnection private Connection conn;public void init(String className,String URL)try Class.forName(classN

12、ame);conn=DriverManager.getConnection(URL);catch(Exception e)System.out.println(e);public Connection getConnection()return conn;,DBConnection.java,通过JavaBean访问,JDBC实例:通过JavaBean访问数据库 序号姓名电话 年龄QQ日期);out.println(+rs.getString(1)+);out.println(+rs.getString(6)+);out.println();while(rs.next();%,JavaBean

13、.JSP,可滚动的ResultSet,通过createStatement(int,int)创建Statement时可以指定第一个参数指定游标类型可为下面的值,以便支持可滚动的记录集ResultSet.TYPE_FORWARD_ONLY:默认的cursor类型,仅仅支持向前forward,不支持backforward,random,last,first操作,类似单向链表。不可滚动的记录集,数据库发生变化时不可见。是效率最高最快的cursor类型ResultSet.TYPE_SCROLL_INSENSITIVE:支持backforward,random,last,first操作,对其它数据sess

14、ion对选择数据做出的更改是不敏感,不可见的。可滚动的记录集,数据库的变化不可见ResultSet.TYPE_SCROLL_SENSITIVE:支持backforward,random,last,first操作,对其它数据session对选择数据做出的更改是敏感,可见的。可滚动的记录集,数据库的变化可见。移动记录指针的方法包括next()、last()、previous()、first()等等。,游标类型总结,可更新的ResultSet,通过createStatement(int,int)创建Statement时可以指定第二个参数为下面的值,以便支持可更新的记录集ResultSet.CONCU

15、R_READ_ONLY:记录集不可更新ResultSet.CONCUR_UPDATABLE:记录集可更新更新记录的方法包括updateInt(int,int)、updateInt(String,int)、updateRow()、insertRow()、deleteRow()等等。,其他类型数据库的驱动程序,MySQL驱动程序及URL:驱动:com.mysql.jdbc.Driver url:jdbc:mysql:/127.0.0.1:3306/myfriendSQL Server驱动程序及URL:驱动:com.microsoft.sqlserver.jdbc.SQLServerDriver u

16、rl:jdbc:sqlserver:/localhost:1433;databaseName=myfriend;user=MyUserName;password=*;Oracle驱动程序及URL:驱动:oracle.jdbc.driver.OracleDriver url:jdbc:oracle:thin127.0.0.1:myfriend,5.3连接池、DataSource及其应用,1 数据库连接池传统的JDBC API访问数据库时,需要频繁建立数据库连接Connection对象,导致系统的整体性能降低。数据库连接池(Connection Pool)是一种数据库连接共享技术。数据库连接池的基

17、本思想是为数据库连接建立一个“缓冲池”,即初始化连接池时在缓冲池中创建一定数量的数据库连接。当应用组件需要获取数据库连接时,只需从缓冲池中取出一个,使用完毕之后再释放到连接池中。数据库连接池在初始化时创建一定数量的数据库连接,其数量由最小数据库连接数来设定。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这些连接。连接池的最大数据库连接数量限定了连接池能建立的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。,连接池原理实验,连接池举例 数据库连接池实例 使用连接池连接50000次 不使用连接池连接50次,index.jsp,连接池类 Conn

18、ectionPool,package db;import java.sql.*;*import java.util.Vector;public class ConnectionPool private Vector pool;private int poolSize=10;private static ConnectionPool instance=null;public static ConnectionPool getInstance()if(instance=null)instance=new ConnectionPool();return instance;,1,连接池类 Connec

19、tionPool,private ConnectionPool()pool=new Vector(poolSize);Connection conn=null;for(int i=0;i poolSize;i+)try Class.forName(com.mysql.jdbc.Driver);conn=DriverManager.getConnection(jdbc:odbc:tt);pool.add(conn);catch(Exception e)e.printStackTrace();,2,连接池类 ConnectionPool,public synchronized Connection

20、 getConnection()if(pool.size()0)Connection conn=pool.get(0);pool.remove(conn);return conn;else return null;public synchronized void release(Connection conn)pool.add(conn);,3,使用连接池,利用连接池连接+loops+次,用时+(System.currentTimeMillis()-start)+ms);%,useloops.jsp,不使用连接池,不用连接池连接+loops+次,用时+(System.currentTimeMi

21、llis()-start)+ms);,noloops.jsp,实际时间对比,J2EE中数据库连接池的使用,JDK只提供了数据库连接池相关的DataSource接口,具体实现由数据库驱动厂商或Web服务平台器提供。DataSource接口对象负责具体的连接池管理。使用DataSource时,需要通过查询JNDI(Java Naming and Directoru Interface)服务器得到DataSource,再利用该对象获取Connection对象。应该在web应用的META-INFcontext.xml中定义数据源,并在web.xml中定义该数据源的参考。如果要为所有Web应用提供相同的

22、数据源,可以利用tomcat 6.0confserver.xml定义数据源。,Context.xml的数据源定义,web.xml中的数据源定义,jdbc/DataSourceExampleContainer,通过DataSource连接数据库的关键代码,InitialContext context=new InitialContext();DataSource dataSource=(DataSource)context.lookup(数据源名称);conn=dataSource.getConnection();conn.close();,通过DataSource访问数据库实例,%page import=java.sql.*,javax.naming.*,javax.sql.*contentType=text/html pageEncoding=UTF-8%JDBC实例:通过DataSource访问数据库 序号姓名电话年龄QQ日期);out.println(+rs.getString(1)+);.out.println(+rs.getString(6)+);out.println();while(rs.next();%,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号