




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 JDBC 主要内容JDBC简介JDBC操作运用PreparedStatement事务运用衔接池访问数据库2JDBC 简介JDBC中主要接口 java.sql.DriverManager:处置驱动程序的调入和管理java.sql.Connection:担任衔接数据库 java.sql.Statement:担任执行数据库 SQL 语句 java.sql.ResultSet:担任存放查询结果3JDBC 简介针对不同类型的数据库,JDBC 机制中提供了驱动程序的的概念。对于不同的数据库,程序只需求运用不同的驱动厂商驱动衔接数据库4运用厂商驱动进展数据库衔接常见数据库的驱动程序称号和 url 如
2、下 MS SQL Server:驱动程序为:com.microsoft.jdbc.sqlserver.SQLServerDriver, url 为:jdbc:microsoft:sqlserverIP:1433;DatabaseName=DBName5运用厂商驱动进展数据库衔接 Oracle :驱 动 程 序 为 : oracle.jdbc.driver.OracleDriver , url 为 : jdbc:oracle:thin:ip:1521:sid6运用厂商驱动进展数据库衔接 MySQL : 驱 动 程 序 为 : “ com.mysql.jdbc.Driver , url 为 : j
3、dbc:mysqllocalhost:3306/DBName7JDBC操作装载数据库的JDBC驱动程序Class.forName(“com.mysql.jdbc.Driver);建立与数据库的衔接Connection conn= DriverManager.getConnection(url, 用户名, 密码);例如: String url=jdbc:mysqllocalhost:3306/school;不同DBMS系统有不同的驱动称号不同DBMS系统有不同衔接串.8建立Statement 对象,预备执行SQL语句Statement stmt = conn.createStatement();
4、执行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) execute()-用于执行任何SQL语句前往布尔值。9处置Res
5、ultSet结果集 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列为整形数据10JSP衔接MySQL例如% String url =jdbc:mysqllocalhost:3306/school
6、; /数据库衔接字符串 Class.forName( com.mysql.jdbc.Driver ); /加载驱动程序 Connection conn= DriverManager.getConnection(url,root,dba); /建立衔接 Statement stmt=conn.createStatement(); /创建SQL容器 String sql=select * from teacher; /表为teacher ResultSet rs=stmt.executeQuery(sql); /获得结果集 while( rs.next() ) /处置结果集 out.print(r
7、s.getString(id)+ ); out.print(rs.getString(name)+ ); out.print(rs.getString(address)+ ); out.print(rs.getString(year)+); /封锁 rs.close(); stmt.close(); conn.close(); %数据库名11效力器中数据库驱动程序部署mysql的驱动程序mysql-connector-java-5.*-bin.jar存放位置:tomcat%TOMCAT_HOME%lib 或%TOMCAT_HOME%commonlib目录jboss%JBOSS_HOME%ser
8、verdefaultlib目录weblogicbeauser_projectsdomainsbase_domainlib目录12运用 PreparedStatement引出 以添加数据为例,在很多情况下,详细需求添加的值,是由客户本人输入的,因此,应该是一个个变量。该情况下,SQL 语句的写法就比较费事 ,而且依赖了变量,比较容易出错PreparedStatement 处理了这个问题 13 带参数的操作int id=Integer.parseInt(request.getParameter(id);String name=request.getParameter(name);String ad
9、dress=request.getParameter(address);String year=request.getParameter(year);String sql=insert into teacher values(+id+,+name+,+address+,+year+); int rowCount=stmt.executeUpdate(sql); 很不方便14运用 PreparedStatementPreparedStatement 是 Statement 的子接口,功能与 Statement 类似 它在 sql 语句中运用了?替代了需求插入的参数 用 PreperedState
10、ment 的 setString(n,参数)方法可以将第 n 个?用传进的参数替代。这样做添加了程序的可维护性,也添加了程序的平安性15根本用法例如运用参数:String sql=select * from 表 where 字段=?;PreparedStatement pStmt = conn.prepareStatement(sql); 设置参数值:String parm1=request.getParameter(参数名);pStmt.setString(1, parm1);执行带参数的SQL:ResultSet rs= pStmt.executeQuery( ); 问号作为参数占位符假设
11、是int,那么用setInt()等等?参数的序号从1开场不用再带参数要带参数参数类型要一致也是三种方法:executeQuery()、executeUpdate()和execute()16事务在银行转账时,要对数据库进展两个操作,即将一个账户的钱减少,将另一个账户的钱增多。但是由于操作的先后顺序,假设在两个操作之间发生缺点,那么会导致数据不一致。因此,需求设计一个事务,在两条语句都被执行胜利后,数据修正才被真正提交(Commit)放入数据库,否那么数据操作回滚(Rollback)17事务在默许情况下,executeUpdate 函数会在数据库中提交改动的结果,此时,可以用 Connection
12、 来定义该函数能否自动提交改动结果,并进展事务的提交或者回滚Connection 中可以设置 executeUpdate 不要自动提交18JDBC事务管理Connection类的3个控制事务的方法:setAutoCommit(boolean autoCommit):commit():rollback():JDBC API中默许:每条更新语句是一项事务,是自动提交事务19手工管理事务trycon=DriverManager.getConnection(dburl,dbuser,dbpassword); con.setAutoCommit(false); stmt=con.createStatem
13、ent(); stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); conmit();catch(SQLException e) e.printStackTrace(); trycon.rollback(); catch(SQLException ex)System.out.println(“回滚失败); finally trystmt.close();con.close() catch(SQLException e) System.out.println(“封锁资源失败) 20运用衔接池访问数据库在实践运用开发中,运用 JDBC 直接访问数据
14、库中的数据,每一次数据访问恳求,都必 须阅历建立数据库衔接、翻开数据库、存取数据和封锁数据库衔接等步骤,而衔接数据库是 一件既耗费资源又费时的任务,假设频繁发生,系统的性能必然会急剧下降。数据库衔接池技术是处理这个问题最常用的方法21运用衔接池访问数据库衔接池的作用衔接池是创建和管理数据库衔接的缓冲池技术,由于不处置事务时,数据库衔接会闲置,因此,将其很好地管理起来,让闲置的衔接被其它需求的线程运用,可以提高系统性能22运用衔接池访问数据库衔接池的任务原理当一个线程需求用 JDBC 对数据库操作时,它从池中恳求一个衔接。当这个线程运用完了这个衔接,将其前往到衔接池中,这样就可以被其它想运用该衔
15、接的线程运用23运用衔接池访问数据库数据库衔接池的主要操作如下: 效力器建立数据库衔接池对象按照事先指定的参数创建初始数量的数据库衔接,放入池中24运用衔接池访问数据库对于一个数据库访问恳求,直接从衔接池中得到一个衔接。假设数据库衔接池对象中没有空闲的衔接,且衔接数没有到达最大,那么创建一个新的数据库衔接存取数据封锁数据25Tomcat数据源的配置tomcat的server.xml里参与:$TOMCAT_HOME/conf/server.xml,在前加上26DataSourceDataSource接口代表了数据源,它是一个用于产生数据衔接的工厂。getConnection() : 获得一个Connection对象;getLogWriter(PrintWriter out):获得DataSource的Log WritergetLoginTimeout(): 获得DataSource尝试衔接数据库的最大时间。27运用衔接池访问数据库/初始化Context,运用InitialContext初始化ContextContext ctx=new Initi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州师范大学《运动生物力学Ⅱ》2023-2024学年第二学期期末试卷
- 吉林电子信息职业技术学院《康复心理学》2023-2024学年第二学期期末试卷
- 石家庄铁道大学《病原生物学实验》2023-2024学年第二学期期末试卷
- 重庆文理学院《地下空间规划与设计》2023-2024学年第一学期期末试卷
- 云南理工职业学院《思想品德修养与法律基础》2023-2024学年第二学期期末试卷
- 武汉电力职业技术学院《建筑施工图设计》2023-2024学年第二学期期末试卷
- 售楼部主体施工合同
- 房屋装修木工合同
- 医疗器械代加工合同
- 商业住房买卖合同
- GB/T 3717-1983测长机
- GB/T 19189-2011压力容器用调质高强度钢板
- 【农业养殖技术】花鲈淡水池塘标准化养殖技术
- 政治学基础课件全部终稿
- 一园青菜成了精-课件
- 酒店运营管理课件
- 中国古代建筑理论知识考核试题与答案
- 山东省青岛市各县区乡镇行政村村庄村名居民村民委员会明细
- 注浆防水工程检验批质量验收记录
- 绿色建筑评价评分表
- 接触网工程施工方法及技术措施
评论
0/150
提交评论