jsp教案10范文_第1页
jsp教案10范文_第2页
jsp教案10范文_第3页
jsp教案10范文_第4页
jsp教案10范文_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

jsp教案10范文 湖南城市学院教师备课纸第10次课题JDBC与数据库(JDBC与SQL语句、存储过程的应用)目的要求掌握JDBC存取各种不同数据库的方法教学重点掌握JDBC与不同数据库的连接字符串、连接池教学难点JSP如何存取存储过程中输入参数、输出参数、输入输出参数教学课时4(含2课时上机)教学方法讲解、示例与启发式教学相结合教学内容和步骤10.1JDBC与数据库编程10.1.1JDBC的Driver可分为以下四种类型 (1)JDBC-ODBC Bridge和ODBC Driver这种驱动器器通过ODBC驱动器提供数据库连接。 使用这种驱动器,要求每一台客户机都装入ODBC的驱动器。 (2)Native-API partly-Java Driver这种驱动器将JDBC指令转化成所连接使用的DBMS的操作形式。 各客户机使用的数据库可能是Oracle,可能是Sybase,也可能是Aess,都需要在客户机上装有相应DBMS的驱动程序。 (3)JDBC-Net All-Java Driver这种驱动器将JDBC指令转化成独立于DBMS的网络协议形式,再由服务器转化为特定DBMS的协议形式。 有关DBMS的协议由各数据库厂商决定。 这种驱动器可以联接到不同的数据库上,最为灵活。 目前一些厂商已经开始添加JDBC的这种驱动器到他们已有的数据库中介产品中。 要注意的是,为了支持广域网存取,需要增加有关安全性的措施,如防火墙等等。 (4)Native-protocol All-Java Driver这种驱动器将JDBC指令转化成网络协议后不再转换,由DBMS直接使用。 相当于客户机直接与服务器联系,对局域网适用。 在这四种驱动器中,后两类“纯Java”(All-Java)的驱动器效率更高,也更具有通用性。 但目前第 一、第二类驱动器比较容易获得,使用也较普遍。 10.1.2关于JDBC Url语法如下jdbc:-驱动程序名称或数据库连接机制,子协议名称的典型例子就是ODBC,如jdbc:odbc:fff-一种标识数据库的方法。 子名称可以依据不同的子协议而发生变化如jdbc:db/womat:356/fff ODBC子协议:Jdbc:odbc:;=如jdbc:odbc:sqlconn:UID=sa;PWD=ww10.2JDBC编程10.2.1程序基本结构一般的JDBC程序都完成三项功能与数据库建立连接;传送SQL声明以及对返回结果进行处理。 下面我们通过一个具体例子说明这三项功能的实现过程。 例1:Creage.java给出了一个简单的JDBC程序,此程序执行后创建一张名为testTable的表,表中包括两个域,域名分别为id和name。 import java.URL;import java.sql.*;class Createpublic staticvoid main(Stringargs)String url=jdbc:odbc:demo;String query=CREATE TABLEtestTable+(id INT,name CHAR (10);try/下载jdbc-odbc bridge驱动器Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/关于此句参见下面Cyclone的注释/与驱动器建立连接,这里可使用不同的特定驱动,如jdbcfororacle或jdbcforsqlserver Connection con=DriverManager.getConnection(url,user,password);/创建一个Statement对象Statement stmt=con.createStatement();/执行SQL声明stmt.executeUpdate(query);System.out.println(Create suessfully!);/关闭stm stmt.close();/关闭连接con.close();catch(SQLException ex)/SQL异常信息System.out.println(n*SQLException caught*n);while(ex!=null)System.out.println(SQLState:+ex.getSQLState();System.out.println(Message:+ex.getMessage();System.out.println(Vendor:+ex.getErrorCode();ex=ex.getNextException();System.out.println();catch(java.lang.Exception ex)ex.printStackTrace();22Statement类及其子类1)Statement接口Statement stmt=con.createStatement();/执行SQL声明int count1=stmt.executeUpdate(INSERT INTOtestTable(id,name)VALUES(1,wu);int count2=stmt.executeUpdate(INSERT INTOtestTable(id,name)VALUES(2,wang);2)PreparedStatement接口String data=5,xu,6,yan;PreparedStatement pstmt=con.prepareStatement(INSERT INTOtestTable(id,name)VALUES(?,?);/参数赋值,执行SQL声明for(int i=0;i cstmt.execute();2.3结果集ResultSet及ResultSetMetaData Stringquery=SELECT*FROM testTable;Statement stmt=con.createStatement();/发出查询要求,获得结果集ResultSet rs=stmt.executeQuery(query);/显示结果集各行各列System.out.println(The detailof testTableis:);ResultSetMetaData rsmd=rs.getMetaData();/获得结果集列数in numCols=rsmd.getColumnCount();/显示列标题for(int i=1;i1)System.out.print(,);System.out.print(rsmd.getColumnLabel(i);System.out.println();/显示结果集信息while(rs.next()/显示一行for(int i=1;i1)System.out.print(,);System.out.print(rs.getString(i);2.4DatabaseMetaData DatabaseMetaDatadma=con.getMetaData();/驱动器和URL信息System.out.println(nConnected to+dma.getURL();System.out.println(Driver+dma.getDriverName();System.out.println(Version+dma.getDriverVersion();/数据库信息System.out.println(nDataBase name:+dma.getDatabaseProductName()+dma.getDatabaseProductVersion();System.out.println(DataBase supportsSQL keywords:nt+dma.getSQLKeywords();/数据库功能信息函数dma.supportsANSI92EntryLevelSQL()dma.supportsANSI92FullSQL()dma.supportsStoredProcedures()10.2.2JDBC数据类型及类型转换JDBC的数据类型JDBC的sql包中除了与数据库连接有关的抽象接口及与驱动器有关的DriverManager、DriverPropertyInfo等类型外,还定义了若干数据类,用以代表数据库中可能用到的SQL类型。 下面我们就对它们逐一进行简略介绍。 sql.Date sql包中的日期类Date是util包中Date类的子类,实际上也是util.Date类的子集。 它只处理年月日,而忽略小时和分秒,用以代表SQL的DATE信息。 Date类的构造方法为public Date(int year,int mouth,int day)其中参数格式同util.Date类的构造方法一样,年参数为所需设定的年份减去1900所得的整数值,月参数为0至11,日参数为1至31。 如1998年1月23日所对应创建日期类的方法调用为Date d=new Date(98,0,23);Date类还提供两个与String类互相转换的方法,分别是public staticDate valueOf(String s)将字符串类参数转换为日期类对象。 其中String类参数S的格式为“年-月-日”,加“1997-04-12”。 public StringtoString()将日期类对象转换为String类对象表示,同样采用“年-月-日”的格式。 sql.Time该类是util.Date类的子类,也是它的一个子集。 在Time类里,只处理小时和分秒,代表SQL的TIME类型。 它与sql.Date合起来才表示完整的util.Date类信息。 Time类的构造方法为public Time(int hour,int minute,int second)其中小时参数值为0至23,分秒参数取值均为0至59。 与sql.Date一样,Time类也定义了两个与String类互相转换的函数ValueOf和String。 不同的是String类对象的格式为“小时分秒”,如“122606”。 sql.Timestamp这个类也是util.Date类的子类,其中除了包含年月日、小时和分秒和信息之外,还加入了纳秒信息(nanosecond),1纳秒即1毫微秒。 Timestamp类用来代表SQL时间戳(Timestamp)类型信息。 Timestamp类的构造方法为public Timestamp(int year,int mouth,int date,int hour,int minute,int second,int nano)其中纳秒参数的取值从0至999,999,999,其余各参数同前。 Timestamp类特别定义了设置和获得纳秒信息的方法,分别是public getnanos()获取时间戳的纳秒部分public voidsetNanos(int n)以给定数值设置时间戳的纳秒部分sql.Types Types类是Object类的直接子类。 在这个类中以静态常量的形式定义了可使用的SQL的数值类型。 所有这些类型常量都以前缀public finalstatic int的形式标明是公有静态整数,且不可改动。 具体的类型名和含义如表11.1所示。 其中OTHER用来代表数据库定义的特殊数据,可以用getObject或setObject方法将其映射为一个Java的Object对象。 表1Types中定义的SQL类型类型名BIGINT BINARYBIT CHARDATE DECIMALDOUBLE FLOATINTEGER LONGVARBINARYLONGVARCHAR NULLNUMERIC OTHERREAL长整型数二进制数比特数字符型日期型十进制数双精度数浮点数整数可变长型二进制数可变长型字符空类型数值型其他类型实数含义SMALLINT TIMETIMESTAMP TINYINTVARBINARY VARCHAR短整型时间类型时间戳类型微整型可变二进制数可变字符型SQL与Java由于SQL数据类型与Java的数据类型不一致,因而在使用Java类型的应用程序与使用SQL类型的数据库之间,需要某种读写类型转换机制。 实际上我们前面介绍的ResultSet类的“get”系列方法,Statement及其子类的“set“系列方法和registerOutParameter方法,都是这一转换机制的组成部分。 需要进行的读写转换包括下面情况从数据库中读取数值后,存放在ResultSet对象中的是SQL类型的数据。 而调用“get”系列方法时,JDBC才将SQL类型转换为指定的Java类型。 在一般情形下,SQL类型相对应的Java类型如表11-2所示。 表2SQL类型一般所对应的Java类型SQL typeCHAR VARCHARLONGVARCHAR NUMERICDECIMAL Javatype java.lang.String java.lang.String java.lang.String java.lang.Bignum java.lang.Bignum字符类型JDBC字符串数据类型为CHAR、VARCHAR和LONGVARCHAR。 类型Fixed-length说明SQL Serverchar和nchar数据类型直接映射到JDBC CHAR类型。 这些都是在列具有SET ANSI_PADDING ON的情况下,具有由服务器提供的填充的固定长度的类型。 对于nchar,填充始终是打开的,但对于char,在未填充服务器字符列的情况下,JDBC驱动程序将添加填充。 Variable-length SQL Server varchar和nvarchar类型直接映射到JDBC VARCHAR类型。 Long SQL Server text和ntext类型映射到JDBC LONGVARCHAR类型。 对于SQL Serverxx来说,这些类型已过时,因此应改用大值类型。 针对text和ntext服务器列使用update和updateObject(int,java.lang.Object)方法时将失败。 然而,对于text和ntext服务器列,支持将setObject方法用于指定的字符转换类型。 二进制字符串类型JDBC二进制字符串类型为BINARY、VARBINARY和LONGVARBINARY。 类型说明固定长度SQL Serverbinary类型直接映射到JDBC BINARY类型。 这是在列具有SET ANSI_PADDING ON的情况下,具有由服务器提供填充的固定长度类型。 没有填充服务器char列时,JDBC驱动程序会添加填充。 SQL Servertimestamp类型是具有8个字节的固定长度的JDBC BINARY类型。 SQL Servervarbinary类型映射到JDBC VARBINARY类型。 可变长度Long SQL Server image类型映射到JDBC LONGVARBINARY类型。 对于SQL Serverxx来说,该类型已过时,因此应改用大值类型。 SQL Serverxx中的udt类型作为LONGBINARY类型映射到JDBC。 精确数字类型JDBC精确数字类型直接映射到其对应的SQL Server类型。 类型BIT说明JDBC BIT类型表示可能是0或1的单个位。 此类型映射到SQL Serverbit类型。 JDBC TINYINT类型表示单个字节。 此类型映射到SQL Servertinyint类型。 TINYINT SMALLINTJDBC SMALLINT类型表示有符号的16位整数。 此类型映射到SQL Serversmallint类型。 INTEGER JDBCINTEGER类型表示有符号的32位整数。 此类型映射到SQL Serverint类型。 JDBC BIGINT类型表示有符号的64位整数。 此类型映射到SQL Serverbigint类型。 JDBC NUMERIC类型表示固定精度的十进制值,它可存放相同精度的值。 BIGINT NUMERIUMERIC类型映射到SQL Servernumeric类型。 DECIMAL JDBC DECIMAL类型表示固定精度的十进制值,它可存放至少具有指定精度的值。 DECIMAL类型映射到SQL Serverdecimal类型。 JDBCDECIMAL类型还映射到SQL Servermoney和smallmoney类型,这些类型是特定的固定精度的十进制类型,分别以8个字节和4个字节进行存储。 近似数字类型JDBC近似数值数据类型为REAL、DOUBLE和FLOAT。 类型REAL说明JDBC REAL类型具有7位精度(单精度)并直接映射到SQLServerreal类型。 DOUBLE JDBCDOUBLE类型具有15位精度(双精度)并直接映射到SQLServerfloat类型。 JDBC FLOAT类型是DOUBLE的同义词。 由于FLOAT与DOUBLE之间可能存在冲突,因此DOUBLE为首选类型。 日期时间类型JDBC TIMESTAMP类型映射到SQLServerdatetime和smalldatetime类型。 datetime类型以两个4字节整数进行存储。 smalldatetime类型可存放相同的信息(日期和时间),但精度较低,为两个2字节的小整数。 10.3JDBC与数据库的连接字符串MySQL(.mysql.)mm.mysql-2.0.2-bin.jar Class.forName(org.gjt.mm.mysql.Driver);=DriverManager.getConnection(jdbc:mysql:/MyDbComputerNameOrIP:3306/myDatabaseName,sUsr,sPwd);Oracle(.oracle./ip/deploy/database/oracle9i/)classes12.zip Class.forName(oracle.jdbc.driver.OracleDriver);=DriverManager.getConnection(jdbc:oracle:thin:MyDbComputerNameOrIP:1521:ORCL,sUsr,sPwd);Sybase(jtds.sourceforge.)jcon

温馨提示

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

评论

0/150

提交评论