已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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,使用厂商驱动进行数据库连接,常见数据库的驱动程序名称和url如下MSSQLServer:驱动程序为: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.jdbc.Driver,url为:jdbc:mysql:/localhost:3306/DBName,8,JDBC操作,装载数据库的JDBC驱动程序Class.forName(“com.mysql.jdbc.Driver);建立与数据库的连接Connectionconn=DriverManager.getConnection(url,用户名,密码);例如:Stringurl=jdbc:mysql:/localhost:3306/school;,不同DBMS系统有不同的驱动名称,9,建立Statement对象,准备执行SQL语句Statementstmt=conn.createStatement();执行SQL语句常用3种执行SQL语句的方法:1)executeQuery()-用于Select语句,返回结果集.Stringsql=“select*from表名”;ResultSetrs=stmt.executeQuery(sql);2)executeUpdate()-用于创建和更新表(如Update/Insert/Delete/Create),返回受影响行数.Stringsql=“Deletefrom表名where”;intrsCount=stmt.executeUpdate(sql);3)execute()-用于执行任何SQL语句返回布尔值。,10,处理ResultSet结果集while(rs.next()Strings1=rs.getString(1);/根据列号取值(从1开始)或Strings2=rs.getString(“name”);/根据列名取值或intcol3=rs.getInt(3);/非字符串数据示例依次关闭ResultSet、Statement和Connection对象:rs.close();stmt.close();conn.close();,前提:第1列为字符串数据,前提:第3列为整形数据,11,JSP连接MySQL示例,);/关闭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目录weblogicbeauser_projectsdomainsbase_domainlib目录,13,使用PreparedStatement,引出以添加数据为例,在很多情况下,具体需要添加的值,是由客户自己输入的,因此,应该是一个个变量。该情况下,SQL语句的写法就比较麻烦,而且依赖了变量,比较容易出错PreparedStatement解决了这个问题,14,带参数的操作,intid=Integer.parseInt(request.getParameter(id);Stringname=request.getParameter(name);Stringaddress=request.getParameter(address);Stringyear=request.getParameter(year);Stringsql=insertintoteachervalues(+id+,+name+,+address+,+year+);introwCount=stmt.executeUpdate(sql);,15,使用PreparedStatement,PreparedStatement是Statement的子接口,功能与Statement类似它在sql语句中使用了?代替了需要插入的参数用PreperedStatement的setString(n,参数)方法可以将第n个?用传进的参数代替。这样做增加了程序的可维护性,也增加了程序的安全性,16,基本用法示例,使用参数:Stringsql=select*from表where字段=?;PreparedStatementpStmt=conn.prepareStatement(sql);设置参数值:Stringparm1=request.getParameter(参数名);pStmt.setString(1,parm1);执行带参数的SQL:ResultSetrs=pStmt.executeQuery();,如果是int,则用setInt()等等,也是三种方法:executeQuery()、executeUpdate()和execute(),17,事务,在银行转账时,要对数据库进行两个操作,即将一个账户的钱减少,将另一个账户的钱增多。但是由于操作的先后顺序,如果在两个操作之间发生故障,则会导致数据不一致。因此,需要设计一个事务,在两条语句都被执行成功后,数据修改才被真正提交(Commit)放入数据库,否则数据操作回滚(Rollback),18,事务,在默认情况下,executeUpdate函数会在数据库中提交改变的结果,此时,可以用Connection来定义该函数是否自动提交改变结果,并进行事务的提交或者回滚Connection中可以设置executeUpdate不要自动提交,19,JDBC事务管理,Connection类的3个控制事务的方法:setAutoCommit(booleanautoCommit):commit():rollback():JDBCAPI中默认:每条更新语句是一项事务,是自动提交事务,20,手工管理事务,trycon=DriverManager.getConnection(dburl,dbuser,dbpassword);con.setAutoCommit(false);stmt=con.createStatement();stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);mit();catch(SQLExceptione)e.printStackTrace();trycon.rollback();catch(SQLExceptionex)System.out.println(“回滚失败”);finallytrystmt.close();con.close()catch(SQLExceptione)System.out.println(“关闭资源失败”),21,使用连接池访问数据库,在实际应用开发中,使用JDBC直接访问数据库中的数据,每一次数据访问请求,都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接数据库是一件既消耗资源又费时的工作,如果频繁发生,系统的性能必然会急剧下降。数据库连接池技术是解决这个问题最常用的方法,22,使用连接池访问数据库,连接池的作用连接池是创建和管理数据库连接的缓冲池技术,由于不处理事务时,数据库连接会闲置,因此,将其很好地管理起来,让闲置的连接被其它需要的线程使用,可以提高系统性能,23,使用连接池访问数据库,连接池的工作原理当一个线程需要用JDBC对数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将其返回到连接池中,这样就可以被其它想使用该连接的线程使用,24,使用连接池访问数据库,数据库连接池的主要操作如下:服务器建立数据库连接池对象按照事先指定的参数创建初始数量的数据库连接,放入池中,25,使用连接池访问数据库,对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大,则创建一个新的数据库连接存取数据关闭数据,26,Tomcat数据源的配置,tomcat的server.xml里加入:,$TOMCAT_HOME/conf/server.xml,在前加上,27,DataSource,DataSource接口代表了数据源,它是一个用于产生数据连接的工厂。getConnection():获得一个Connection对象;getLogWriter(PrintWriterout):获得DataSource的LogWritergetLoginTimeout():获得DataSource尝试连接数据库的最大时间。,28,使用连接池访问数据库,/初始化Context,使用InitialContext初始化ContextContextctx=newInitialContext();/*通过JNDI查找数据源,该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年莆田辅警协警招聘考试备考题库及1套完整答案详解
- 2023年葫芦岛辅警协警招聘考试备考题库附答案详解(研优卷)
- 2023年辖县辅警招聘考试题库及完整答案详解
- 2024年大庆辅警协警招聘考试真题及答案详解参考
- 2024年临夏州辅警招聘考试真题及答案详解(名师系列)
- 2024年乐山辅警招聘考试真题带答案详解
- 2023年通辽辅警招聘考试真题含答案详解(预热题)
- 2024年周口辅警协警招聘考试备考题库含答案详解(新)
- 2024年哈尔滨辅警招聘考试题库含答案详解(培优a卷)
- 2024年南京辅警协警招聘考试备考题库及答案详解(全优)
- 2025中国铁塔集团广西分公司招聘22人易考易错模拟试题(共500题)试卷后附参考答案
- GB/T 16895.37-2025低压电气装置第8-82部分:功能方面产消式低压电气装置
- 学堂在线 军事理论 章节测试答案
- 冬季呼吸道疾病的预防
- 大一护理生涯发展展示
- 环境设计职业规划书
- 【基于生活圈理论的城市配置与规划研究文献综述6000字】
- F450装机教程课件
- 科学用脑与高效学习课件
- 脑卒中后吞咽障碍患者进食护理(2023年中华护理学会团体标准)
- 桥梁检测车设备安全操作规程
评论
0/150
提交评论