北大青鸟JSP教程大全(中).ppt_第1页
北大青鸟JSP教程大全(中).ppt_第2页
北大青鸟JSP教程大全(中).ppt_第3页
北大青鸟JSP教程大全(中).ppt_第4页
北大青鸟JSP教程大全(中).ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、JDBC程序的工作模板,try Class.forName(JDBC驱动类); catch (ClassNotFoundException e) System.out.println(无法找到驱动类); try Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM Table1); while (rs.next() int x = rs.

2、getInt(a); String s = rs.getString(b); float f = rs.getFloat(c); con.close(); catch (SQLException e) e.printStackTrace(); ,获得数据库连接,发送Sql语句,处理结果,注册JDBC驱动,JDBC URL用来标识数据库,必须处理的异常,释放资源,必须处理的异常,JDBC驱动 5-1,JDBC驱动由数据库厂商提供 在个人开发与测试中,可以使用JDBC-ODBC桥连方式 在生产型开发中,推荐使用纯Java驱动方式,DB Server,DB Server,JDBC API,JDBC

3、Driver Manager,纯Java 驱动,JDBCODBC桥,Java 应用程序,ODBC,JDBC驱动 5-2,桥连 将对JDBC API的调用,转换为对另一组数据库连接API的调用 优点:可以访问所有ODBC可以访问的数据库 缺点:执行效率低、功能不够强大,JDBC-ODBC桥,Java 应用程序,JDBC API,ODBC API,ODBC层,DB Server,JDBC驱动 5-3,使用JDBC-ODBC进行桥连 1、在控制面板ODBC数据源系统DSN中配置数据源 2、编程,通过桥连方式与数据库建立连接,-语法- Class.forName(sun.jdbc.odbc.JdbcO

4、dbcDriver); Connection con =DriverManager.getConnection(jdbc:odbc:news,sa,sa);,JDBC-ODBC桥驱动类的完全限定类名,数据源名称,演示:配置ODBC数据源,JDBC驱动 5-4,纯Java驱动 由JDBC驱动直接访问数据库 优点:100% Java,快又可跨平台 缺点:访问不同的数据库需要下载专用的JDBC驱动,JDBC 驱动,Java 应用程序,JDBC API,DB Server,JDBC驱动 5-5,使用纯Java驱动方式进行直连 1、下载数据库厂商提供的驱动程序包 2、将驱动程序包引入工程中 3、编程,通

5、过纯Java驱动方式与数据库建立连接,-语法- String URL=jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=news; Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); Connection con = DriverManager.getConnection(URL,sa,sa);,sql server数据库驱动类的完全限定类名,演示:在工程中引入JDBC驱动程序包,数据库名称,小结 1,JDBC桥连与纯Java驱动两种方式的优缺点分别是什么? JDB

6、C URL的作用是什么?,创建数据表:FirstLevelTitle,JDBC应用,要求对新闻标题进行管理: 1、新闻标题存储在Sql Server 2000中 2、通过JDBC对新闻标题进行增、删、改、查操作,操作步骤,使用Statement插入数据,使用PreparedStatement增、删、改、查数据,1,2,使用Statement插入数据 2-1,使用桥连方式向FirstLevelTitle表中插入一条记录,代码片断 public static void main(String args) Connection con = null; Statement statement = nu

7、ll; try String strSql = insert into FirstLevelTitle values(1,军事,网管,getdate(); try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException e) System.out.println(无法找到驱动类); con = DriverManager.getConnection(jdbc:odbc:news,sa,sa); statement = con.createStatement(); statement.executeUp

8、date(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally closeStatement(statement); closeConnection(con); ,建立连接,执行sql语句,数据库连接使用完毕,及时释放,载入JDBC-ODBC桥驱动类,异常处理,异常处理,完整代码实现,使用Statement插入数据 2-2,使用纯Java驱动方式向FirstLevelTitle表中 插入一条记录,代码片断 public static void main(String args) Connection con = n

9、ull; Statement statement = null; try String strSql = insert into FirstLevelTitle values(1,军事,网管,getdate(); try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); catch (ClassNotFoundException e) System.out.println(无法找到驱动类); con = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localh

10、ost:1433; +DatabaseName=news,sa,sa); statement = con.createStatement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally /释放连接 ,载入sql server数据库驱动类,建立连接,执行sql语句,完整代码实现,小结 2,在使用纯Java驱动方式进行数据库连接时,如果程序在运行时抛出异常: java.sql.SQLException: No suitable driver found for

11、 jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=news 那么出错的原因是什么?如何解决? 请单独建立一个类ConnectionManager,专门负责建立数据库连接、以及关闭连接,并思考这样做带来的好处是什么,找不到合适的驱动类,原因:没有把数据库驱动包引入工程,好处在于:既便于管理、又可以提高代码的复用性,完整代码实现,PreparedStatement,PreparedStatement接口 (预编译的 SQL 语句),Statement 接口,当SQL语句将运行多次时,尽量使用PreparedStatement,以便提高运行

12、效率,PreparedStatement 接口继承 Statement接口 PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率,使用PreparedStatement插入数据,public class NewsFirstTitleDB2 public static void main(String args) Connection con = null; PreparedStatement pStatement = null; try SimpleDateFormat hmFromat = new SimpleDateFormat(yyyy-MM-dd

13、hh:mm:ss); con = ConnectionManager.getConnection(); String strSql = insert into FirstLevelTitle values(?,?,?,?); pStatement = con.prepareStatement(strSql); pStatement.setInt(1, 1); pStatement.setString(2, 军事); pStatement.setString(3, 管理员); pStatement.setString(4, hmFromat.format(new Date(); pStateme

14、nt.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,参数化的查询语句,设置每个?参数的值,列号从1开始,执行sql语句,使用PreparedStatement删除数据,public class NewsFirstTitleDB3 public static void main(String args) Connectio

15、n con = null; PreparedStatement pStatement = null; try con = ConnectionManager.getConnection(); String strSql = delete from FirstLevelTitle where TitleName = ?; pStatement = con.prepareStatement(strSql); pStatement.setString(1, 军事); int row = pStatement.executeUpdate(); System.out.println(“成功删除了+row

16、+行数据!); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,返回删除记录的行数,使用PreparedStatement更新数据,public class NewsFirstTitleDB4 public static void main(String args) Connection con = null; PreparedStatement pSta

17、tement = null; try con = ConnectionManager.getConnection(); String strSql = update FirstLevelTitle set Creator = ? where Id = ?; pStatement = con.prepareStatement(strSql); pStatement.setString(1, 编辑); pStatement.setInt(2, 1); int row = pStatement.executeUpdate(); System.out.println(成功更新了+row+行数据!);

18、catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,返回更新记录的行数,小结 3,使用PreparedStatement语句执行如下操作: 删除表FirstLevelTitle中所有Id小于10的记录,并在控制台输出删除记录的行数,完整代码实现,使用PreparedStatement查询数据 2-1,public class NewsFirstTitleDB5

19、 public static void main(String args) int id = 0; Connection con = null; PreparedStatement pstmt = null; ResultSet resSet = null; try con = ConnectionManager.getConnection(); String sqlStr = select max(id) from FirstLevelTitle ; pstmt = con.prepareStatement(sqlStr); resSet = pstmt.executeQuery(); if

20、 (resSet.next() id = resSet.getInt(1); catch (Exception e) e.printStackTrace(); finally ConnectionManager.closeResultSet(resSet); ConnectionManager.closeStatement(pstmt); ConnectionManager.closeConnection(con); System.out.println(新的一级新闻标题的Id为: + (id + 1); ,查询新闻一级标题的Id的最大值,关闭结果集、语句、以及连接,对新闻一级标题Id的最大值

21、加一,作为新的一级标题的Id,获取数据,列号从1开始,返回结果集,从数据库中取出所有的新闻一级标题,代码片断 public static List getAllFirstLevelTitleList() /省略部分变量声明语句 ArrayList list = new ArrayList(); try dbConnection = ConnectionManager.getConnection(); String strSql = select * from FirstLevelTitle order by CreateTime desc; pStatement = dbConnection.

22、prepareStatement(strSql); res = pStatement.executeQuery(); while (res.next() int id = res.getInt(id); String title = res.getString(TitleName); String creator = res.getString(Creator); Date time = res.getDate (“CreateTime”); FirstLevelTitle fTitle = new FirstLevelTitle(id, title,creator, time); list.

23、add(fTitle); /省略catch、finally子句 return list; ,使用PreparedStatement查询数据 2-2,查询新闻一级标题,创建标题对象,并添加入ArrayList中,返回结果集,完整代码实现,总结,使用PreparedStatement语句执行如下操作: 取出表FirstLevelTitle中Id的最大值 向表FirstLevelTitle中插入一行新记录,其中Id值为原Id最大值加一,完整代码实现,Thank you,JSP简介,第四章,回顾,JDBC的英文全称是什么? JDBC的主要作用是什么 ? PreparedStatement 与 Stat

24、ement相比,具有什么优势?,预习检查,为什么第一次请求JSP页面时,响应速度比较慢? JSP文件中,有几种注释方法?格式是什么?,本章任务,为新闻发布系统创建JSP页面 能够在Eclipse中部署运行该新闻发布系统,掌握JSP的定义、作用、以及页面组成 掌握如何创建JSP页面 掌握JSP页面的执行过程,本章目标,为什么需要JSP 2-1,为什么需要基于B/S技术的动态网页? B/S技术的特点是什么?,使用动态网页,可以动态输出网页内容、同用户进行交互、对网页内容进行在线更新,应用 服务器,IE,IE,解释执行 HTML文件,从服务器端检索到的信息,返回响应,客户端的请求信息,发送请求,运行

25、JSP等服务器端脚本程序,1,用户输入,2,3,4,数据库 服务器,为什么需要JSP 2-2,如何在浏览器上动态输出当前日期?, 输出当前日期 你好,ACCP! 今天是 ,显然,无法通过静态HTML完成这个效果,试一试JSP,看看是否可行,运行结果,什么是JSP,JSP(Java Server Pages)是指: 在HTML中嵌入Java脚本语言 由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本语言命令 然后将生成的整个页面信息返回给客户端,JSP页面,数据库 服务器,应用 服务器,客户端,Java脚本语言,1,2,3,4,JSP 页面组成 4-1,JSP 页面的元素包括:,静态内容,

26、指 令,表达式,小脚本,HTML静态文本,以“ ” 结束。 比如:,声 明,标准动作,以“ ” 结束 比如:,注释, ,JSP 页面组成 4-2, 输出当前日期 你好,ACCP!今天是 ,指令,静态内容,小脚本,表达式,注释,JSP 页面组成 4-3,在浏览器上观看运行结果,查看网页源文件,可以通过源代码查看到HTML注释的内容,所有注释内容都不可见,JSP 页面组成 4-4,合理、详细的注释有利于代码后期的维护和阅读 在JSP文件的编写过程中,共有三种注释方法: HTML的注释方法: JSP注释标记: 在JSP脚本中使用注释: ,缺点:不安全,加大网络传输负担,小结 1,请编写一个JSP页面

27、exercise1.jsp,要求: 至少包含三种注释,完整代码实现,创建新闻发布系统的JSP页面 5-1,回忆第一章内容,请说明开发JSP动态网站的几个步骤,创建Web项目,开发步骤,设计Web 项目的目录结构,编写代码(创建 JSP),部署、运行,本章将从这里开始,带领大家创建新闻发布系统的JSP页面,创建新闻发布系统的JSP页面 5-2,设计Web项目的目录结构: 创建目录ch04:存放JSP页面 创建目录CSS:存放样式表文件 创建目录images:存放图片,创建新闻发布系统的JSP页面 5-3,使用JSP模板向导创建JSP页面,共有三步:,1,2,3,右键点击“WebRoot”下的“c

28、h04”,从右键菜单中选择:新建其他,在新弹出的窗口中,选择“Web”下的“JSP”,点击“下一步”,在下一个新弹出的窗口中,输入文件名index.jsp,点击“完成”,演示:使用JSP模板向导创建JSP页面,创建新闻发布系统的JSP页面 5-4,手工创建JSP页面,共有两步:,1,2,右键点击“WebRoot”下的“ch04”,选择:新建文件,在新弹出的窗口中,输入文件名index.jsp,点击“完成”,演示:手工创建JSP页面,创建新闻发布系统的JSP页面 5-5,采用你认为最方便的方式,把静态新闻发布系统的所有页面转换为JSP页面,并部署运行,演示:页面转换、并部署运行,生活中的欢迎页面

29、,通常情况下,访问某个网站时,我们只需要知道网站的域名就可以了。 比如: ,现在看到的就是新浪的首页面,如何设置欢迎页面,欢迎页面,就是web应用的默认访问页面 在配置文件web.xml中设置欢迎页面, index.jsp ,假定在web应用(news)下存在一个index.jsp页面, 输入http:/localhost:8080/news地址时,web容器会默认调用index.jsp页面,JSP 执行过程 2-1,3,执行,2,翻译,编译,1,请求,响应,Web容器处理JSP文件请求需要经过3个阶段: 翻译阶段:JSP文件会被Web容器中的JSP引擎转换成Java源码 编译阶段:Java源

30、码会被编译成可执行的字节码 执行阶段:容器接受了客户端的请求后,执行编译成字节码的JSP文件;处理完请求后,容器把生成的页面反馈给客户端进行显示,应用服务器,客户端,JSP文件,.java,.class,JSP 执行过程 2-2,执行,第二次请求,响应,第一次请求之后,Web容器可以重用已经编译好的字节码文件,应用服务器,客户端,.class,注意:如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译,演示:JSP页面修改前后的响应速度,JSP运行环境,Web容器(如:Tomcat)提供JSP引擎,负责JSP文件的执行,提供JSP的运行时环境 在Eclipse中部署Web应用

31、,等同于在Web容器中部署Web应用,与Eclipse中Web应用的目录结构一模一样,小结 2,为什么JSP页面在第一次请求时会比较慢,而之后对同样的JSP页面的请求会非常快?,总结, 欢迎登录新闻发布系统 ,在运行welcome.jsp时,会出现什么现象?如何改正?,出现中文乱码, 把字符集改为:GBK,WEB-INF文件夹中的内容无法对外发布, 把images文件夹拖至WebRoot文件夹下,Thank you,JSP指令和脚本元素,第五章,回顾,为什么第一次请求JSP页面时,响应速度比较慢? JSP文件中,有几种注释方法?格式是什么?,预习检查,列举一些page指令的常用属性,并说明它们

32、的作用 在JSP文件中,有几种输出数值的方法(如:输出10与30的乘积)?分别怎样表示?,本章任务,升级新闻发布系统 显示存储在数据库中的新闻一级标题 页面显示效果:,掌握page指令的常用属性 掌握JSP 脚本元素的用法 小脚本 表达式 方法声明,本章目标,为什么需要page指令,在Java文件中,通过两种方式引入其它包中的类: 使用import关键字(优点:一次引入,处处使用) 使用完全限定的类名(即必须加上包名),在Java文件中,如何引入其它包中的类?,在JSP文件中,同样可以使用import关键字引入Java类文件,一旦引入,整个JSP文件都可用。 此时,需要使用到page指令。,p

33、age指令示例, 输出当前日期 你好,ACCP! 今天是 ,已经通过page指令的import属性引入这些类文件了,什么是page指令,page指令 通过设置内部的多个属性来定义整个页面的属性 语法: page指令常用属性,小结 1,编写一个JSP,要求: 向一个ArrayList对象中添加10个字符串 使用for循环进行添加,存储内容依次是 “第1个字符串” 、”第10个字符串“ 最后在页面上输出:添加完毕 使用page指令来引入ArrayList类 JSP页面不能出现中文乱码,完整代码实现,JSP 脚本元素,JSP 脚本元素,小脚本,表达式,声明,JSP 脚本元素是用来嵌入Java代码的,主要用来实现页面的动态请求 JSP 脚本元素包括:,什么是小脚本,JSP 小脚本 就是在JSP页面里嵌入一段Java代码 语法: , 输出当前日期 你好,ACCP! 今天是 ,out.print负责在页面上进行输出,在JSP中嵌入的Java代码,小结 2,使用两个一维数组分别存储学生姓名、学生成绩 在页面中每隔一行输出一名学生的姓名与成绩 运行结果示意图

温馨提示

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

评论

0/150

提交评论