JDBCjavaEE项目连接数据库

上传人:博****1 文档编号:567965066 上传时间:2024-07-22 格式:PPT 页数:28 大小:238KB
返回 下载 相关 举报
JDBCjavaEE项目连接数据库_第1页
第1页 / 共28页
JDBCjavaEE项目连接数据库_第2页
第2页 / 共28页
JDBCjavaEE项目连接数据库_第3页
第3页 / 共28页
JDBCjavaEE项目连接数据库_第4页
第4页 / 共28页
JDBCjavaEE项目连接数据库_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《JDBCjavaEE项目连接数据库》由会员分享,可在线阅读,更多相关《JDBCjavaEE项目连接数据库(28页珍藏版)》请在金锄头文库上搜索。

1、第2章JDBC主要内容qJDBC简介qJDBC操作q使用PreparedStatementq事务q使用连接池访问数据库2JDBC简介qJDBC中主要接口qjava.sql.DriverManager:处理驱动程序的调入和管理qjava.sql.Connection:负责连接数据库qjava.sql.Statement:负责执行数据库SQL语句qjava.sql.ResultSet:负责存放查询结果3JDBC简介q针对不同类型的数据库,JDBC机制中提供了驱动程序的的概念。对于不同的数据库,程序只需要使用不同的驱动厂商驱动连接数据库4使用厂商驱动进行数据库连接q常见数据库的驱动程序名称和url如

2、下qMSSQLServer:驱动程序为:com.microsoft.jdbc.sqlserver.SQLServerDriver,url为:jdbc:microsoft:sqlserver:/IP:1433;DatabaseName=DBName5使用厂商驱动进行数据库连接qOracle:驱动程序为:oracle.jdbc.driver.OracleDriver,url为:jdbc:oracle:thin:ip:1521:sid6使用厂商驱动进行数据库连接qMySQL:驱动程序为:“com.mysql.jdbc.Driver,url为:jdbc:mysql:/localhost:3306/DB

3、Name7JDBC操作装载数据库的JDBC驱动程序Class.forName(“com.mysql.jdbc.Driver);建立与数据库的连接Connectionconn=DriverManager.getConnection(url,用户名,密码);例如:Stringurl=jdbc:mysql:/localhost:3306/school;不同DBMS系统有不同的驱动名称不同DBMS系统有不同连接串.8建立Statement对象,准备执行SQL语句Statementstmt=conn.createStatement();执行SQL语句常用3种执行SQL语句的方法:1)executeQue

4、ry()-用于Select语句,返回结果集.Stringsql=“select*from表名”;ResultSetrs=stmt.executeQuery(sql);2)executeUpdate()-用于创建和更新表(如Update/Insert/Delete/Create),返回受影响行数.Stringsql=“Deletefrom表名where”;intrsCount=stmt.executeUpdate(sql);3)execute()-用于执行任何SQL语句返回布尔值。9处理ResultSet结果集while(rs.next()Strings1=rs.getString(1);/根据

5、列号取值(从1开始)或Strings2=rs.getString(“name”);/根据列名取值或intcol3=rs.getInt(3);/非字符串数据示例依次关闭ResultSet、Statement和Connection对象:rs.close();stmt.close();conn.close();前提:第1列为字符串数据前提:第3列为整形数据10JSP连接MySQL示例%Stringurl=jdbc:mysql:/localhost:3306/school;/数据库连接字符串Class.forName(com.mysql.jdbc.Driver);/加载驱动程序Connectionco

6、nn=DriverManager.getConnection(url,root,dba);/建立连接Statementstmt=conn.createStatement();/创建SQL容器Stringsql=select*fromteacher;/表为teacherResultSetrs=stmt.executeQuery(sql);/获得结果集 while( rs.next() ) /处理结果集out.print(rs.getString(id)+);out.print(rs.getString(name)+);out.print(rs.getString(address)+);out.p

7、rint(rs.getString(year)+);/关闭rs.close();stmt.close();conn.close();%数据库名11服务器中数据库驱动程序部署mysql的驱动程序mysql-connector-java-5.*-bin.jar存放位置:ntomcat%TOMCAT_HOME%lib或%TOMCAT_HOME%commonlib目录njboss%JBOSS_HOME%serverdefaultlib目录nweblogicbeauser_projectsdomainsbase_domainlib目录12使用PreparedStatementq引出q以添加数据为例,在很

8、多情况下,具体需要添加的值,是由客户自己输入的,因此,应该是一个个变量。该情况下,SQL语句的写法就比较麻烦,而且依赖了变量,比较容易出错qPreparedStatement解决了这个问题13带参数的操作intid=Integer.parseInt(request.getParameter(id);Stringname=request.getParameter(name);Stringaddress=request.getParameter(address);Stringyear=request.getParameter(year);Stringsql=insertintoteacherval

9、ues(+id+,+name+,+address+,+year+);introwCount=stmt.executeUpdate(sql);很不方便14使用PreparedStatementqPreparedStatement是Statement的子接口,功能与Statement类似q它在sql语句中使用了?代替了需要插入的参数q用PreperedStatement的setString(n,参数)方法可以将第n个?用传进的参数代替。这样做增加了程序的可维护性,也增加了程序的安全性15基本用法示例1.使用参数:Stringsql=select*from表where字段=?;PreparedSta

10、tementpStmt=conn.prepareStatement(sql);2.设置参数值:Stringparm1=request.getParameter(参数名);pStmt.setString(1,parm1);3.执行带参数的SQL:ResultSetrs=pStmt.executeQuery();如果是int,则用setInt()等等?参数的序号从1开始不用再带参数要带参数参数类型要一致也是三种方法:executeQuery()、executeUpdate()和execute()16事务q在银行转账时,要对数据库进行两个操作,即将一个账户的钱减少,将另一个账户的钱增多。但是由于操作

11、的先后顺序,如果在两个操作之间发生故障,则会导致数据不一致。因此,需要设计一个事务,在两条语句都被执行成功后,数据修改才被真正提交(Commit)放入数据库,否则数据操作回滚(Rollback)17事务q在默认情况下,executeUpdate函数会在数据库中提交改变的结果,此时,可以用Connection来定义该函数是否自动提交改变结果,并进行事务的提交或者回滚qConnection中可以设置executeUpdate不要自动提交18JDBC事务管理qConnection类的3个控制事务的方法:qsetAutoCommit(booleanautoCommit):qcommit():qroll

12、back():qJDBCAPI中默认:每条更新语句是一项事务,是自动提交事务19手工管理事务trycon=DriverManager.getConnection(dburl,dbuser,dbpassword); con.setAutoCommit(false); stmt=con.createStatement(); stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); mit();catch(SQLException e) e.printStackTrace(); trycon.rollback(); catch(SQLException

13、ex)System.out.println(“回滚失败”); finally trystmt.close();con.close() catch(SQLException e) System.out.println(“关闭资源失败”) 20使用连接池访问数据库q在实际应用开发中,使用JDBC直接访问数据库中的数据,每一次数据访问请求,都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接数据库是一件既消耗资源又费时的工作,如果频繁发生,系统的性能必然会急剧下降。数据库连接池技术是解决这个问题最常用的方法21使用连接池访问数据库q连接池的作用q连接池是创建和管理数据库连接的

14、缓冲池技术,由于不处理事务时,数据库连接会闲置,因此,将其很好地管理起来,让闲置的连接被其它需要的线程使用,可以提高系统性能22使用连接池访问数据库q连接池的工作原理q当一个线程需要用JDBC对数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将其返回到连接池中,这样就可以被其它想使用该连接的线程使用23使用连接池访问数据库q数据库连接池的主要操作如下:q服务器建立数据库连接池对象q按照事先指定的参数创建初始数量的数据库连接,放入池中24使用连接池访问数据库q对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大,则创建一个

15、新的数据库连接q存取数据q关闭数据25Tomcat数据源的配置qtomcat的server.xml里加入:qqqq$TOMCAT_HOME/conf/server.xml,在前加上26DataSourceDataSource接口代表了数据源,它是一个用于产生数据连接的工厂。qgetConnection():获得一个Connection对象;qgetLogWriter(PrintWriterout):获得DataSource的LogWriterqgetLoginTimeout():获得DataSource尝试连接数据库的最大时间。27使用连接池访问数据库/初始化Context,使用InitialContext初始化ContextContextctx=newInitialContext();/*通过JNDI查找数据源,该JNDI为java:comp/env/jdbc/dstest,分成两个部分java:comp/env是Tomcat固定的,Tomcat提供的JNDI绑定都必须加该前缀。jdbc/dstest是定义数据源时的数据源名*/DataSourceds=(DataSource)ctx.lookup(java:comp/env/jdbc/dstest);/获取数据库连接Connectionconn=ds.getConnection();28

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > 金融/商业/投资

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号