《第10章网络与数据库编程基础.ppt》由会员分享,可在线阅读,更多相关《第10章网络与数据库编程基础.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第1010章章 网络与数据库编程网络与数据库编程本章重点本章重点支持JAVA程序访问网上资源的类及其方法网络编程应用支持Java程序与数据库连接的类及其方法支持Java程序的数据表查询、数据记录修改和插入的类及其方法数据库编程应用更多优质自考资料尽在百度贴吧自考乐园俱乐部(http:/ 网络编程是指利用不同层次的通信协议提供的接口实现网络进程通信的编程网络编程中有两个主要的问题:(1)如何准确的定位网络上一台或多台主机如何准确的定位网络上一台或多台主机,(2)找到主机后如何可靠高效的进行数据传输)找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输
2、的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。31、网络基础知识、网络基础知识网络编程模型:客户机/服务器(C/S)结构 即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络进程:就是网点机(连入网络的计算机)上运行的程序。网络进程在通信协议中用端口(port)标识,而它驻
3、留的网点机则用其IP地址或域名来标识。通信协议指网络进程之间的通信必须遵循预定的规则。TCP/IP是一组在Internet网络上的不同计算机之间进行通信的协议的总称,它由应用层的HTTP、FTP、SMTP和传输层的TCP及网络层的IP等一系列协议组成。4TCP(传输控制协议)是面向连接的、可靠的点对点的传输协议。UDP(用户数据报协议)是无连接的不可可靠的传输协议。IP是网络层协议,实现按IP地址的网络路由的功能。IP地址:标识计算机等网络设备的网络地址,由四个8位的二进制数组成,中间以小数点分隔。如:166.111.136.3,166.111.52.80主机名(hostname):网络地址的
4、助记名,按照域名进行分级管理。如服务类型(service):网络的各种服务。如:web服务,ftp服务,smtp服务,Telnet服务等1、网络基础知识、网络基础知识51、网络基础知识、网络基础知识-TCP 通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。61、网络基础知识-UDP UDP是User Da
5、tagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。71、网络基础知识、网络基础知识-套接字套接字“套接字”或者“插座”(Socket)也是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。线缆的每一端都插入一个“套接字”或者“插座”里。进程之间要实现通信首先要建立各自的套接字。在Java中,我们创建一个套接字,用它建立与其他机器
6、的连接。81、网络基础知识、网络基础知识-端口号端口号 l指TCP/IP协议中的端口,是逻辑意义上的概念。主机上每一个提供服务的程序都运行在该主机的一个对外开放的端口上。程序员可以在创建自己的服务程序时使用自定义的端口,通过这个端口号来连接服务进程以接收服务。如果把IP地址比作一间房子,端口就是出入这间房子的门。端口常以16位无符号整数编号(0-65535)保留端口(0-1023)和动态端口(1024-65535)一个端口与使用该端口的服务进程是对应的Java网络程序设计支持机制网络程序设计支持机制利用利用URL访问网络资源访问网络资源利用利用Socket通信通信支持支持Socket通信的类通
7、信的类网网 络络 Java网络应用系统网络应用系统支持支持URL的类的类10Java网络程序设计支持机制网络程序设计支持机制支持网络通信的类在支持网络通信的类在包中。包中。URL,URLConnection,Socket,ServerSocket,使用,使用TCP实现网络通信。实现网络通信。DatagramPacket,DatagramSocket,MulticastSocket 支持支持 UDP 通信方式。通信方式。InetAddress类URL类URLConnection类套接字类DatagramPacket类2 2、JavaJava网络基本类网络基本类 lSocket类、ServerSo
8、cket类lDatagramSocket类12lInetAddress类是描述是描述Internet地址的类。地址的类。l常用方法:常用方法:lUnknownHostException异常异常 2、Java网络基本类网络基本类-InetAddress类类lstatic InetAddress getLocalHost();返回本地主机。返回本地主机。lstatic InetAddress getByName(String host);在给定主机名的情况下确定主机的在给定主机名的情况下确定主机的 IP 地址。地址。lString getHostAddress();/获得获得IP地址地址lStri
9、ng getHostName();/获得主机名获得主机名13 2、Java网络基本类网络基本类-InetAddress类类 .*;importjava.io.*;publicclassGetLocalHostpublicstaticvoidmain(Stringargs)InetAddressmyIp=null;Stringip,hostname;trymyIp=InetAddress.getLocalHost();System.out.println(myIp);ip=myIp.getHostAddress();/获得获得IP地址地址System.out.println(ip);hostna
10、me=myIp.getHostName();/获得主机名获得主机名System.out.println(hostname);catch(UnknownHostExceptione)统一资源定位器URL URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL的组成 protocol:/resourceName 协议名(protocol)指明获取资源所使用的传输协议,如htt
11、p、ftp、gopher、file等 资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件 名或文件内部的一个引用。例如:http:/ http:/ 协议名:/机器名文件名 http:/:80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用 2、Java网络基本类网络基本类-URL类类 15创建一个URL 为了表示URL,中实现了类URL。可以通过下面的构造方法来初始化一个URL对象:(1)public URL(String spec);通过一个表示URL地址的字符串可以构造一个URL对象。URL urlBase=ne
12、w URL(“http:/ URL(URL context,String spec);通过基URL和相对URL构造一个URL对象。URL net263=new URL(“http:/ 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);U
13、RL gamelan=new URL(http,80,Pages/Gwork.html);2、Java网络基本类网络基本类-URL类类 2、Java网络基本类网络基本类-URL类类 注意:注意:类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。格式如下:tryURL myURL=new URL()catch(MalformedURLException e)/exception handler code here182、Java网络基本类网络基本类-URL类类 一个U
14、RL对象生成后,其属性是不能被改变的,但是我们可以通过类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的
15、路径public String getAuthority()获取该URL的权限信息public String getUserInfo()获得使用者的信息public String getRef()获得该URL的锚 192、Java网络基本类网络基本类-URL类类 1.import .*;2.import java.io.*;3.public class ParseURL 4.public static void main(String args)throws Exception 5.6.URL aURL=new URL(http:/:80/docs/books/7.+tutorial/inde
16、x.html#DOWNLOADING);8.System.out.println(protocol=+aURL.getProtocol();9.System.out.println(host=+aURL.getHost();10.System.out.println(filename=+aURL.getFile();11.System.out.println(port=+aURL.getPort();12.System.out.println(ref=+aURL.getRef();13.14.202、Java网络基本类网络基本类-URL类类 从从URL读取读取WWW网络资源网络资源 当我们得到
17、一个URL对象后,就可以通过它读取指定的WWW资源。这时我们将使用URL的方法openStream(),其定义为:InputStream openStream();方法openSteam()与指定的URL建立连接并返回InputStream类的对象以从这一连接中读取数据。1.public class URLReader 2.public static void main(String args)throws Exception 3./声明抛出所有例外声明抛出所有例外4.URL tirc=new URL(http:/ in=new BufferedReader(new InputStreamRe
18、ader(tirc.openStream();7./使用使用openStream得到一个输入流,并由此构建一个得到一个输入流,并由此构建一个BufferedReader对象对象8.String inputLine;9.File outfile=new File(test.html);10.PrintWriter out=new PrintWriter(new FileWriter(outfile);11.while(inputLine=in.readLine()!=null)12./从输入流中不断读取数据直到读完为止从输入流中不断读取数据直到读完为止13.out.println(inputLi
19、ne);/把读入的数据写入把读入的数据写入test.html14.15.in.close();/关闭输入流关闭输入流16.out.close();17.18.223、Java网络基本类网络基本类-URLConnetction类类通过URL的方法openStream(),我们只能从网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了。类URLConnection也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方
20、法openConnection()生成对应的URLConnection对象。23下面的程序段首先生成一个指向地址http:/ URL zjut=new URL(http:/ tc=zjut.openConnection();catch(MalformedURLException e)/创建URL()对象失败 catch(IOException e)/openConnection()失败24类URLConnection提供了很多方法来设置或获取连接参数,程序设计时最常使用的是getInputStream()和getOurputStream(),其定义为:InputSteram getInputS
21、teram();OutputSteram getOutputStream();3、Java网络基本类网络基本类-URLConnetction类类25通过返回的输入通过返回的输入/输出流我们可以与远程对象进行通信输出流我们可以与远程对象进行通信URL url=new URL(“http:/ con=url.openConnection();/由URL对象获取URLConnection对象DataInputStream dis=new DataInputStream(con.getInputSteam();/由URLConnection获取输入流,并构造DataInputStream对PrintS
22、tream ps=new PrintSteam(con.getOutupSteam();/由URLConnection获取输出流,并构造PrintStream对象String line=dis.readLine();/从服务器读入一行ps.println(client);/向服务器写出字符串 client264、Socket和和ServerSocket类类客户套接字类(Socket)服务器套接字类(ServerSocket)27套接字类套接字类Socket1、Socket的四种构造方法(1)Socket(String host,int port)thows UnknownHostExcepti
23、on,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)创建一个套接
24、字对象,并将其连接至特定ip主机的特定端口上,此套接字对象是面向连接的还是数据报的,则由最后的一个参数决定28套接字类套接字类Socket2、Socket提供的主要方法(1)InetAddress getInetAddress()返回该套接字所连接的IP地址(2)Int getPort()返回该套接字所连接的远程端口(3)sychronized void close()throws IOException 关闭套接字(4)InputStream getInputStream()throws IOException 获得套接字绑定的数据的输入流(5)PrintStream getOutputSt
25、ream()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服务器套接字服务器套接字(ServerSoc
26、ket)2、ServerSocket类的主要方法(1)Socket accept()throws IOException 等待客户连接,该方法将阻塞当前系统服务线程,直到连接成功。该方法返回一个套接字类对象,通过该套接字,新的服务子线程与连接的客户进行通信。(2)Void close()throws IOException 关闭套接字31怎样用怎样用socket进行客户与服务器通信进行客户与服务器通信 Socket是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过s
27、ocket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。32与服务器通信必须具备三个条件与服务器通信必须具备三个条件 服务器程序客户程序连接它们的socket程序 33ServerSocket类 它的实例使服务器能够检测到指定端口的信息 accept()方法可以使服务器检测到指定端口的活动 服务器还负责检测要求与它连接的客户。getInputStream()和getOutStream()方法来发送和捕捉数据。try /传递给它一个整数作为服务器指定可以使用的给定端口 ServerSocket myServerSocket=n
28、ew ServerSocket(100);Socket my100Socket=myServerSocket.accept();/检测端口的活动 catch(Exception e)Socket类类 34Accept()方法直到接收到用户的连接请求,才继续执行中断的执行程序。一旦客户的连接成功,my100Socket就代表该连接,并且可以发送和接收数据。最后,我们看一看客户是怎样请求连接的。其连接方法如下:try Socket mySocket=new Socket(,100);catch(Exception e)Socket类类 35Java数据库编程基础数据库编程基础客户机/服务器应用程序
29、 ODBCJDBC两个常用的API数据库数据库执行 SQL 语句检索查询结果 36数据库数据库ODBC客户机/服务器 GUI应用程序ODBC(开放式数据库连接)(Microsoft 提供)插 入删 除修 改应用程序编程接口 查询 37JDBC JDBC(Java 数据库连接)(sun公司提供)Java 应用程序编程接口Java应用程序数据库数据库插 入修 改删 除查询 38JDBC 驱动程序的类型驱动程序的类型JDBC 驱动程序的类型 JDBC-ODBC桥驱动程序及桥驱动程序及ODBC驱动程序驱动程序本地本地API部分部分Java驱动程序驱动程序JDBC-Net纯纯Java驱动程序驱动程序本地
30、协议纯本地协议纯Java驱动程序驱动程序39 JDBC 体系结构体系结构Java 程序 JDBC 驱动程序数据库数据库SQL 命令 结果 40JDBC 体系结构体系结构应用层应用层Driver StatementResultSet Connection 各接口驱动层驱动层41java.sql 包包接口名 说明 Connection此接口表示与数据的连接PreparedStatement此接口用于执行预编译的 SQL 语句 ResultSet此接口表示了查询出来的数据库数据结果集Statement此接口用于执行 SQL 语句并将数据检索到 ResultSet 中 42java.sql 包包类名类
31、名说明说明DriverManager此类用于加载和卸载各种驱动程序并建立与数据库的连接Date此类包含将 SQL 日期格式转换成 Java 日期格式的各种方法Time此类用于表示时间TimeStamp此类通过添加纳秒字段为时间提供更高的精确度 43java.sql 包包SQLException/*fooBar*/public void foobar()throws SQLException throw new SQLException(“刚引发了一个 SQLException”);try fooBar();catch(SQLException ex)System.out.println(“已捕
32、获一个 SQLException 异常!”);System.out.println(“消息:“+ex.getMessage();System.out.println(“错误代码:“+ex.getErrorCode();调用 fooBar44JDBC 程序程序访问数据库的步骤访问数据库的步骤 2-1开 始导入 java.sql包 加载并注册驱动程序创建一个 Connection 对象创建一个 Statement 对象执行语句关闭ResultSet 对象关闭Statement对象关闭连接结 束使用ResultSet对象45Friends表的结构表的结构JDBC 程序程序访问数据库的步骤访问数据库的
33、步骤 2-2它演示访问数据库的各个步骤在执行示例 1 中的程序之前,SQL Server 中应该存在一个 名为 friends 的表列名称列名称数据类型数据类型名称 Varchar(50)地址Varchar(50)电话Numeric入职日期Datetime工资Numeric46Friends表的结构表的结构JDBC 程序程序访问数据库的步骤访问数据库的步骤 2-2列名称列名称数据类型数据类型名称 Varchar(50)地址Varchar(50)电话Numeric入职日期Datetime工资Numeric/*2005 Aptech Limited *版权所有 */import java.sql.
34、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()47Friends表的结构表的结构JDBC 程序程序访问数据库的步骤访问数据库的步骤 2-2它演示访问数据库的各个步骤在执行示例 1 中的程序之
35、前,SQL Server 中应该存在一个 名为 friends 的表列名称列名称数据类型数据类型名称 Varchar(50)地址Varchar(50)电话Numeric入职日期Datetime工资Numeric/*这是 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
36、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.cl
37、ose();s.close();con.close();catch(SQLException ce)System.out.println(ce);48JDBC 查询查询2-1SQL 查询字符串 executeQuery()方法 作为参数传递ResultSet 返回查询数据SELECT name,email,phone FROM colleagues;使用 SQL 语句,查询可编写为:String str=SELECT emp_id,lname,fname FROM colleagues;Statement stmt=con.createStatement();ResultSet rset=st
38、mt.executeQuery(str);使用 JDBC 编写此查询,则代码为:Statement接口接口49JDBC 查询查询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 日
39、*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
40、=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它演
41、示 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 插入数据实现插入数据实现/*这
42、是 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
43、);Statement s=con.createStatement();int rowcount=s.executeUpdate(str);String str1=select name,sum(salary)“+from friends +group by name;ResultSet rs=s.executeQuery(str1);while(rs.next()System.out.print(rs.getString(1)+t);System.out.print(rs.getInt(2)+t);System.out.println();rs.close();s.close();con.c
44、lose();catch(SQLException ce)System.out.println(ce);51JDBC 删除和修改实现删除和修改实现它演示 SQL 中各种命令的用法演示:示例 4/*Jdbc2 */import java.sql.SQLException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;/*这这个类演示 SQL 中命令的用法.*version 1.0,2005 年 8 月 26 日 *author Ben */class Jdbc2/*构造方法.*
45、/protected Jdbc2()public static void main(String args)Connection con;Statement stmt;String url;String sql;try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException ce)System.out.println(ce);try url=jdbc:odbc:test;con=DriverManager.getConnection(url);sql=Delete from friends where r
46、trim(name)like张三;System.out.println();stmt=con.createStatement();stmt.executeUpdate(sql);System.out.println(张三 的记录已删除“);stmt.close();con.close();con=DriverManager.getConnection(url);sql=Update friends set address=青岛 where“+rtrim(name)like 李四;System.out.println();stmt=con.createStatement();stmt.executeUpdate(sql);stmt.close();con.close();System.out.println(李四的记录已更新);catch(SQLException ce)System.out.println(ce);