




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 网络与数据库编程,本章重点 支持JAVA程序访问网上资源的类及其方法 网络编程应用 支持Java程序与数据库连接的类及其方法 支持Java程序的数据表查询、数据记录修改和插入的类及其方法 数据库编程应用 更多优质自考资料尽在百度贴吧自考乐园俱乐部(/club/5346389)欢迎加入.欢迎交流.止不住的惊喜等着你.,2,1、 网络基础知识,计算机网络形式多样,内容繁杂。网络上的计算机要互相通信,必须遵循一定的协议。目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议 网络编程是指利用不同层次的通信协议提供的接口实现网络进程通信的编程 网络编程中有两个主要的问题: (1)如何准确的定位网络上一台或多台主机, (2)找到主机后如何可靠高效的进行数据传输。 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。,3,1、网络基础知识,网络编程模型:客户机/服务器(C/S)结构 即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。 网络进程:就是网点机(连入网络的计算机)上运行的程序。 网络进程在通信协议中用端口(port)标识,而它驻留的网点机则用其IP地址或域名来标识。 通信协议指网络进程之间的通信必须遵循预定的规则。 TCP/IP是一组在Internet网络上的不同计算机之间进行通信的协议的总称,它由应用层的HTTP、FTP、SMTP和传输层的TCP及网络层的IP等一系列协议组成。,4,TCP(传输控制协议)是面向连接的、可靠的点对点的传输协议。 UDP(用户数据报协议)是无连接的不可可靠的传输协议。 IP是网络层协议,实现按IP地址的网络路由的功能。 IP地址:标识计算机等网络设备的网络地址,由四个8位的二进制数组成,中间以小数点分隔。如:, 0 主机名(hostname):网络地址的助记名,按照域名进行分级管理。如 服务类型(service):网络的各种服务。 如:web服务, ftp服务, smtp服务, Telnet服务等,1、网络基础知识,5,1、网络基础知识-TCP,通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。,6,1、网络基础知识-UDP,UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。,7,1、网络基础知识-套接字,“套接字”或者“插座”(Socket)也是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。 针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。线缆的每一端都插入一个“套接字”或者“插座”里。 进程之间要实现通信首先要建立各自的套接字。 在Java中,我们创建一个套接字,用它建立与其他机器的连接。,8,1、网络基础知识-端口号,指TCP/IP协议中的端口,是逻辑意义上的概念。主机上每一个提供服务的程序都运行在该主机的一个对外开放的端口上。程序员可以在创建自己的服务程序时使用自定义的端口,通过这个端口号来连接服务进程以接收服务。 如果把IP地址比作一间房子 ,端口就是出入这间房子的门。 端口常以16位无符号整数编号(0-65535) 保留端口(0-1023)和动态端口(1024-65535) 一个端口与使用该端口的服务进程是对应的,Java网络程序设计支持机制,利用URL访问网络资源 利用Socket通信,支持Socket通信的类,网 络,Java网络应用系统,支持URL的类,10,Java网络程序设计支持机制,支持网络通信的类在包中。 URL, URLConnection, Socket, ServerSocket ,使用TCP实现网络通信。 DatagramPacket, DatagramSocket, MulticastSocket 支持 UDP 通信方式。,InetAddress类 URL类 URLConnection类 套接字类 DatagramPacket类,2、Java网络基本类,Socket类、ServerSocket类 DatagramSocket类,12,InetAddress类是描述Internet地址的类。 常用方法: UnknownHostException异常,2、Java网络基本类 -InetAddress类,static InetAddress getLocalHost(); 返回本地主机。 static InetAddress getByName(String host); 在给定主机名的情况下确定主机的 IP 地址。 String getHostAddress(); /获得IP地址 String getHostName(); /获得主机名,13,2、Java网络基本类-InetAddress类,import .*; import java.io.*; public class GetLocalHost public static void main(String args) InetAddress myIp = null; String ip, hostname; try myIp = InetAddress.getLocalHost(); System.out.println(myIp); ip = myIp.getHostAddress(); /获得IP地址 System.out.println(ip); hostname = myIp.getHostName(); /获得主机名 System.out.println(hostname); catch(UnknownHostException e) ,统一资源定位器URL URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。 URL的组成 protocol:/resourceName 协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等 资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件 名或文件内部的一个引用。例如: / 协议名:/主机 /home/welcome.html 协议名:/机器名文件名 :80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用,2、Java网络基本类-URL类,15,创建一个URL 为了表示URL, 中实现了类URL。可以通过下面的构造方法来初始化一个URL对象: (1) public URL (String spec); 通过一个表示URL地址的字符串可以构造一个URL对象。 URL urlBase=new URL(“http:/www. 263.net/”) (2) public URL(URL context, String spec); 通过基URL和相对URL构造一个URL对象。 URL net263=new URL (“/”); URL index263=new URL(net263, “index.html“),2、Java网络基本类-URL类,16,(3) public URL(String protocol, String host, String file); new URL(“http“, ““, “/pages/G. html“); (4) public URL(String protocol, String host, int port, String file); URL gamelan=new URL(“http“, ““, 80, “Pages/Gwork.html“);,2、Java网络基本类-URL类,2、Java网络基本类-URL类,注意:类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。格式如下: try URL myURL= new URL() catch (MalformedURLException e) /exception handler code here ,18,2、Java网络基本类-URL类,一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性: public String getProtocol() 获取该URL的协议名。 public String getHost() 获取该URL的主机名。 public int getPort() 获取该URL的端口号,如果没有设置端口,返回-1。 public String getFile() 获取该URL的文件名。 public String getRef() 获取该URL在文件中的相对位置。 public String getQuery() 获取该URL的查询信息。 public String getPath() 获取该URL的路径 public String getAuthority() 获取该URL的权限信息 public String getUserInfo() 获得使用者的信息 public String getRef() 获得该URL的锚,19,2、Java网络基本类-URL类,import .*; import java.io.*; public class ParseURL public static void main(String args) throws Exception URL aURL = new URL(“:80/docs/books/“ + “tutorial/index.html#DOWNLOADING“); System.out.println(“protocol = “ + aURL.getProtocol(); System.out.println(“host = “ + aURL.getHost(); System.out.println(“filename = “ + aURL.getFile(); System.out.println(“port = “ + aURL.getPort(); System.out.println(“ref = “ + aURL.getRef(); ,20,2、Java网络基本类-URL类 从URL读取WWW网络资源,当我们得到一个URL对象后,就可以通过它读取指定的WWW资源。这时我们将使用URL的方法openStream(),其定义为: InputStream openStream(); 方法openSteam()与指定的URL建立连接并返回InputStream类的对象以从这一连接中读取数据。,public class URLReader public static void main(String args) throws Exception /声明抛出所有例外 URL tirc = new URL(“/“); /构建一个URL对象 BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream(); /使用openStream得到一个输入流,并由此构建一个BufferedReader对象 String inputLine; File outfile = new File(“test.html“); PrintWriter out = new PrintWriter(new FileWriter(outfile); while (inputLine = in.readLine() != null) /从输入流中不断读取数据直到读完为止 out.println(inputLine); /把读入的数据写入test.html in.close(); /关闭输入流 out.close(); ,22,3、Java网络基本类- URLConnetction类,通过URL的方法openStream(),我们只能从网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了。 类URLConnection也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象。,23,下面的程序段首先生成一个指向地址/xyw/index.jsp的对象,然后用openConnection()打开该URL对象上的一个连接,返回一个URLConnection对象。如果连接过程失败,将产生IOException.,try URL zjut = new URL (“/xyw/index.jsp“); URLConnectonn tc = zjut.openConnection(); catch(MalformedURLException e) /创建URL()对象失败 catch (IOException e) /openConnection()失败 ,24,类URLConnection提供了很多方法来设置或获取连接参数,程序设计时最常使用的是getInputStream()和getOurputStream(),其定义为: InputSteram getInputSteram(); OutputSteram getOutputStream();,3、Java网络基本类- URLConnetction类,25,通过返回的输入/输出流我们可以与远程对象进行通信,URL url =new URL (“/cgi-bin/backwards”); /创建一URL对象 URLConnectin con=url.openConnection(); /由URL对象获取URLConnection对象 DataInputStream dis=new DataInputStream (con.getInputSteam(); /由URLConnection获取输入流,并构造DataInputStream对 PrintStream ps=new PrintSteam(con.getOutupSteam(); /由URLConnection获取输出流,并构造PrintStream对象 String line=dis.readLine(); /从服务器读入一行 ps.println(“client“); /向服务器写出字符串 “client“,26,4、 Socket和ServerSocket类,客户套接字类(Socket) 服务器套接字类(ServerSocket),27,套接字类Socket,1、 Socket的四种构造方法 (1) Socket(String host,int port) thows UnknownHostException,IOException 创建一个面向连接的套接字对象,并将其连接至特定的主机(host)的特定端口(port) (2) Socket(String host,int port,boolean stream) 创建一个套接字对象,并将其连接至特定的主机的特定端口上,此套接字对象是面向连接的还是数据报的,则由最后的一个参数决定 (3) Socket(InetAddress address,int port) 创建一个面向连接的套接字对象,并将其连接至特定IP的主机的特定端口(port) (4) Socket( InetAddress address ,int port,boolean stream) 创建一个套接字对象,并将其连接至特定ip主机的特定端口上,此套接字对象是面向连接的还是数据报的,则由最后的一个参数决定,28,套接字类Socket,2、 Socket提供的主要方法 (1) InetAddress getInetAddress() 返回该套接字所连接的IP地址 (2) Int getPort() 返回该套接字所连接的远程端口 (3) sychronized void close() throws IOException 关闭套接字 (4) InputStream getInputStream () throws IOException 获得套接字绑定的数据的输入流 (5) PrintStream getOutputStream() throws IOException 获得向套接字绑定的数据输出流,29,服务器套接字(ServerSocket),1、ServerSocket类的构造方法 (1) ServerSocket(int port) throws IOException 构造一个ServerSocket对象,其绑定的端口号为port (2) ServerSocket(int port , int count) 构造一个ServerSocket对象,其绑定的端口号为port,如port为0,则该对象与缺省的端口号绑定。其中count为该对象端口上等待的连接的客户最大数,30,服务器套接字(ServerSocket),2、ServerSocket类的主要方法 (1) Socket accept() throws IOException 等待客户连接,该方法将阻塞当前系统服务线程,直到连接成功。该方法返回一个套接字类对象,通过该套接字,新的服务子线程与连接的客户进行通信。 (2) Void close() throws IOException 关闭套接字,31,怎样用socket进行客户与服务器通信,Socket是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。 通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。,32,与服务器通信必须具备三个条件,服务器程序 客户程序 连接它们的socket程序,33,ServerSocket类,它的实例使服务器能够检测到指定端口的信息 accept()方法可以使服务器检测到指定端口的活动 服务器还负责检测要求与它连接的客户。,getInputStream()和getOutStream()方法来发送和捕捉数据。 try /传递给它一个整数作为服务器指定可以使用的给定端口 ServerSocket myServerSocket=new ServerSocket(100); Socket my100Socket=myServerSocket.accept(); /检测端口的活动 catch(Exception e),Socket类,34,Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序。一旦客户的连接成功,my100Socket就代表该连接,并且可以发送和接收数据。 最后,我们看一看客户是怎样请求连接的。其连接方法如下: try Socket mySocket=new Socket(““,100); catch(Exception e ),Socket类,35,Java数据库编程基础,客户机/服务器 应用程序,ODBC,JDBC,两个常用的API,数据库,执行 SQL 语句,检索查询结果,36,数据库,ODBC,客户机/服务器 GUI应用程序,ODBC (开放式数据库连接) (Microsoft 提供),插 入,删 除,修 改,应用程序编程接口,查询,37,JDBC,JDBC (Java 数据库连接) (sun公司提供),Java 应用程序编程接口,Java应用程序,数据库,插 入,修 改,删 除,查询,38,JDBC 驱动程序的类型,JDBC 驱动程序 的类型,JDBC-ODBC桥驱动程序及ODBC驱动程序,本地API部分Java驱动程序,JDBC-Net 纯Java驱动程序,本地协议纯Java驱动程序,39,JDBC 体系结构,Java 程序,JDBC 驱动程序,数据库,SQL 命令,结果,40,JDBC 体系结构,应用层,Driver,Statement,ResultSet,Connection,各接口,驱动层,41,java.sql 包,42,java.sql 包,43,java.sql 包,SQLException,/* * fooBar */ public void foobar() throws SQLException throw new SQLException(“刚引发了一个 SQLException ”); , try fooBar(); catch(SQLException ex) System.out.println(“已捕获一个 SQLException 异常!”); System.out.println(“消息: “ + ex.getMessage(); System.out.println(“错误代码: “ + ex.getErrorCode(); ,调用 fooBar,44,JDBC 程序访问数据库的步骤 2-1,开 始,导入 java.sql包,加载并注册驱动程序,创建一个 Connection 对象,创建一个 Statement 对象,执行语句,关闭ResultSet 对象,关闭Statement对象,关闭连接,结 束,使用ResultSet对象,45,Friends 表的结构,JDBC 程序访问数据库的步骤 2-2,它演示访问数据库的各个步骤 在执行示例 1 中的程序之前,SQL Server 中应该存在一个 名为 friends 的表,46,Friends 表的结构,JDBC 程序访问数据库的步骤 2-2,/* 2005 Aptech Limited * 版权所有 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示访问数据库需遵循的各个步骤. * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest /* 构造方法 */ protected Jdbctest() ,47,Friends 表的结构,JDBC 程序访问数据库的步骤 2-2,它演示访问数据库的各个步骤 在执行示例 1 中的程序之前,SQL Server 中应该存在一个 名为 friends 的表,/*这是 main 方法. */ public static void main(String args) try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch (ClassNotFoundException ce) System.out.println(ce); try String url = “jdbc:odbc:test“; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery(“select * from friends“); while (rs.next() System.out.print(rs.getString(1) + “t“); System.out.print(rs.getString(2) + “t“); System.out.print(rs.getInt(3) + “t“); System.out.print(rs.getDate(4) + “t“); System.out.println(“ “); rs.close(); s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,48,JDBC 查询2-1,SQL 查询字符串,executeQuery() 方法,作为参数传递,ResultSet,返回查询数据,SELECT name, email, phone FROM colleagues;,使用 SQL 语句,查询可编写为:,String str = “SELECT emp_id, lname, fname FROM colleagues“; Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery(str);,使用 JDBC 编写此查询,则代码为:,Statement接口,49,JDBC 查询2-2,它演示 SQL 中 sum( ) 方法的用法,演示:示例 2,/* * Jdbctest2 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示 SQL 中 sum() 方法的用法 * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest2 /* 构造方法*/ protected Jdbctest2() ,/* 这是 main 方法*/ public static void main(String args) try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch (ClassNotFoundException ce) System.out.println(ce); try String url = “jdbc:odbc:test“; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery( “select hiredate, sum(salary) from friends group by hiredate“); while (rs.next() System.out.print(rs.getDate(1) + “t“); System.out.print(rs.getInt(2) + “t“); System.out.println(“ “); rs.close; s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,50,演示:示例 3,它演示 SQL 中 INSERT 语句的用法,/* * Jdbctest3 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示 INSERT 语句的用法. * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest3 /* 构造方法 */ protected Jdbctest3() ,JDBC 插入数据实现,/* 这是 main 方法*/ public static void main(String args) try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch (ClassNotFoundException ce) System.out.println(ce); try String url = “jdbc:odbc:test“; String str = “INSERT INTO “ + friends(name,address,salary)“ + “VALUES(朱八,深圳 ,25690)“; Connection con = DriverManager.getConnection(url); Statement s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业领域绿色能源技术应用
- 工业设计在产品创新中的作用与价值研究
- 工作中的情绪管理与压力缓解
- 工业设计与产品创新的策略研究
- 工作效率提升工具及方法研究
- 工作环境优化对员工满意度的影响
- 工程塑料在汽车领域的应用
- 工厂厂区绿化规划
- 工程机械动载荷下的结构强度分析
- 工程机械的维护与修理技术培训
- 苏科版初中物理知识点总结(含所有公式,绝对全~~~~)
- 《国际私法》教学全套课件
- 基建项目建设综合管理信息系统建设方案
- 一年级下册音乐教案 (简谱) (演唱)同坐小竹排(7) 湘艺版
- 砂石料加工厂劳务外包服务采购项目
- 列车网络控制技术-复习打印版
- 福建高考名著《红楼梦》填空题+答案
- 商标法期末复习
- 材料力学计算试题(库)完整
- 投资控股集团有限公司安全生产责任制暂行办法
- NGW型行星齿轮传动系统的优化设计
评论
0/150
提交评论