JavaEE数据库开发基础.ppt

上传人:za****8 文档编号:14645965 上传时间:2020-07-27 格式:PPT 页数:36 大小:1.78MB
收藏 版权申诉 举报 下载
JavaEE数据库开发基础.ppt_第1页
第1页 / 共36页
JavaEE数据库开发基础.ppt_第2页
第2页 / 共36页
JavaEE数据库开发基础.ppt_第3页
第3页 / 共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概述,J

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

3、onnection完成对某一指定数据库的连接。 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.create

4、Statement() 执行select查询语句: 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 ),Res

5、ultSet的使用,创建:executeQuery(SQL语句) 定位记录:next()方法 访问数据: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数据库的内容

6、数据库 LIB.mdb 表 user,JDBC-ODBC方法,Class.forName(sun.jdbc.odbc.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(r

7、s.getString(2) + t); System.out.print(rs.getString(3) + t); System.out.print(rs.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

8、.jsp,JSP访问数据库,if (rs.next() % 序号 姓名 电话 年龄 QQ 日期 ); out.println( + rs.getString(1) + ); out.println( + rs.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();%

9、 ,jsp.jsp,Servlet访问数据库,protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); out.println(JDBC实例:通过Servlet访问数据库); try Class.forName(sun.jdbc.odbc.Jd

10、bcOdbcDriver); Connection con = DriverManager.getConnection(jdbc:odbc:tt); Statement sql =(Statement) con.createStatement(); ResultSet rs =sql.executeQuery(select * from user); if (rs.next() /if结束 catch (Exception e) out.println(e); ,Servlet.java,Servlet访问数据库,out.println(); out.println(序号姓名); out.pr

11、intln(电话年龄); out.println(QQ日期); do out.println(); out.println( + rs.getString(1) + ); out.println( + rs.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(); o

12、ut.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(className); conn = DriverManager.getConnection(URL); catch (Exception e) System.out.println(e); public Connec

13、tion 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.JSP,可滚动的ResultSet,通过createStatement (int, int)创建Statement时可以指定第一个参数指定游标类型可为下面的

14、值,以便支持可滚动的记录集 ResultSet.TYPE_FORWARD_ONLY:默认的cursor类型,仅仅支持向前forward,不支持backforward,random,last,first操作,类似单向链表。不可滚动的记录集,数据库发生变化时不可见。是效率最高最快的cursor类型 ResultSet.TYPE_SCROLL_INSENSITIVE:支持backforward,random,last,first操作,对其它数据session对选择数据做出的更改是不敏感,不可见的。可滚动的记录集,数据库的变化不可见 ResultSet.TYPE_SCROLL_SENSITIVE:支持

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

16、eInt(int,int)、updateInt(String,int)、updateRow()、insertRow()、deleteRow()等等。,其他类型数据库的驱动程序,MySQL驱动程序及URL: 驱动:com.mysql.jdbc.Driver url:jdbc:mysql:/127.0.0.1:3306/myfriend SQL Server驱动程序及URL: 驱动:com.microsoft.sqlserver.jdbc.SQLServerDriver url:jdbc:sqlserver:/localhost:1433; databaseName=myfriend;user=M

17、yUserName; password=*; Oracle驱动程序及URL: 驱动:oracle.jdbc.driver.OracleDriver url:jdbc:oracle:thin127.0.0.1:myfriend,5.3连接池、 DataSource及其应用,1 数据库连接池 传统的JDBC API访问数据库时,需要频繁建立数据库连接Connection对象,导致系统的整体性能降低。 数据库连接池(Connection Pool)是一种数据库连接共享技术。 数据库连接池的基本思想是为数据库连接建立一个“缓冲池”,即初始化连接池时在缓冲池中创建一定数量的数据库连接。当应用组件需要获取

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

19、ava.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,连接池类 ConnectionPool,private ConnectionPool(

20、) 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 getConnect

21、ion() 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 + 次,用时 +

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

23、l中定义该数据源的参考。如果要为所有Web应用提供相同的数据源,可以利用tomcat 6.0confserver.xml定义数据源。,Context.xml的数据源定义,web.xml中的数据源定义, jdbc/DataSourceExample javax.sql.DataSource Container ,通过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();% ,

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

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

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


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