版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 JDBC,2,主要内容,JDBC简介 JDBC操作 使用PreparedStatement 事务 使用连接池访问数据库,3,JDBC 简介,JDBC中主要接口 java.sql.DriverManager:处理驱动程序的调入和管理 java.sql.Connection:负责连接数据库 java.sql.Statement:负责执行数据库 SQL 语句 java.sql.ResultSet:负责存放查询结果,4,JDBC 简介,针对不同类型的数据库,JDBC 机制中提供了驱动程序的的概念。对于不同的数据库,程序只需要使用不同的驱动厂商驱动连接数据库,5,使用厂商驱动进行数据库连接,常见
2、数据库的驱动程序名称和 url 如下 MS SQL Server:驱动程序为:com.microsoft.jdbc.sqlserver.SQLServerDriver, url 为:jdbc:microsoft:sqlserver:/IP:1433;DatabaseName=DBName,6,使用厂商驱动进行数据库连接,Oracle :驱 动 程 序 为 : oracle.jdbc.driver.OracleDriver , url 为 : jdbc:oracle:thin:ip:1521:sid,7,使用厂商驱动进行数据库连接,MySQL : 驱 动 程 序 为 : “ com.mysql.
3、jdbc.Driver , url 为 : jdbc:mysql:/localhost:3306/DBName,8,JDBC操作,装载数据库的JDBC驱动程序 Class.forName(“com.mysql.jdbc.Driver); 建立与数据库的连接 Connection conn= DriverManager.getConnection(url, 用户名, 密码); 例如: String url=jdbc:mysql:/localhost:3306/school;,不同DBMS系统有不同的驱动名称,9,建立Statement 对象,准备执行SQL语句 Statement stmt =
4、conn.createStatement(); 执行SQL语句 常用3种执行SQL语句的方法: 1) executeQuery()-用于Select语句,返回结果集. String sql=“select * from 表名”; ResultSet rs= stmt.executeQuery(sql); 2) executeUpdate()-用于创建和更新表(如Update/Insert/ Delete/Create),返回受影响行数. String sql=“Delete from 表名 where ”; int rsCount = stmt.executeUpdate(sql); 3) e
5、xecute()-用于执行任何SQL语句 返回布尔值。,10,处理ResultSet结果集 while(rs.next() String s1=rs.getString(1); /根据列号取值(从1开始) 或 String s2=rs.getString(“name”); /根据列名取值 或 int col3=rs.getInt(3); /非字符串数据示例 依次关闭ResultSet、Statement和Connection对象: rs.close(); stmt.close(); conn.close();,前提:第1列为字符串数据,前提:第3列为整形数据,11,JSP连接MySQL示例,
6、); /关闭 rs.close(); stmt.close(); conn.close(); %,12,服务器中数据库驱动程序部署,mysql的驱动程序 mysql-connector-java-5.*-bin.jar存放位置: tomcat %TOMCAT_HOME%lib 或%TOMCAT_HOME%commonlib目录 jboss %JBOSS_HOME%serverdefaultlib目录 weblogic beauser_projectsdomainsbase_domainlib目录,13,使用 PreparedStatement,引出 以添加数据为例,在很多情况下,具体需要添加的
7、值,是由客户自己输入的,因此,应该是一个个变量。该情况下,SQL 语句的写法就比较麻烦 ,而且依赖了变量,比较容易出错 PreparedStatement 解决了这个问题,14,带参数的操作, int id=Integer.parseInt(request.getParameter(id); String name=request.getParameter(name); String address=request.getParameter(address); String year=request.getParameter(year); String sql=insert into teac
8、her values(+id+,+name+,+address+,+year+); int rowCount=stmt.executeUpdate(sql);,15,使用 PreparedStatement,PreparedStatement 是 Statement 的子接口,功能与 Statement 类似 它在 sql 语句中使用了?代替了需要插入的参数 用 PreperedStatement 的 setString(n,参数)方法可以将第 n 个?用传进的参数代替。这样做增加了程序的可维护性,也增加了程序的安全性,16,基本用法示例,使用参数: String sql=select * f
9、rom 表 where 字段=?; PreparedStatement pStmt = conn.prepareStatement(sql); 设置参数值: String parm1=request.getParameter(参数名); pStmt.setString(1, parm1); 执行带参数的SQL: ResultSet rs= pStmt.executeQuery( );,如果是int,则用setInt()等等,也是三种方法:executeQuery()、executeUpdate()和execute(),17,事务,在银行转账时,要对数据库进行两个操作,即将一个账户的钱减少,将另
10、一个账户的钱增多。但是由于操作的先后顺序,如果在两个操作之间发生故障,则会导致数据不一致。因此,需要设计一个事务,在两条语句都被执行成功后,数据修改才被真正提交(Commit)放入数据库,否则数据操作回滚(Rollback),18,事务,在默认情况下,executeUpdate 函数会在数据库中提交改变的结果,此时,可以用 Connection 来定义该函数是否自动提交改变结果,并进行事务的提交或者回滚 Connection 中可以设置 executeUpdate 不要自动提交,19,JDBC事务管理,Connection类的3个控制事务的方法: setAutoCommit(boolean a
11、utoCommit): commit(): rollback(): JDBC API中默认:每条更新语句是一项事务,是自动提交事务,20,手工管理事务,try con=DriverManager.getConnection(dburl,dbuser,dbpassword); con.setAutoCommit(false); stmt=con.createStatement(); stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); mit(); catch(SQLException e) e.printStackTrace(); trycon
12、.rollback(); catch(SQLException ex)System.out.println(“回滚失败”); finally trystmt.close();con.close() catch(SQLException e) System.out.println(“关闭资源失败”) ,21,使用连接池访问数据库,在实际应用开发中,使用 JDBC 直接访问数据库中的数据,每一次数据访问请求,都必 须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接数据库是 一件既消耗资源又费时的工作,如果频繁发生,系统的性能必然会急剧下降。数据库连接池技术是解决这个问题最常用
13、的方法,22,使用连接池访问数据库,连接池的作用 连接池是创建和管理数据库连接的缓冲池技术,由于不处理事务时,数据库连接会闲置,因此,将其很好地管理起来,让闲置的连接被其它需要的线程使用,可以提高系统性能,23,使用连接池访问数据库,连接池的工作原理 当一个线程需要用 JDBC 对数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将其返回到连接池中,这样就可以被其它想使用该连接的线程使用,24,使用连接池访问数据库,数据库连接池的主要操作如下: 服务器建立数据库连接池对象 按照事先指定的参数创建初始数量的数据库连接,放入池中,25,使用连接池访问数据库,对于一个数据库访问请求,直
14、接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大,则创建一个新的数据库连接 存取数据 关闭数据,26,Tomcat数据源的配置,tomcat的server.xml里加入: ,$TOMCAT_HOME/conf/server.xml,在前加上,27,DataSource,DataSource接口代表了数据源,它是一个用于产生数据连接的工厂。 getConnection() : 获得一个Connection对象; getLogWriter(PrintWriter out):获得DataSource的Log Writer getLoginTimeout(): 获得DataSource尝试连接数据库的最大时间。,28,使用连接池访问数据库,/初始化Context,使用InitialContext初始化Context Context ctx=new InitialContext(); /* 通过JNDI查找
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性化脓性阑尾炎术后感染控制与恢复全流程规范化管理指南
- 工贸企业分管工艺质量安全工作领导安全生产责任制培训
- 2025《阿房宫赋》文学成就课件
- 运行电工安全职责培训
- 2026年高考综合素质检测语文试题及答案
- 各类机械设备安全使用规定培训课件
- 探水员安全生产岗位责任制培训
- 营销中心职业健康安全管理职责培训
- 2026年广东省茂名市单招职业倾向性测试题库含答案详解(模拟题)
- 2026年广东茂名幼儿师范专科学校单招职业适应性测试题库附参考答案详解(基础题)
- 建设工程项目经济分析与评价PPT完整全套教学课件
- 技术交底制度
- 废塑料高温裂解干馏可行性报告
- 地质勘探原始记录表格【实用文档】doc
- GB/T 5752-2013输送带标志
- GB/T 3146.1-2010工业芳烃及相关物料馏程的测定第1部分:蒸馏法
- GB/T 30812-2014燃煤电厂用玻璃纤维增强塑料烟道
- 住院医师规范化培训临床技能结业考核体格检查评分表(神经外科)
- 小学二年级下册体育教案(全册)
- 中国外文出版发行事业局所属企事业单位公开招聘71人模拟试卷【共500题附答案解析】
- 《导游基础知识》61中国古典园林概说课件
评论
0/150
提交评论