第2章JDBCjavaEE项目连接数据库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章JDBC2主要内容JDBC简介JDBC操作使用PreparedStatement事务使用连接池访问数据库3JDBC简介JDBC中主要接口java.sql.DriverManager:处理驱动程序的调入和管理java.sql.Connection:负责连接数据库java.sql.Statement:负责执行数据库SQL语句java.sql.ResultSet:负责存放查询结果4JDBC简介针对不同类型的数据库,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]8JDBC操作①装载数据库的JDBC驱动程序Class.forName(“com.mysql.jdbc.Driver);②建立与数据库的连接Connectionconn=DriverManager.getConnection(url,用户名,密码);例如:Stringurl=jdbc:mysql://localhost:3306/school;不同DBMS系统有不同的驱动名称不同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列为整形数据11JSP连接MySQL示例%@pagelanguage=javaimport=java.util.*pageEncoding=GB2312%%@pageimport=java.sql.*%%Stringurl=jdbc:mysql://localhost:3306/school;//数据库连接字符串Class.forName(com.mysql.jdbc.Driver);//加载驱动程序Connectionconn=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.print(rs.getString(year)+br);}//关闭rs.close();stmt.close();conn.close();%数据库名12服务器中数据库驱动程序部署mysql的驱动程序mysql-connector-java-5.*-bin.jar存放位置:tomcat%TOMCAT_HOME%\lib或%TOMCAT_HOME%\common\lib目录jboss%JBOSS_HOME%\server\default\lib目录weblogic\bea\user_projects\domains\base_domain\lib目录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基本用法示例1.使用参数:Stringsql=select*from表where字段=?;PreparedStatementpStmt=conn.prepareStatement(sql);2.设置参数值:Stringparm1=request.getParameter(参数名);pStmt.setString(1,parm1);3.执行带参数的SQL:ResultSetrs=pStmt.executeQuery();问号作为参数占位符如果是int,则用setInt()等等?参数的序号从1开始不用再带参数要带参数参数类型要一致也是三种方法:executeQuery()、executeUpdate()和execute()17事务在银行转账时,要对数据库进行两个操作,即将一个账户的钱减少,将另一个账户的钱增多。但是由于操作的先后顺序,如果在两个操作之间发生故障,则会导致数据不一致。因此,需要设计一个事务,在两条语句都被执行成功后,数据修改才被真正提交(Commit)放入数据库,否则数据操作回滚(Rollback)18事务在默认情况下,executeUpdate函数会在数据库中提交改变的结果,此时,可以用Connection来定义该函数是否自动提交改变结果,并进行事务的提交或者回滚Connection中可以设置executeUpdate不要自动提交19JDBC事务管理Connection类的3个控制事务的方法:setAutoCommit(booleanautoCommit):commit():rollback():JDBCAPI中默认:每条更新语句是一项事务,是自动提交事务20手工管理事务try{……con=DriverManager.getConnection(dburl,dbuser,dbpassword);con.setAutoCommit(false);stmt=con.createStatement();stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);con.commit();}catch(SQLExceptione){e.printStackTrace();try{con.rollback();}catch(SQLExceptionex){System.out.println(“回滚失败”);}}finally{try{stmt.close();con.close()}catch(SQLExceptione){System.out.println(“关闭资源失败”)}}21使用连接池访问数据库在实际应用开发中,使用JDBC直接访问数据库中的数据,每一次数据访问请求,都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接数据库是一件既消耗资源又费时的工作,如果频繁发生,系统的性能必然会急剧下降。数据库连接池技术是解决这个问题最常用的方法22使用连接池访问数据库连接池的作用连接池是创建和管理数据库连接的缓冲池技术,由于不处理事务时,数据库连接会闲置,因此,将其很好地管理起来,让闲置的连接被其它需要的线程使用,可以提高系统性能23使用连接池访问数据库连接池的工作原理当一个线程需要用JDBC对数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将其返回到连接池中,这样就可以被其它想使用该连接的线程使用24使用连接池访问数据库数据库连接池的主要操作如下:服务器建立数据库连接池对象按照事先指定的参数创建初始数量的数据库连接,放入池中25使用连接池访问数据库对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大,则创建一个新的数据库连接存取数据关闭数据26Tomcat数据源的配置tomcat的server.xml里加入:Contextpath=/mywebdocBase=“mywebreloadable=true!--path=虚拟路径docBase=真实路径--Resourcename=jdbc/dstestauth=Containertype=javax.sql.DataSourcemaxActive=100maxIdle=30maxWait=10000username=rootpassword=driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydb//Context$TOMCAT_HOME/conf/server.xml,在/Host前加上27DataSourceDataSource接口代表了数据源,它是一个用于产生数据连接的工厂。getConnection():获得一个Connection对象;getLogWriter(PrintWriterout):获得DataSource的LogWritergetLoginTimeout():获得DataSource尝试连接数据库的最大时间。28使用连接池访问数据库//初始化Context,使用InitialContext初始化ContextContextctx=newInitialConte

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功