已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章JSP中使用数据库,在当今这一网络技术蓬勃发展的时代,数据库扮演了非常重要的角色;如果在服务器端没有数据库系统的支持,像搜索引擎、电子商务等Web应用程序就很难处理数量庞大的数据,因此,Web应用程序一般都需要访问数据库。现在最常用的是关系数据库,JSP可以访问多种不同的关系数据库,如Oracle数据库、SQLServer数据库、DB2数据库、MySQL数据库和MicrosoftAccess数据库等。在JSP页面中,对数据库的访问一般都是通过JDBC进行的,它为数据库应用开发人员提供了独立于具体数据库的数据库访问方法。,引言,教学目标,了解JDBC的相关概念掌握使用JDBCODBC桥访问数据库掌握使用加载纯java数据库驱动程序访问数据库掌握常用SQL语句的使用,第7章在JSP中使用数据库,本章大部分例子采用的模式是JSP+JavaBean模式,即JSP页面调用bean来完成对数据库的操作,使用的数据库管理系统是SQLServer2000。,7.1JDBC,JDBC是Java数据库连接(JavaDataBaseConnectivity)的简称,由一组用Java语言编写的类和接口组成,它们位于java.sql包中,提供了跨平台的数据库访问方法,并且为数据库应用开发人员提供了一种标准的应用程序设计接口(API)。,通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。在JSP程序中,程序员可以使用JDBCAPI将SQL语句发送到相应的任何一种数据库,从而实现对数据库的访问。,7.1JDBC,7.1JDBC,JDBC的基本功能1.与一个数据库建立连接。2.向已连接的数据库发送SQL语句。3.处理SQL语句返回的结果。图7.6,7.2数据库连接的常用方式,1.一种常见方式是建立起一个JDBC-ODBC桥接器2.另一种使用纯Java数据库驱动程序,7.3使用JDBCODBC桥访问数据库,创建ODBC数据源建立JDBCODBC桥接器和ODBC数据源指定的数据库建立连接,ODBC是由微软开发的、目前用得最广泛的访问关系数据库的API,它是用C语言实现的标准应用程序,用来在相关或不相关的数据库管理系统(DBMS)中存取数据的。通过ODBCAPI,应用程序可以存取保存在多种不同DBMS中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口,它提供了连接几乎任何一种平台、任何一种数据库的能力。事实上,JDBC通过JDBCODBC桥接器实现ODBC可以实现的所有的对数据库的操作能力。图7.7-P131,7.3使用JDBCODBC桥访问数据库,7.3.1创建ODBC数据源,要实现通过ODBC访问数据库,就必须首先为数据库建立一个ODBC数据源,这样数据库才能实现和应用程序的交互。单击“开始”|“控制面板”菜单命令,打开“控制面板”窗口,然后在窗口中双击“管理工具”图标,打开“管理工具”窗口,再双击“数据源(ODBC)”图标,打开“ODBC数据源管理器”窗口,单击“添加”按扭,打开“创建新数据源”窗口,然后即可创建数据源了。,7.3.2建立JDBCODBC桥接器,TryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptione),7.3.3与ODBC数据源指定的数据库建立连接,Connectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,”loginname”,”password”)实例:showByJdbcOdbc.jsp,java.sql.DriverManager,该类负责加载、注册JDBC驱动程序,管理应用程序和已注册的驱动程序的连接。publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException试图建立到给定数据库URL的连接。DriverManager试图从已注册的JDBC驱动程序集中选择一个适当的驱动程序。参数:url-jdbc:subprotocol:subname形式的数据库urluser-数据库用户,连接是为该用户建立的password-用户的密码返回:到URL的连接抛出:SQLException-如果发生数据库访问错误,java.sql.Connection,该接口代表数据库连接,并拥有创建SQL语句的方法,以完成常规的SQL操作,并为数据库事务处理提供提交和回滚方法。StatementcreateStatement()返回一个Statement对象Voidclose()用于断开连接,java.sql.Statement,它用来向数据库提交SQL语句的执行结果。ResultSetexecuteQuery(Stringsql)执行给定的SQL语句,该语句返回单个ResultSet对象。,java.sql.ResultSet,在使用Statement中的executeQuery方法执行SELECT查询指令时,查询的结果将会放在ResultSet中。,ResultSet表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next方法将光标移动到下一行;因为该方法在ResultSet对象没有下一行时返回false,所以可以在while循环中使用它来迭代结果集。默认的ResultSet对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。,java.sql.ResultSet,ResultSet接口提供用于从当前行获取列值的获取方法(getBoolean、getLong等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从1开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。,java.sql.ResultSet,列名或列号可用于标识要从中获取数据的列。例如,如果ResultSet对象rs的第二列名为“姓名”,并将值存储为字符串,则下列任一代码将获取存储在该列中的值:Strings=rs.getString(姓名);Strings=rs.getString(2);,java.sql.ResultSet,7.4使用纯Java数据库驱动程序,准备工作:下载并安装JDBC驱动程序微软推出的JDBC驱动程序SQLServer2000DriverforJDBC可以实现直接与SQLServer数据库的连接,用户可以到微软的官方网站,7.4.1加载SQL的驱动,tryClass.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver).newInstance();catch(Exceptione)out.print(e);,7.4.2和数据库建立连接,tryStringuri=jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=Student;Stringuser=sa;Stringpassword=sa;con=DriverManager.getConnection(uri,user,password);catch(SQLExceptione)实例:showBySQLDriver.jsp,7.5查询操作,与数据库建立连接后,就可以使用JDBC提供的API和数据库交互信息,如查询、修改和更新数据库中的表等。创建Statement对象Statementsql=con.createStatement();sql对象就可以调用相应的方法,实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中ResultSetrs=sql.executeQuery(SELECT*FROMscore);,7.5.1顺序查询,如何获取数据库中表的结构信息呢?ResultSetMetaData可用于获取关于ResultSet对象中列的类型和属性信息ResultSetMetaDatarsmd=rs.getMetaData();IntgetColumnCount()返回此ResultSet对象中的列数。StringgetColumnName(intcolumn)获取指定列的名称。,DatabaseMetaDataDatabaseMetaDatametadata=connection.getMetaData();ResultSetrs1=metadata.getColumns(null,null,tableName,null);,7.5.1顺序查询,7.5.2随机查询,Statementstmt=con.createStatement(inttype,intconcurrency);我们在访问数据库的时候,在读取返回结果的时候,可能要前后移动指针,比如我们先计算有多少条信息,这是我们就需要把指针移到最后来计算,然后再把指针移到最前面,逐条读取,有时我们只需要逐条读取就可以了。还有就是有只我们只需要读取数据,为了不破坏数据,我们可采用只读模式,有时我们需要望数据库里添加记录,这是我们就要采用可更新数据库的模式。,参数inttypeResultSet.TYPE_FORWORD_ONLY结果集的游标只能向下滚动。(默认)ResultSet.TYPE_SCROLL_INSENSITIVE结果集的游标可以上下移动,当数据库变化时,当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE返回可滚动的结果集,当数据库变化时,当前结果集同步改变。参数intconcurrencyResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表。(默认)ResultSet.CONCUR_UPDATETABLE能用结果集更新数据库中的表。,7.5.2随机查询,当我们使用ResultSetre=stmt.executeQuery(SQL语句)查询后,我们可以使用下列方法获得信息:publicbooleanprevious()将游标向上移动,该方法返回boolean型数据,当移到结果集第一行之前时,返回false。publicvoidbeforeFirst将游标移动到结果集的初始位置,即在第一行之前。,7.5.2随机查询,publicvoidafterLast()将游标移到结果集最后一行之后。publicvoidfirst()将游标移到结果集的第一行。publicvoidlast()将游标移到结果集的最后一行。publicbooleanisAfterLast()判断游标是否在最后一行之后。publicbooleanisBeforeFirst()判断游标是否在第一行之前。,7.5.2随机查询,publicbooleanifFirst()判断游标是否指向结果集的第一行。publicbooleanisLast()判断游标是否指向结果集的最后一行。publicintgetRow()得到当前游标所指向行的行号,行号从1开始,如果结果集没有行,返回0。publicbooleanabsolute(introw)将游标移到参数row指定的行号。如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false,7.5.2随机查询,7.5.3条件查询,Select*fromtalbenameorderby,7.5.4排序查询,7.5.4模糊查询,Select*fromscorewhere姓名like王%,7.6更新、添加与删除操作,Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作.返回值是一个整数,表示受影响的行数(即更新计数)。,7.6.1更新语句,UPDATEtable_nameSETcolumn_name=expression,column_name1=expressionWHEREsearch_condition其中,table_name:用来指定需要更新的表的名称。如果该表不在当前服务器或数据库中,或不为当前用户所有,这个名称可用链接服务器、数据库和所有者名称来限定。SETcolumn_name=expression指定要更新的列或变量名称的列表,column_name指定含有要更改数据的列的名称。WHEREsearch_condition:指定条件来限定所更新的行。,INSERT语句的语法格式为:INSERTINTOtable_namecolumn_listVALUES(DEFAULT|NULL|expression,.n)table_name:指定将要插入数据的表或table变量的名称。column_list:要在其中插入数据的一列或多列的列表。必须用圆括号将column_list括起来,并且用逗号进行分隔。VALUES(DEFAULT|NULL|expression,.n):引入要插入的数据值的列表。,7.6.2添加语句,DELETE语句的语法格式为:DELETEFROMtable_nameWHEREsearch_conditiontable_name:用来指定从中删除记录的表的名称。WHERE:用来指定用于限制删除行数的条件。如果没有提供WHERE子句,则DELETE删除表中的所有行。例如,要从stu_info表中删除学号为“4”的学生的记录,则SQL语句为:DELETEFROMstu_infoWHEREid=4,7.6.3删除语句,当向数据库发送一个SQL语句,比如“Select*Fromchengjibiao”,数据库库中的SQL解释器负责将把SQL语句生成地层的内部命令,然后执行该命令,完成有关的数据操作。如果不断地向数据库提交SQL语句势必增加数据库中SQL解释器的负担,影响执行的速度。如果应用程序能针对连接的数据库,事先就将SQL语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。,7.7使用预处理语句,7.7使用预处理语句,Statement对象在每次执行SQL语句时都将该语句传给数据库,这种做法在需要多次执行同一语句时效率很低,这时,可以使用PreparedStatement对象,它能将SQL语句传给数据库进行预编译,当以后需要执行同一SQL语句时,就不需要再进行编译,可以直接执行,因而大大提高了执行速度。,7.7使用预处理语句,(1)连接对象con调用PreparedStatementprepareStatement(Stringsql)方法对参数sql指定的SQL语句进行预编译处理.该方法返回一个PreparedStatement对象.(2)只要编译好了PreparedStatement对象,那么该对象可以随时地执行方法:ResultSetexecuteQuery()booleanexecute()intexecuteUpdate(),使用通配符,7.7使用预处理语句,prepareStatement和Statement的区别,第一:prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。createStatement不会初始化,没有预处理,没次都是从0开始执行SQL,第二:prepareStatement可以替换变量在SQL语句中可以包含?,可以用ps=conn.prepareStatement(select*fromCustwhereID=?);intsid=1001;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租房屋做酒店合同范本
- 网发布广告协议书范本
- 美国特种车辆合同范本
- 关于辐射安全考试的题库及答案解析
- 人教版 (新课标)七年级上册第二节 植物细胞教学设计及反思
- 街上民房出售合同范本
- 直播公司经纪合同范本
- 陕西省2025安全b证考试题库及答案解析
- 租广联达锁的合同范本
- 签了三方协议规定合同
- 韵达快递承包合同韵达快递承包合同
- T-DLSHXH 002-2023 工业干冰标准规范
- 静力压桩中的几个问题及在苏州某工程中的应用
- 钣金检验作业指导书
- 滕王阁序注音全文打印版
- JJG 971-2019液位计
- GB/T 5751-2009中国煤炭分类
- 高一上学期英语期中考试质量分析会课件
- GB/T 17850.3-1999涂覆涂料前钢材表面处理喷射清理用非金属磨料的技术要求铜精炼渣
- FZ/T 01057.2-2007纺织纤维鉴别试验方法 第2部分:燃烧法
- 第五章-金融衍生工具市场-货币金融学-蒋先玲课件
评论
0/150
提交评论