《JSP笔记》之五(JSP和数据库应用).doc_第1页
《JSP笔记》之五(JSP和数据库应用).doc_第2页
《JSP笔记》之五(JSP和数据库应用).doc_第3页
《JSP笔记》之五(JSP和数据库应用).doc_第4页
《JSP笔记》之五(JSP和数据库应用).doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

JSP笔记之五第五章JSP与数据库应用本章中,我们使用SQL Server 2000数据库管理系统。特别约定,建立新的数据库名为:student,在其下创建表:表1:student;表2:login 。数据源名:jspdb5.1 访问SQL Server数据库和案例115.1.1 Web数据库程序设计基础下面给出一个存取Web数据库的JSP数据库网络架构图。 图中,服务器端由Web应用程序服务器和数据库服务器组成,前者负责执行JSP程序。JSP程序通过JDBC(Java DataBase Connectivity)接口和数据库服务器相连,并取得数据库中的数据。JSP程序也通过JDBC向数据库发送SQL命令,对数据库进行新增、删除和修改记录等操作,这一切都需要依靠JDBC提供的类与方法来完成。5.1.2数据库的基本概念5.1.3在SQL Server 2000中创建数据库打开SQL Server 2000的“企业管理器”,在其中创建数据库jspdb 。5.1.4JDBC简介JDBC是Java数据库连接API,它由一些Java类和接口组成。在JSP中可以使用JDBC实现对数据库中表记录的查询、修改、插入和删除等操作。JDBC技术在JSP开发中占有很重要的地位。经常使用JDBC进行如下操作:(1)与一个数据库建立连接(2)向已连接的数据库发送SQL语句(3)处理SQL语句返回的结果1JSP与数据库连接的常用方式应用程序必须首先与数据库建立连接。通常有四种连接方式,见书第176至177页。一般常用两种连接方式:JDBCODBC桥接器和纯Java数据库驱动程序。不同的连接方式对应着网页中不同的代码段。2JDBC中常用的类和接口(1)DriverManager类:驱动管理类DriverManager类对象负责管理JDBC驱动程序,使用DriverManager的方法getConnection()可以生成Connection对象。(2)Connection类:连接类Connection类对象实现与数据源的连接,通过Connection类的createStatement()方法可以生成Statement对象。(3)Statement接口:语句接口用于发送简单的SQL语句,实现SQL语句的执行。(4)ResultSet接口:结果集接口实现对数据的处理,维护记录指针,记录指针所指记录为当前记录。ResultSet对象用于包含符合SQL语句中条件的所有记录,并且通过一套get方法提供了对这些记录中数据的访问。(5)PreparedStatement接口:预处理语句接口用于发送带有一个或多个输入参数(IN参数)的SQL语句,PreparedStatement对象代表一个预编译的SQL语句。执行速度较快,需要执行多次的语句应该创建为PreparedStatement对象。 PreparedStatement对象中的SQL语句可具有若干个参数,执行语句前用setXXX方法来提供。5.1.5 DriverManager类DriverManager类负责管理JDBC驱动程序,是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。与DriverManager类相关的方法主要有Class.forName(String driver)和Static Connection getConnection(String url,String user,String password)。前者用于加载注册驱动程序,后者用于取得对数据库的连接。关于它们的用法,在下一节中马上介绍。5.1.6 使用JDBC-ODBC桥接器方式连接数据库使用JDBCODBC桥接器方式与数据库建立连接,要经过:创建ODBC数据源建立JDBCODBC桥接器和ODBC数据源指定的数据库建立连接共3个步骤。1创建ODBC数据源:步骤见教材。操作入口:控制面板管理工具数据源(ODBC)打开“ODBC数据源管理器”窗口,选择“系统DSN”选项卡“添加”按钮设置驱动程序:SQL Server数据源名:jspdb,服务器:(local)登录方式:选择默认设置:如下图,选择“使用网络登录ID的Windows NT验证(W)。” 勾上“更改默认的数据库为(D):”中,输入数据库:jspdb 。其它采用默认设置,不需要修改。创建后,测试一下数据源。2建立JDBCODBC桥接器为了连接jspdb数据源的jspdb数据库,首先要建立一个JDBCODBC桥接器.这个建立过程是通过下面这句代码实现的:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); /或Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();建立桥接器时可能发生异常,因此捕获这个异常。所以建立桥接器的标准语句是:tryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);/或Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance(); Catch(ClassNotFoundException e)out.println(e)3与ODBC数据源指定的数据库建立连接编写连接数据库的Java代码不会出现数据库的名称,只能出现数据源的名字。先使用java.sql包中的Connection类声明一个连接对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个对象:Connection con=DriverMagager.getConnection(“jdbc:odbc:数据源名字”,”login name”,”password”);其中login name 和 password 是建立数据源时所使用的用户名和密码。建立连接时应捕获SQLException异常:tryConnection con=DriverManager.getConnection(“jdbc:odbc:student”,”sa”,”sa”);catch(SQLException e)out.println(e);这样就与数据源student建立了连接。应用程序一旦与某个数据源建立连接,就可以通过SQL语句与该数据源所指定的数据库中的表交互信息,如查询、修改、更新表中的记录。下例中是一个简单的JSP页面,该页面中的Java程序片代码负责连接到数据源jspdb,查询该数据源中的数据库jspdb中的表trade的全部记录。表trade的字段设计和所有记录见书175页176页。例1 用JDBCODBC桥接器方式连接数据库,并显示表trade中的全部记录。网页文件名example1.jsp 序列号 商品名称 类型供应商价格数量 执行后,效果如下图:案例11访问SQL Server数据库采用JDBCODBC桥接器方式连接数据库中的表trade。请同学们学习连接代码中参数的设置。网页文件名jspodbc.jsp 访问SQL Server数据库访问SQL Server数据库% /下面程序段用于连接到数据库 /加载类sun.jdbc.odbc.JdbcOdbcDriver,并通过newInstance()方法实例化Class.forName(sun.jdbc.odbc.JdbcOdbcDriver).newInstance(); out.println(数据库驱动注册成功!); /设置url为ODBC中的jspdbString url=jdbc:odbc:jspdb; String user=sa; String password=; /建立与数据库的连接,将连接赋给conn Connection conn= DriverManager.getConnection(url,user,password);out.println(数据库连接成功!);/通过Connection类的createStatement()方法创建Statement实例,/并赋给stmt,以方便操作数据库 Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); /创建SQL查询字符串,以选择数据表trade中的记录 String sql=select * from trade;/通过Statement类的executeQuery()方法创建ResultSet对象rs,以方便对数据表的操作 ResultSet rs=stmt.executeQuery(sql);/移动到数据表的第一条记录 rs.first();/下面的语句将显示记录中各字段的内容%id:商品名称:供应商:类别:单价:数量:数据库访问成功!数据库已关闭!运行后效果如下图:5.1.7 通过本地协议纯Java驱动程序访问SQL Server 2000数据库用Java语言编写的驱动程序称为纯Java驱动程序。简单地说,JDBC可以调用本地协议纯Java驱动程序和相应的数据库建立连接。这种连接数据库方式要经过2个步骤:加载纯Java驱动程序与指定的数据库连接。1加载纯Java驱动程序:这种方式下不需要设置数据源,由于不依赖于ODBC,使得应用程序具有很好的移植性。目前,许多数据库厂商都提供了自己的相应的纯Java驱动程序。当使用纯Java驱动程序访问数据库时,必须保证:在连接数据库的JSP网页程序所驻留的计算机上安装相应DBMS提供的纯Java驱动程序。比如,Tomcat服务器上的某个Web应用程序,想访问SQL Server 2000数据库管理系统所管理的数据库,则Tomcat服务器所驻留的计算机上必须要安装SQL Server2000提供的纯Java驱动程序。我们这里,使用的是MS SQL Server 2000数据库管理系统。所以需要把该厂商提供的jar包:mssqlserver.jar、msutil.jar、msbase.jar挎贝到Java的jrelibext中,或复制到Tomcat服务器安装目录的文件夹的commonlib中。并且修改classpath环境变量:在classpath的当前值中,再添加3个jar包,即修改完classpath后,其值为:classpath=.;%Java_home%libdt.jar;%Java_home%libtools.jar;%tomcat_home%commonlibmsbase.jar;%tomcat_home%commonlibmsutil.jar;%tomcat_home%commonlibmssqlserver.jar;%tomcat_home%commonlibservlet.jar; /红色部分就是新添加的部分。除此之外,还有一件很重要的事,就是安装SQL Server 2000 SP3补丁。SQL Server 2000 SP3补丁可以直接在网上下载,其文件名为chs_sql2ksp3.exe。下载完后,双击该文件安装SQL Server 2000 SP3补丁。准备好了后,加载纯Java驱动程序:/注意,这里的参数和ODBC桥接器方式不一样。tryClass.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();catch(Exception e)out.println(e);2和指定的数据库建立连接假设网页程序要与SQL Server 数据库服务器管理的数据库jspdb建立连接,而有权访问数据库jspdb的用户的id和密码分别是sa、空,那么建立连接的代码如下:tryString url=”jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=jspdb”;String user=”sa”;String password=”;con=DriverManager.getConnection(url,user,password);catch(SQLException e)out.println(e);下面的例子是采用纯Java数据库驱动程序方式来实现上一个例题的例子。例2使用纯Java数据库驱动方式显示表中的全部记录网页文件名example2.jsp%Connection con;Statement sql;ResultSet rs;tryClass.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver).newInstance();catch(Exception e)out.print(e);out.print(*);out.print();tryString url;url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=jspdb;String user=sa;String password=;con=DriverManager.getConnection(url,user,password);sql=con.createStatement(); rs=sql.executeQuery(SELECT * FROM trade);% 序列号 商品名称 类型供应商价格数量 运行后,效果同例1完全一样。拓展案例18通过本地协议纯Java驱动程序访问SQL Server 2000数据库网页文件名jspSQLServer.jsp 通过本地协议纯Java驱动程序访问SQL Server2000数据库通过本地协议纯Java驱动程序访问SQL Server2000数据库id:商品名称:供应商:类别:单价:数量: 运行后,效果同案例11。上述网页在运行中,如果出现关于用户admin的错误提示。则说明用户admin还没有添加到SQL Server 2000的登录角色中。下面就添加用户并设置其使用jspdb数据库的权限。3添加数据库用户admin添加用户在SQL Server 2000的“企业管理器”中进行,具体见书第187至188页。5.1.8 访问Microsoft Access 数据库本小节是用Mircrosoft Access数据库代替SQL Server 2000数据库实现数据的管理。相应地在JSP网页中应该有哪些改动呢?前面我们知道,可以采用2种方式实现JSP网页同SQL Server 2000数据库的连接:桥接器方式和纯Java驱动程序方式。这里,和Access相连,我们就只采用桥接器数据源的方式,另一种方式需要相应数据库Access的JDBC驱动的类包,就不涉及了。请同学们参看相应书籍。首先,在当前目录c:Tomcat 5.5webappsROOTjsptechchapter5下再创建一个目录jspaccess,然后将网页和Access数据库都存放在这个目录下。步骤如下1使用Microsoft Access程序创建一个数据库jspdb,并在这个jspdb数据库内创建一个表trade,内容同上几小节。2创建数据源jspaccess:控制面板管理工具数据源(ODBC)系统DSN“添加”按钮在“选择您想为其安装数据源的驱动程序(S)”中,即可以选“Driver do Microsoft Access (*.mdb),也可以选”Microsoft Access Driver (*.mdb)”“完成”按钮设置数据源名: jspaccess 点“选择”按钮,选择相连接的数据库c:Tomcat 5.5webappsROOTjsptechchapter5jspaccessjspdb.mdb点“确定”。3修改JSP程序:当数据库改为Access 后,只需要在网页中修改连接数据库的这句代码DriverManager.getConnection(url,user,password)中的参数,将url从String url=jdbc:odbc:jspdb改为:String url=jdbc:odbc:jspaccess也即修改数据源的名字就可以了。其它不需要做任何修改。采用桥接器方式和SQL Server 2000相连接的案例11,改为采用桥接器方式和Access相连接的拓展案例19。如下所示:拓展案例19网页文件名jspaccess.jsp 访问Access数据库访问Access数据库% try/启动异常处理 /加载类sun.jdbc.odbc.JdbcOdbcDriver,并通过newInstance()方法实例化Class.forName(sun.jdbc.odbc.JdbcOdbcDriver).newInstance(); out.println(数据库驱动注册成功!); /设置url为ODBC中的jspdbString url=jdbc:odbc:jspaccess; String user=; String password=; /建立与数据库的连接,将连接赋给connConnection conn= DriverManager.getConnection(url,user,password);out.println(数据库连接成功!);/通过Connection类的createStatement()方法创建Statement实例,/并赋给stmt,以方便操作数据库 Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); /创建SQL查询字符串,以选择数据表trade中的记录 String sql=select * from trade;/通过Statement类的executeQuery()方法创建ResultSet对象rs,以方便对数据表的操作 ResultSet rs=stmt.executeQuery(sql);/移动到数据表的第一条记录 rs.first();/下面的语句将显示记录中各字段的内容%id:商品名称:供应商:类别:单价:数量:数据库访问成功!% rs.close(); /关闭rs stmt.close(); /关闭stmt conn.close(); /关闭conncatch(ClassNotFoundException e)out.println(驱动程序类异常!);out.println(e.getMessage();catch(SQLException e)out.println(数据库连接或SQL查询异常!);out.println(e.getMessage();catch(Exception e)out.println(其他异常!);out.println(e.getMessage();%运行后效果如书195页图5-29。5.1.9 关闭与数据库的连接当程序不再使用与数据库的连接时,应使用Connection对象的close方法关闭与数据库的连接。即如下语句:conn.close(); /这里conn是连接对象(Connection对象)名并且也关闭其他对象,即:rs.close(); /关闭rs stmt.close(); /关闭stmt当然,不关闭这些对象,程序运行也没有问题。就像try.catch.语句一样,这么做是为了避免麻烦,增强程序的健壮性。5.2 访问数据库连接到数据库后,就可以对数据库进行各种操作。可以运行SQL语句来查询数据库表或者添加、修改其内容,或者新建、删除一个表。java.sql包中与数据库操作有关的类和接口主要有以下几个:(1)Connection:连接类(2)Statement:语句对象。由Connection类的createStatement()方法创建。(3)PreparedStatement:预处理语句对象。由Connection类的prepareStatement()方法创建。用来发送带参数的SQL语句或基本SQL语句的语句对象(4)CallableStatement:由Connection类的prepareCall()方法创建。用来调用数据库中的存储过程。(5)ResultSet:结果集对象。用于获取和更新查询的结果。分为两类。一类是不带参数的结果集。一类是带有参数的结果集,参数的选取和含义如书201页表5-7表5-8所示。5.2.1 SQL简介:书196页至200页简单介绍了操作数据库表的语句。主要有:(1)查询记录select:select 字段名1,字段名2, from 表名 where 条件(2)插入一条记录insert:insert into 表名 value (值1,值2,.)(3)删除若干条记录delete:deleter from 表名 where 条件(4)更新update的语句:update 表名 set 字段名1=值1,字段名2=值2,(5)创建一个新表(6)修改表的结构 等5.2.2 Connection类:见书5.2.3 Statement类:见书5.2.4 使用SQL语句对数据库进行操作SQL提供了SELECT、INSERT、DELETE和UPDATE四条语句分别对表进行查询、插入、删除和更新操作。1查询操作对表的查询操作,是使用语句对象Statement对象(一般都是名为sql或stmt)的executeQuery(String select查询语句)方法完成。该方法发送Select语句到数据库,并将执行结果以ResultSet对象形式返回到程序中。查询操作的过程如下面的代码段所示:Connection con;/声明连接对象 Statement sql; /声明语句对象 ResultSet rs;/声明结果集对象 try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/建立JDBCODBC桥接器 catch(ClassNotFoundException e) try con=DriverManager.getConnection(jdbc:odbc:student,zhouping,);/连接数据源 sql=con.createStatement();/创建语句对象 rs=sql.executeQuery(SELECT * FROM students);/执行查询语句,并将查询结果保存在结果集rs中这里,将查询所得的结果通过对结果集rs的操作,显示出来con.close();catch(SQLException e1)out.println(e1);完整的网页代码见例1。2获取结果集的所有字段的值ResultSet接口提供了一组get方法用于获取当前记录的字段的值。使用get方法可以按照字段名称或字段排列顺序号来获取字段的值。但表中的字段为不同类型时,要使用不同的get方法来取出值。比较常用的有:字段为字符型:getString(int),getString(String)字段为整数型:getInt(int),getInt(String)字段为Double型:getDouble(int),getDouble(String)将指定字段的值以Object类型返回:getObject(int),getObject(String)等。注:1. 无论字段是何种属性,总可以使用getString()方法返回字段值的串表示;2当使用getXxx方法查看一行记录时,不可以颠倒字段的顺序,例如:rs.getFloat(5);/错误rs.getFloat(4);/错误下面的代码段输出结果集rs中各条记录的内容。其中的next()方法是得到下一条记录,且如果不是结果集的结束位置时,返回true。while(rs.next()/将记录指针移到下一条记录并判断是否结束out.print(rs.getString(1)+”,”);/输出第一个字段的值out.print(rs.get

温馨提示

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

评论

0/150

提交评论