JSP中使用数据库.ppt

上传人:牧羊曲112 文档编号:6510402 上传时间:2023-11-07 格式:PPT 页数:93 大小:520.50KB
返回 下载 相关 举报
JSP中使用数据库.ppt_第1页
第1页 / 共93页
JSP中使用数据库.ppt_第2页
第2页 / 共93页
JSP中使用数据库.ppt_第3页
第3页 / 共93页
JSP中使用数据库.ppt_第4页
第4页 / 共93页
JSP中使用数据库.ppt_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《JSP中使用数据库.ppt》由会员分享,可在线阅读,更多相关《JSP中使用数据库.ppt(93页珍藏版)》请在三一办公上搜索。

1、第7章 JSP中使用数据库,清华大学出版社,学习目的与要求,理解JDBC应用程序编程接口;掌握使用纯Java驱动程序操作数据库的编程方法;掌握对数据的增加、删除、修改和查询编程技术;查询记录的分页面显示;数据库连接池编程技术。,本章主要内容,7.1 JDBC概述7.2 JDBC应用程序接口简介7.3 利用JDBC访问数据库7.4 数据库操作案例7.5 上机实训7.6 本 章 习 题,7.1 JDBC概述,7.1.1 什么是JDBCJDBC是Java数据库连接(Java Data Base Connectivity)技术的简称,指Java同许多数据库之间连接的一种标准。JDBC为数据库应用开发人

2、员、数据库前台工具开发人员提供了一种标准的JavaAPI,使开发人员可以用纯Java语言编写完整的数据库应用程序。简单地说,JDBC能够完成下列三件事:与一个数据库建立连接(connection)。向数据库发送SQL语句(statement)。处理数据库返回的结果(resultset)。,7.1 JDBC概述,7.1.2 JDBC的构成1.JDBC API:定义了标准接口,无论编写Mysql还是Oracle等数据库程序,这些接口是一致的。2.JDBC数据库驱动程序,7.2 JDBC应用程序接口简介,7.2.1 DrvierManager类提供管理一组JDBC驱动程序所需要的基本服务,可以跟踪可

3、用的驱动程序,并在数据库和相应的驱动程序之间建立连接。该类的常用方法有:getConnection和forName方法。public static Connection getConnection(String url,String user,String password)public static Class forName(String className),7.2 JDBC应用程序接口简介,DrvierManager类的使用法:(1)加载驱动例如:Class.forName(com.mysql.jdbc.Driver);(2)与数据库建立连接DriverManager.getConne

4、ction(String url,String user,String password);,7.2 JDBC应用程序接口简介,对getConnection函数中的参数解释:url参数的命名方法:url由3部分组成,各部分间用冒号分隔,如下所示:jdbc:其中:jdbc协议名称。在JDBC URL中的协议总是jdbc。驱动程序名或数据库连接机制的名称。如“odbc”,它是用于指定ODBC风格的数据库资源名称的URL而保留的。一种标识数据库的方法。子名称可以依不同的子协议而变化。它还可以有子名称的子名称(含有驱动程序编程人员所选的任何内部语法)。使用子名称的目的是为定位数据库提供足够的信息。,7

5、.2 JDBC应用程序接口简介,7.2.2 Connection接口Connection接口是java.sql包中最重要的接口。Connection对象代表与数据库的连接。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。数据库连接一旦建立,就可用来向它所涉及的数据库发送SQL语句。Connection的作用是创建向数据库发送SQL语句的三个接口。这三个接口分别是:Statement接口PreparedStatement接口CallableStatement接口。,7.2 JDBC应用程序接口简介,7.2.2 Connection接口Connection接口提供了多个同名但

6、是参数不同的方法创建以上的三个接口。例如:public Statement createStatement();public Statement createStatement(int resultSetType,int resultSetConcurrency);其中:参数resultSetType指返回记录集的类型resultSetConcurrency指发送的SQL语句的权限,7.2 JDBC应用程序接口简介,7.2.2 Connection接口常用的一些方法:boolean isClosed():用于判断Connection对象是否已经被关闭;void commit():用于提交SQL

7、语句,确认从上一次提交以来所进行的修改;void close():断开连接,释放资源;void rollback():取消SQL语句,取消当前事务中进行的修改。DatabaseMetaData getMetaData():获取一个DatabaseMetaData对象。,7.2 JDBC应用程序接口简介,7.2.3 Statement接口Statement接口对象创建完毕后,主要使用以下方法:public ResultSet executeQuery(String sql):用于执行产生单个结果集的语句,如select。public int executeUpdate(String sql):用

8、于执行insert、update或delete语句以及SQL DLL(数据定义)语句。当执行insert、update或delete语句时将返回一个整数,用于表示受影响的行数,返回结果为0时表示操作失败;当执行SQL DLL语句,如create table时,由于它不操作行,返回值将总为0。,7.2 JDBC应用程序接口简介,7.2.3 Statement接口public boolean execute(String sql):用于执行返回多个结果集、多个更新计数或二者结合的SQL语句。public int executeBatch():用于执行几个SQL语句。Statement接口使用add

9、Batch(String sql)方法将几个SQL语句添加到一个语句块中,然后一同提交给数据库服务器,同时执行。当执行多个SQL insert语句时效率将很高,因为一次提交比多次提交要节省很多系统资源。void close():释放Satement对象的数据库和JDBC资源。,7.2 JDBC应用程序接口简介,7.2.3 Statement接口PreparedStatement接口对象主要使用以下方法:public ResultSet executeQuery(String sql):使用Select命名对数据库进行查询。public int executeUpdate(String sql)

10、:用于执行insert、update或delete语句对数据库进行新增、删除和修改操作。void setXXX(int parameterIndex,XXX x):设定XXX数据类型值给PreparedStatement 类对象的IN参数。,7.2 JDBC应用程序接口简介,7.2.3 Statement接口CallableStatement接口主要用于执行存储过程,其主要方法同Statement。存储过程有两种参数,IN参数和OUT参数。CallableStatement接口继承了PerpareedStatement接口的setXXX方法对IN参数赋值。在CallableStatement接

11、口中使用OUT参数,要做两件事情,一是对OUT参数进行类型注册,二是获取OUT参数的值。CallableStatement提供了多种方法进行类型注册,下面是常用的两种:registerOutParameter(String parameterStringName,int sqlType);registerOutParameter(String parameterStringName,int sqlType,int scale);,7.2 JDBC应用程序接口简介,7.2.4 数据结果集ResultSet接口ResultSet接口用于获取执行SQL语句(或数据库存储过程)返回的结果。它的实例对象

12、是符合SQL语句条件的所有行。常用的方法有:public boolean next():用于数据库游标移动到结果集的下一行,使之成为当前行。如果当前行为最后一行,返回值为false;否则,返回true。在定位到结果集中的某行后,就可以读取数据。对于不同数据类型,要使用不同的读取方法getXXX()。JDBC提供了两种形式:,7.2 JDBC应用程序接口简介,7.2.4 数据结果集ResultSet接口public XXX getXXX(String columnName):XXX代表任意的数据类型,参数columnName代表列名。public XXX getXXX(int columnInd

13、ex):XXX代表任意的数据类型,参数columnIndex代表列号。ResultSetMetaData getMetaData():获取结果集的列编号、类型和属性下面是ResultSet接口的示例:,private Statement stmt=null;private ResultSet rs=null;private PreparedStatement prpSql=null;);Connection conn=:端口号/数据库名称,用户名,密码);stmt=conn.createStatement();rs=stmt.executeUpdate(select*from database

14、);while(rs.next()rs.getString(1);rs.close();stmt.close();conn.close();,7.2 JDBC应用程序接口简介,7.2.5 数据库元数据-DatabaseMetaData和ResultSetMetaDataDatabaseMetaData接口可以从数据库管理系统中获得数据库的信息,例如数据库所有的表名、存储过程名等信息。这个类提供了许多方法来取得这些信息,常用的方法如下:String getDatabaseProductName():获得数据库的名称。ResultSet getCooumns(String databasename

15、,String dboname,String tablename,String columnname):获得表字段信息,以列的方式存储在一个ResultSet对象中。,7.2 JDBC应用程序接口简介,7.2.5 数据库元数据-DatabaseMetaData和ResultSetMetaDataResultSetMetaData接口用来获取数据库表的结构。通过它提供的一些常用方法,可以获得ResultSet对象中的类型和属性信息的对象。常用方法如下:int getColumnType(int column):检索指定列的SQL类型;String getTableName(int column)

16、:获取指定列的名称;,7.3 利用JDBC访问数据库,所有的利用JDBC访问数据库的程序都具有以下的流程:加载JDBC驱动程序建立和数据库的连接执行SQL语句存放处理结果与数据库断开连接,7.3 利用JDBC访问数据库,7.3.1 通过JDBC-ODBC桥连接来访问数据库 可以使JDBC有能力访问几乎所有类型的数据库。下面通过一个例子介绍:1、首先建立一个access数据库,数据库名称为:book,保存数据库文件。,7.3 利用JDBC访问数据库,7.3.1 通过JDBC-ODBC桥连接来访问数据库2、配置数据源首先要配置ODBC数据源。选择数据源(ODBC)(Win 2000在管理工具中;W

17、in XP在控制面板中)先看图片,在现场演示。,在管理工具中,选择“数据源”在对话框中选择用户dsn,添加,在对话框中选择access driver(*。Mdb)单击“完成”。,在数据源名称输入“book”。选择数据库为book。,选择图书管理数据库.mdb,权限默认,在登录用户名输入对应的用户名和密码。,7.3 利用JDBC访问数据库,7.3.1 通过JDBC-ODBC桥连接来访问数据库3 编写相应的程序(1)加载数据库的驱动程序(2)建立连接(3)向数据库发送SQL语句(4)处理查询结果(5)关闭数据库连接,7.3 利用JDBC访问数据库,7.3.1 通过JDBC-ODBC桥连接来访问数据

18、库【例7.1】利用JDBC-ODBC桥连接数据库,执行SQL语句,并在数据库中插入一条记录。,ch7_1.jsp文件内容如下:%Connection conn;Statement stmt=null;ResultSet rs;int n;try);catch(ClassNotFoundException e)out.print(e);,try/和数据库建立连接conn=DriverManager.getConnection(jdbc:odbc:book,);stmt=conn.createStatement();/创建Statement对象,用于执行SQL语句 n=stmt.executeUp

19、date(insert into book values(TP003,ASP.NET动态网站开发教程,李英俊,清华大学出版社,35);/向表中插入一条记录 if(n0)out.println(添加成功);else out.println(添加失败);rs=stmt.executeQuery(select*from book);,out.print();out.print();out.print(+书号);out.print(+书名);out.print(+作者);out.print(+出版社);out.print(+单价);out.print();,while(rs.next()out.pri

20、nt();out.print(+rs.getString(1)+);out.print(+rs.getString(2)+);out.print(+rs.getString(3)+);out.print(+rs.getString(publish)+);out.print(+rs.getFloat(price)+);out.print();out.print();stmt.close();/关闭数据库 conn.close();,catch(Exception e)out.println(e.toString();%,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连

21、接数据库1.安装mysql数据库从网上下载,将mysql安装到了E:mysql目录中。2.启动mysqlcd e:mysqlbinmysqld-nt,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库3.启动mysql监视器用户再启动一个MS-DOS窗口,切换到E:MYSQLBIN目录中,执行如下命令:e:cd mysql cd bin mysql-u root,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库,7.3 利用JDBC访问数据

22、库,7.3.2 利用本地协议纯Java驱动程序连接数据库4.创建数据库启动mysql监视器后,可以在提示符下输入sql语句来创建数据库和表,sql语句结束必须使用“;”符号。在编辑sql语句的过程中可以使用/c终止当前sql语句的编辑。在mysql监视器提示符下,输入创建图书管理数据库booklib的SQL语句并执行,,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库5.创建数据库中的表在booklib数据库中创建book表的SQL语句为:CREATE TABLE book

23、(bid char(20)NOT NULL,name char(20)default NULL,author char(10)default NULL,publish varchar(50)default NULL,price float default NULL,PRIMARY KEY(bid)ENGINE=InnoDB DEFAULT CHARSET=utf8;,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库5.创建数据库中的表,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库6.编写相应的程序-连接mysql数据库

24、try);try/和数据库建立连接 conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/booklib,root,);conn.close();catch(Exception e)out.println(e.toString();,7.3 利用JDBC访问数据库,7.3.2 利用本地协议纯Java驱动程序连接数据库【例7.2】利用纯Java驱动程序连接mysql数据库,查询book表中的所有记录,连接不同的数据库,除Class.forName()中的驱动程序类及url的书写方式不同之外,其他所有部分均相同。,7.3 利用JDB

25、C访问数据库,7.3.3 配置和连接不同的数据库1.连接Oracle数据库安装完Oracle后,找到文件classes12.zip(可以在Oracle安装目录搜索得到),将该文件复制到Java JDK的子目录/jre/lib/ext目录中,并其更名为classes.jre或cleasses.jar。);DriverManager.getConnection(jdbc:oracle:thinhost:端口号:数据库名,用户名,密码);,7.3 利用JDBC访问数据库,7.3.3 配置和连接不同的数据库2.连接Sql Server数据库下载驱动安装文件。找到sqljdbc.jar文件,将其复制到T

26、omcat所使用的JDK的jrelibext目录中。连接方法:);DriverManager.getConnection(jdbc:sqlserver:/172.0.0.1:1443;DatabaseName=数据库名,“用户名”,“密码”);,提示:如果应用程序和要连接的Sql Server2000服务器在不同的计算机上,可以使用Sql Server 2000服务器的ip地址,例如。如果应用程序无法和Sql Server2000连接,可能需要更新Sql Server 2000服务器。用户可以从微软网站下载补丁sqlsp4.rar,安装该补丁即可。,7.3 利用JDBC访问数据库,7.4 数据

27、库操作案例,7.4.1 查询数据1.顺序查询数据ResultSet rs=stmt.executeQuery(select bid,name,author,publish,price from book);对于结果集rs的列数为5列,第一列对用bid,第二列对应name,第三列对应author,第四列对应publish,第五列对应price;而每一次rs只能看到一行,要在看到下一行,必须使用next()方法移动当前行。ResultSet对象使用getXXX()方法获得当前行字段的值。下面是一个实例:,QueryBean.java代码,ch7_3.jsp文件内容:,7.4 数据库操作案例,2.随

28、机查询如果需要在结果集中前后移动或随机显示某一条记录,这时就必须得到一个可以滚动的结果集。得到滚动结果集的方法如下:Statement stmt=conn.createStatement(int type,int concurrency);ResultSet rs=stmt.executeQuery(sqlstr);其中type的取值决定结果集的滚动方式,可以取下列值:,7.4 数据库操作案例,2.随机查询ResultSet.TYPE_FORWORD_ONLY:结果集的游标只能向下移动。ResultSet.TYPE_SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库的数据

29、变化时,当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE:结果集的游标可以上下移动,当数据库的数据变化时,当前结果集同步变化。,7.4 数据库操作案例,2.随机查询滚动结果集ResultSet对象可以使用的方法如下:public boolean previous():将游标向上移动,当移动到结果集第一行之前返回false。public void beforeFirst():将游标移到结果集第一行之前。public void afterLast():将游标移到结果集最后一行之后。public void first():将游标移到结果集的第一行。public void

30、 last():将游标移到结果集的最后一行。public boolean isAfterLast():判断游标是否在结果集的最后一行之后。,7.4 数据库操作案例,2.随机查询滚动结果集ResultSet对象可以使用的方法如下:public boolean isBeforeFirst():判断游标是否在结果集第一行之前。public boolean isFirst():判断游标是否在结果集第一行。public boolean isLast():判断游标是否在结果集的最后一行。public int getRow():得到当前游标所在的行,行号从1开始,如果结果集没有行,则返回0。public b

31、oolean absolute(int row):将游标移到到row所指定的行,row取负值则倒数,如-1,则移动到最后一行。,7.4 数据库操作案例,2.随机查询【例7.4】随机查询示例。,RandomQuerybean.java,ch7_3.jsp文件内容:,7.4 数据库操作案例,3.条件查询在顺序查询和随机查询中得到的是表中的全部记录。如果要得到表中满足条件的记录,就要采用条件查询。条件查询是由客户端提供查询条件,即查询的参数,再由这些参数构造SQL语句,执行该语句并得到筛选结果的查询。下面的例子根据用户选择的字段和输入的关键字查询图书信息,如果没有输入关键字则显示所有图书的信息。,7

32、.4 数据库操作案例,3.条件查询【例7.5】条件查询图书信息,keyQueryBean.java,ch7_5.jsp文件内容:,7.4 数据库操作案例,7.4.2 更新查询Statement对象提供了int executeUpdate(String sqlStatement)方法,用于实现对数据库中数据的添加、删除和更新操作。sqlStatement参数是由insert、delete和update等关键字构成的Sql语句。函数返回值为查询所影响的行数,失败返回0。例如添加记录的sql语句:String sqlStatement=insert book values(tp1004,高数,杨,清

33、华出版社,35);,7.4 数据库操作案例,7.4.2 更新查询stmt.executeUpdate(sqlStatement);例如更新记录的sql语句:String sqlStatement=update book set name=新值 where bid=tp1001;stmt.executeUpdate(sqlStatement);例如删除记录的sql语句:String sqlStatement=delete from book where bid=tp1001;stmt.executeUpdate(sqlStatement);,7.4 数据库操作案例,7.4.2 更新查询1、添加记

34、录【例7.6】向mysql数据库中的表追加记录,addBean.java,ch7_6.jsp文件内容:,7.4 数据库操作案例,7.4.2 更新查询2、删除记录【例7.7】删除book表中的记录。,listBean.java,deleteBean.java,ch7_7.jsp文件内容:,7.4 数据库操作案例,7.4.2 更新查询3.修改记录【例7.8】修改记录,页面如图效果如图所示:,创建存储过程的sql代码如下:,use booklibdelimiter$create procedure update_book_p(in p_bid char(20),in p_name char(20),

35、in p_author char(10),in p_publish varchar(50),in p_price float)reads sql databegin update book set name=p_name,author=p_author,publish=p_publish,price=p_price where bid=p_bid;end$delimiter;,7.4 数据库操作案例,showBean.java,三个页面代码:,第三个页面上的Javabean代码:,7.4 数据库操作案例,7.4.3 分页查询分页显示程序中可以使用CachedRowSetImpl类,Cached

36、RowSetImpl对象可以保存ResultSet对象中的数据,它不依赖与Connection对象,并且继承了ResultSet的所有方法。CachedRowSetImpl类在包中。使用CachedRowSetImpl对象的代码如下:,7.4 数据库操作案例,7.4.3 分页查询import.*;ResultSet rs=stmt.executeQuery(select*from book);CachedRowSetImpl rowSet=new CachedRowSetImpl();rowSet.populate(rs);while(rowSet.next()rowSet.getString

37、(1);,7.4 数据库操作案例,7.4.3 分页查询【例7.9】数据库记录的分页显示,showbypageBean.java,ch7_3.jsp文件内容:,7.4 数据库操作案例,7.4.4 使用连接池所谓数据库连接池就是为数据库连接建立一个“存储池”。类似“蓄水池”。1.在tomcat6.0上配置连接池用任意一种文本编辑器打开tomcat6.0安装目录下conf子目录中的server.xml文件,在文档内容中的之前加入如下配置:,7.4 数据库操作案例,7.4.4 使用连接池,7.4 数据库操作案例,7.4.4 使用连接池name项是JNDI的名称定义,程序通过JNDI才能找到此对象,这里

38、取名为“jdbc/dataBook”;auth项即连接池管理权限,这里取值为Container,声明为容器管理,此连接池为容器管理池,对应ch7服务目录。type项即对象类型,这里取值为,声明为数据库连接池。driverClassName项为数据库驱动程序。url项为数据库连接地址。username为连接用户名。password为连接用户密码。maxActive为最大连接数,maxIdle为最小连接数。,7.4 数据库操作案例,7.4.4 使用连接池示例【例7.10】使用连接池操作数据库。,ch7_10.jsp文件内容:,7.5 上机实训,实训目的理解JDBC编程接口。掌握利用JDBC访问数据

39、库的方法。掌握对表中数据的增、删、改、查编程技术。掌握连接池的使用技术。掌握查询结果的分页显示技术。,7.5 上机实训,实训内容实训1 编写一个简单的图书管理系统。要求:(1)建立一个图书管理数据库booklib,库中有一个book表。(2)完成一个管理系统主界面,主界面功能包括添加图书、修改图书、删除图书和查询图书等功能的链接。(3)参照本章示例,完成图书管理系统各链接的功能。,7.6 本 章 习 题,思考题(1)什么是JDBC编程接口?(2)什么是数据库连接池?(3)使用纯Java驱动操作mysql数据库的步骤?(3)加载Sql Server 2000纯Java驱动程序的代码是什么?(4)使用预处理语句和存储过程有什么好处?(5)使用CachedRowSetImpl类有什么好处?(6)如何使用滚动的结果集?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号