《应用数据库》PPT课件.ppt_第1页
《应用数据库》PPT课件.ppt_第2页
《应用数据库》PPT课件.ppt_第3页
《应用数据库》PPT课件.ppt_第4页
《应用数据库》PPT课件.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章数据库的使用,WEB系统开发与设计,2,教学目的,了解JDBC驱动程序的4种类型 掌握MySQL数据库的安装 掌握MySQL-Front的安装和使用 掌握JDBC操作数据库的三个主要步骤,WEB系统开发与设计,3,主要内容,1、数据库使用的完整过程 2、数据库的增删改查实例 3、连接池技术,WEB系统开发与设计,4,1、数据库使用的完整过程,1.1 连接和访问数据库 1.2 处理结果集 1.3 关闭对象 1.4 异常处理,WEB系统开发与设计,5,1.1 连接和访问数据库,引入java.sql包 加载驱动程序 建立到数据库的连接 访问数据库,WEB系统开发与设计,6,1.2 处理结果集,(1)插入、删除或者更新执行完即可 (2)查询要处理查询结果,String username=“张三”; Statement stmt=con.createStatement(); String sql=“select * from user where username=”+username+”; ResultSet rs=stmt.executeQuery(sql);,user,查询结果,对行遍历,使用结果集的next()方法 获取某列,用get方法。,WEB系统开发与设计,7,next()方法的应用 1、判断有没有结果集 2、向下移动游标,以备获取某记录中某列的值,String sql=“select * from user where username=“+username+“ and userpass=“+userpass+“; rs=stmt.executeQuery(sql); if(rs.next() HttpSession session=request.getSession(); session.setAttribute(“username“, username); else ,while(rs.next() out.println(“用户名:”+rs.getString(2); ,WEB系统开发与设计,8,get方法 getInt(int columnIndex)获取整数字段的值 getInt(String columnName) getString(int columnIndex)获取字符串字段的值 getString(String columnName) getDouble(int columnIndex) getDouble(String columnName) ,String user=rs.getString(2); String user=rs.getString(“username”);,WEB系统开发与设计,9,1.3 关闭对象,为了避免资源浪费,要及时关闭创建的对象。 关闭连接:conn.close(); 关闭语句:stmt.close(); 关闭结果集:rs.close(); 注意:关闭的顺序要和创建对象的顺序相反。若操作过程中无结果集,则不需关闭。,WEB系统开发与设计,10,1.4 异常处理,在对数据库处理过程中可能会发生各种异常,所以要对这些异常进行处理。一般使用如下的处理框架:,/异常处理框架 try /要执行的可能出错的代码 catch( Exception e) /出错后的代码处理 finally /不管是否出错都要执行的代码 ,WEB系统开发与设计,11,实例,1、输出查询结果,WEB系统开发与设计,12,2、数据库的增删改查实例,(1)Statement对象和PreparedStatement对象 (2)数据的更新,WEB系统开发与设计,13,(1) Statement对象和PreparedStatement对象,在数据库连接建立后,需要对数据库进行访问,执行SQL语句。 为此java.sql包提供了3个接口,分别定义了对数据库的不同调用方式 Statement PreparedStatement CallableStatement,WEB系统开发与设计,14,Statement,功能:执行静态的SQL语句,返回执行结果 创建方法:利用在Conncetion接口中定义的createStatement()方法来创建Statement对象。 Statement createStatement() throws SQLException Statement接口中定义了若干方法用来执行SQL语句 执行指定的SQL语句,返回一个ResultSet对象: ResultSet executeQuery(String sql) throws SQLException 执行更新语句 int executeUpdate(String sql) throws SQLException,Connection conn=DriverManager.getConnection(url, user, password); Statement stmt=conn.createStatement();,Connection conn=DriverManager.getConnection(url, user, password); String username=“张三”; Statement stmt=conn.createStatement(); String sql=“select * from user where username=”+username+”; ResultSet rs=stmt.executeQuery(sql); sql=“insert into user (username,userpass) values(zhangsan,111)”; stmt.executeUpdate(sql);,WEB系统开发与设计,15,PreparedStatement,功能:使用不同的参数来多次执行同一个SQL语句时可以提高效率。 创建方法:利用在Conncetion接口中定义的prepareStatement()方法来得到PreparedStatement对象。 PreparedStatement prepareStatement() throws SQLException,Connection conn=DriverManager.getConnection(url, user, password); String sql=“insert user values(?,?,?)”; PreparedStatement pstmt=conn.prepareStatement(sql); pstmt.setInt(1,1); pstmt.setString(2,”zhangsan”); pstmt.setString(3,”123456”); pstmt.executeUpdate(); pstmt.setInt(1,2); pstmt.setString(2,”王五”); pstmt.setString(3,”abcd”); pstmt.executeUpdate(); ,WEB系统开发与设计,16,CallableStatement(了解),功能:用于执行SQL的存储过程。是从PreparedStatement接口继承而来。 创建方法:通过Connection对象的prepareCall()方法得到CallableStatement对象。 注意: 存储过程直接保存在数据库端,因此效率大大提高。 但是不同数据库厂商提供的数据库产品采用的存储过程语法有差异,所以可移植性降低。 MySQL5.0之前的版本不支持存储过程。,WEB系统开发与设计,17,(2)数据的更新,添加insert语句 修改(更新)update语句 删除-delete语句,WEB系统开发与设计,18,添加insert语句,语法: insert into table_name(column_list) values (data_values) 应用Statement对象向数据表中添加数据的关键代码: Statement stmt=conn.cteateStatement(); int rtn=stmt.executeUpdate(“insert into tb_user (name, pwd) values (hope,111)”); sql=“insert into user (username, userpass, gender,birthdate,nativeplace) values (“+vb.getUsername()+“,“+vb.getUserpass()+“,“+vb.getGender()+“,“+vb.getBirthdate()+“,“+vb.getNativeplace()+“)“; Int rnt=stmt.executeUpdate(sql);,WEB系统开发与设计,19,添加语句,往往语句较长,涉及的变量较多,可以利用StringBuffer对象来编写动态的添加语句。,StringBuffer newsql=new StringBuffer(); newsql.append(“insert into user (username, userpass, gender,birthdate,nativeplace) values (“); newsql.append(vb.getUsername(); newsql.append(“,“); newsql.append(vb.getUserpass(); newsql.append(“,“); newsql.append(vb.getGender(); newsql.append(“,“); newsql.append(vb.getBirthdate(); newsql.append(“,“); newsql.append(vb.getNativeplace(); newsql.append(“)“); stmt.executeUpdate(newsql.toString();,WEB系统开发与设计,20,添加insert语句,利用PreparedStatement对象向数据表中添加数据的代码: PreparedStatement pStmt=conn.prepareStatement(“insert into tb_user(name,pwd) values(?,?)”); pStmt.setString(1,”dream”); pStmt.setString(2,”111”); int rtn=pStmt.executeUpdate();,WEB系统开发与设计,21,修改(更新)update语句,语法 update table_name set =,= where update user set username=“zhangsan” where username=“张三”,WEB系统开发与设计,22,StringBuffer newsql=new StringBuffer(); newsql.append(“update user set username=“); newsql.append(vb.getUsername(); newsql.append(“,userpass=“); newsql.append(vb.getUserpass(); newsql.append(“,gender=“); newsql.append(vb.getGender(); newsql.append(“,birthdate=“); newsql.append(vb.getBirthdate(); newsql.append(“,nativeplace=“); newsql.append(vb.getNativeplace(); newsql.append(“ “); stmt.executeUpdate(newsql.toString();,WEB系统开发与设计,23,删除-delete语句,delete from where delete from user where username=“zhangsan”,WEB系统开发与设计,24,WEB系统开发与设计,25,实例,1、用户的注册 2、用户资料的管理 显示用户 修改用户 删除用户 3、新闻发布 修改新闻 删除新闻 显示新闻,WEB系统开发与设计,26,常见问题,如何确认执行查询后有具体的记录被查询到? 因为查询结果会返回给ResultSet对象,如下: 可以根据游标来判断,利用next()语句来移动游标,根据next()的返回值判断。 如何确认记录插入成功或者记录删除成功或者记录修改成功? 这些操作会将受影响的记录数返回给整形变量,如下: 若i值小于等于0,则表示没有记录被操作,更新失败。 实例:删除记录,ResultSet rs=stmt.executeQuery(sql);,int i=stmt.executeQuery(sql); /i中是操作后受影响的记录数,stmt=conn.createStatement(); int i=stmt.executeUpdate(sql); if(i0) session.setAttribute(“msg“, “删除成功!“); else session.setAttribute(“msg“, “删除失败!“); response.sendRedirect(“showUsers.jsp“);,WEB系统开发与设计,27,附加:数据库连接及操作类的编写,在开发程序时,经常会用到数据库的连接和操作,例如 注册用户时需要对连接数据库并插入记录 显示用户时需要对连接数据库并进行查询操作 删除用户时需要对连接数据库并进行并删除操作 更改用户时需要对连接数据库并进行修改操作 为了避免代码重复,可以将这些处理封装到单独的类中。可以将其看成是一种特殊的JavaBean,WEB系统开发与设计,28,对数据库的主要操作内容,public DB(),public void createConn(),public void getStmt(),public ResultSet executeQuery(String sql),public boolean executeUpdate(String sql),类名:DB 所属包:tools 需导入的类:java.sql.*,WEB系统开发与设计,29,类的大体内容,package toolbean; import java.sql.*; public class DB private String classname=“com.mysql.jdbc.Driver“; /数据库驱动类路径 private String url=“jdbc:mysql:/localhost:3306/class“; /数据库URL private String user=“root“; /登录数据库的用户名 private String pwd=“123456“; /登录数据库的密码 private Connection conn=null; /申明一个Connection对象 private Statement stmt=null; /声明一个Statement对象 /*通过构造方法加载数据库驱动*/ public DB() /*创建数据库连接*/ public void createConn() /*获取Statement对象*/ public void getStmt() /*创建对数据库进行操作的增加、删除和修改的executeUpdate()方法*/ public boolean executeUpdate(String sql) /*查询数据库*/ public ResultSet executeQuery(String sql) ,import java.sql.DriverManager; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;,WEB系统开发与设计,30,载入数据库驱动,public DB() /DB类的构造方法 try Class.forName(classname).newInstance(); /加载数据库驱动 catch (Exception e) e.printStackTrace(); /输出异常信息 System.out.println(“加载数据库驱动失败!“); ,WEB系统开发与设计,31, public void createConn(),public void createConn() try conn=DriverManager.getConnection(url, user, pwd); catch(SQLException e) e.printStackTrace(); System.out.println(“获取数据库连接失败!“); ,WEB系统开发与设计,32, public void getStmt(),public void getStmt() createConn(); try /调用Connection类实例的createStatement()方法创建一个Statement类对象 stmt=conn.createStatement(); catch(SQLException e) e.printStackTrace(); System.out.println(“创建Statement对象失败!“); ,WEB系统开发与设计,33, public ResultSet executeQuery(String sql),public ResultSet executeQuery(String sql) ResultSet rs=null; try getStmt(); try rs=stmt.executeQuery(sql); catch(Exception e) e.printStackTrace(); System.out.println(“查询数据库失败!“); catch(Exception e) e.printStackTrace(); finally tryrs.close();catch(Exception ee) trystmt.close();catch(Exception ee) tryconn.close();catch(Exception ee) return rs; ,WEB系统开发与设计,34,public boolean executeUpdate(String sql),public boolean executeUpdate(String sql) boolean mark=false; try getStmt();/创建一个Statement对象 int iCount=stmt.executeUpdate(sql);/执行操作,并获取所影响的记录数 if(iCount0)/更新数据库成功 mark=true; else/更新失败 mark=false; catch(SQLException e) e.printStackTrace(); finally trystmt.close();catch(Exception ee) tryconn.close();catch(Exception ee) return mark; ,WEB系统开发与设计,35,3、连接池技术(DataBase Connection Pool, DBCP),(1)背景 建立数据库连接耗时、耗资源,且一个数据库能同时建立的连接数有限。 对于大型的Web应用,可能同时会有成百上千个访问数据库的请求,若每个Web应用程序为每一个客户请求分配一个数据库连接,会导致性能急剧下降。 为了重复利用数据库连接,提高对请求的响应时间和服务器的性能,可采用连接池技术。,WEB系统开发与设计,36,3、连接池技术(DataBase Connection

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论