《servlet应用》PPT课件.ppt

上传人:sh****n 文档编号:12562204 上传时间:2020-05-11 格式:PPT 页数:42 大小:2.77MB
返回 下载 相关 举报
《servlet应用》PPT课件.ppt_第1页
第1页 / 共42页
《servlet应用》PPT课件.ppt_第2页
第2页 / 共42页
《servlet应用》PPT课件.ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
JSP编程开发技术,郑州大学软件学院,本次课的主要内容,JDBC驱动程序的类型JDBC-ODBC桥部分本地API部分Java驱动程序JDBC网络纯Java驱动程序本地协议的纯Java驱动程序安装数据库下载MysqlJDBC驱动JDBCAPI加载并注册数据库驱动建立到数据库的连接访问数据库事务处理可滚动和可更新的结果集JDBC数据源和连接池Mysql对中文的处理,JDBC驱动程序类型,JDBC驱动程序类型JDBC-ODBC桥,Java应用程序,JDBC-ODBC桥,ODBC层,JDBCAPI,ODBCAPI,数据库,JDBC驱动程序类型,JDBC驱动程序类型部分本地API部分Java驱动程序,Java应用程序,JDBC-ODBC桥,JDBCAPI,厂商提供的本地API,数据库,JDBC驱动程序类型,JDBC驱动程序类型JDBC网络纯Java驱动程序,Java应用程序,JDBC驱动程序,本地驱动程序,JDBCAPI,数据库,应用服务器,JDBC驱动程序类型,JDBC驱动程序类型本地协议的纯Java驱动程序,Java应用程序,JDBC驱动程序,JDBCAPI,安装数据库Mysql,安装Mysql数据库推荐安装appserv-win32-2.5.9.zipAppServ所包含的软件有:Apache、ApacheMonitor、PHP、MySQL、PHP-Nuke、phpMyAdmin可以直接下载,下载MysqlJDBC驱动,Mysql-connector-java-5.1.6,JDBCAPI,Java程序通过JDBC操作数据库的过程,JDBCAPI,一般情况下,使用JDBC访问数据库步骤1、载入数据库驱动程序2、与数据库建立连接3、将SQL语句从Java程序发送到数据库4、接收并处理从数据库返回的记录集,获取所需的数据5、操作结束,关闭连接,JDBCAPI,JDBCAPIJDBCAPI分为两个包:java.sql.*和javax.sql.*java.sql.*包定义了访问数据库的接口和类,是jdbc2.0之前的东西。javax.sql.*提供了很多新特性是对java.sql.*的补充Datasource接口提供了一种可选择性的方式去建立连接提供了连接池的支持增加了分布式的事务处理机制增加了rowset,Class.forName(“com.mysql.jdbc.Driver”);Connectionconn=DriverManager.getConnection(“jdbc:mysql:/localhost:3306/test”,”root”,”1234”);Statementstmt=conn.createStatement();Resultsetrs=stmt.executeQuery(“select*fronjobs”);,JDBCAPI,加载并注册数据库驱动Driver接口java.sql.Driver是所有JDBC驱动程序需要实现的接口,这个接口是提供给数据库厂商使用的com.microsoft.jdbc.sqlserver.SQLServerDriver/sql2000com.microsoft.sqlserver.jdbcSQLServerDriver/sql2005oracle.jdbc.driver.OracleDriver/oraclecom.mysql.jdbc.Driver/MysqlDriver接口中提供了一个Connection()方法,用来建立到数据库的连接。在程序中通过JDBC驱动程序管理器注册每个驱动程序,使用驱动程序管理器提供的方法来建立数据库连接。而驱动程序管理器的连接方法则调用驱动程序类的connect()方法建立数据库连接。,Java应用程序,JDBC驱动程序管理器,JDBC驱动程序,数据库,JDBCAPI,加载并注册数据库驱动加载与注册JDBC驱动Java通过类Class的静态方法forName()载入数据库驱动器程序如果载入的是JDBC-ODBC桥驱动,可以直接使用Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)如果载入的是纯Jdbc驱动,则根据所连接的数据库的类型,使用不同的语句。如果需要,可以建立一个driver的实例并利用DriverManager类将其注册到系统中。,tryDriverManager.registerDriver(newcom.mysql.jdbc.Driver();catch(SQLExceptione)e.printStackTrace(),JDBCAPI,建立到数据库的连接java.sql包提供了一个Connection类来管理与数据库的连接调用DriverManager类的getConnect()方法建立到数据库的连接,并返回一个Connection对象Connectionconn=DriverManager.getConnection(“jdbc:mysql:/localhost:3306/test”,”root”,”1234”);,Connection成员变量StatementcreateStatement()PreparedStatementprepareStatement(Stringsql)booleangetAutoCommit()voidsetAutoCommit(booleanautoCommit)voidcommit(0voidrollback(0voidprepareCall(Stringcallname),JDBCAPI,访问数据库访问数据库,实质上就是向数据库发送SQL语句,并获取SQL语句的执行结果。执行SQL语句,java.sql包提供了3个接口Statement:用于执行简单的不含有参数的SQL语句调用Connection对象的createStatement()方法创建Statement对象PreparedStatement:用于执行带有IN参数的SQL语句调用Connection对象的prepareStatement()方法创建PreparedStatement对象PreparedStatement对象所代表的SQL语句的参数用?表示,调用PreparedStatement对象的setXXX()方法设置参数(XXX表示SQL参数的类型)。setXXX()方法有两个参数,第一个设置SQL语句中参数的索引(从1开始),第二个参数设置SQL语句中参数的值。CallableStatement:用于执行SQL的存储过程。调用Connection对象的prepareCall()方法创建CallableStatement对象在执行存储过程之前,凡是存储过程中类型为OUT的参数必须注册(通过CallableStatement对象的registerOutParameter()方法注册,然后通过getXXX()取得值),类型为IN的参数可以通过setXXX()方法来设置参数的值。,JDBCAPI,访问数据库Statement提供了3种常用的执行SQL语句的方法ResultSetexecuteQuery(Stringsql)该方法执行给定的SQL语句,该语句必须为Select语句。返回ResultSet结果集。intexecuteUpdate(Stringsql)执行给定的SQL语句,该语句或者为Insert、Update或Delete等能对数据库引起更新的语句,或者为不返回任何内容的SQL语句(如SQLDDL语句)。当执行的是Insert、Update或Delete语句时,返回值表示影响的记录行数,若返回0,表示执行的是不返回任何内容的SQL语句booleanexecute(Stringsql)该方法执行返回对个结果集的SQL语句,可以执行任何SQL语句。当返回结果是Result对象时,返回值为true,否则为falseIntexecuteBatch()该方法允许向数据库提交一批命令,然后一起执行。可以使用addBatch()方法将SQL命令加入到命令列表。PreparedStatement和CallableStatement也提供3种执行SQL语句的方法:execute(),executeQuery(),executeUpdate(),注意这3个方法没有任何参数,JDBCAPI,实例1:网上书店(连接参数不写进web.xml)(1)利用程序创建数据库和表CreateDBServlet.java,注意为了使表支持事务处理,建表时需要指定ENGINE=InnoDB(2)编译(3)部署(4)配置Web应用程序(5)配置JDBC驱动(6)调用,JDBCAPI,实例2:查询网上书店的数据ListServlet.java将连接数据库的信息写在web.xml的中,利用getServletContext()方法取得ServletContext对象。使用Javascript控制客户端显示编译部署配置Web应用程序配置JDBC驱动调用,JDBCAPI,实例3:PreparedStatement接口的运用CreateAccountServlet.java执行带参数的SQL参数用?表示程序需要使用setXXX(字段的索引值,字段的值)方法传递值给参数编译部署配置Web应用程序配置JDBC驱动调用,JDBCAPI,实例4:CallableStatement接口的使用创建mysql存储过程传入in参数取得out参数值编译部署配置Web应用程序配置JDBC驱动调用,JDBCAPI,ResultSet结果集JDBC使用ResultSet对象来存储SQL语句执行的结果。ResultSet对象中存放的是满足SQL语句执行条件的所有记录行,所以它是一个结果集。ResultSet对象维护一个指向当前数据行的游标,初始的时候,游标在第一行之前,通过next()方法移动游标到下一行。ResultSet接口中定义了很多方法来获取当前行中列的数据,如getString(intcolumnIndex),ResultSet成员变量booleanfirst()booleannext()booleanlast()booleanprevious()booleanclose()StringgetString(StringcolumnName),JDBCAPI,元数据在SQL中,用于描述数据库或者他的各个组成部分之一的数据称为元数据。在java.sql包中,利用接口ResultSetMetaData获取描述数据库表结构的元数据。调用ResultSet对象的getMetaData()方法来得到ResultSetMetaData对象在java.sql包中,利用接口DatabaseMetaData获取描述数据库信息的元数据。调用Connection对象的getMetaData()方法来得到DatabaseMetaData对象在java.sql包中,利用接口ParameterMetaData获取PreparedStatement对象中的参数的类型和属性信息。调用PreparedStatement对象的getParameterMetaData()方法来得到ParameterMetaData对象,JDBCAPI,实例5:元数据的应用GetDBInfoServlet.java利用DatabaseMetaData接口和ParemeterMetaData接口中定义的方法取得数据库和表的信息。编译部署配置Web应用程序配置JDBC驱动调用,JDBCAPI,事务处理事务是构成单个逻辑工作单元的操作集合。事务处理保证所有的事务都作为一个工作单元来执行,即使出现了硬件故障或者系统失灵,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的操作都被提交(commit),要么整个事务回滚(rollback)到最初的状态。,JDBCAPI,事务处理通过JDBC实现事务处理相对简单。只要将Connection对象的事务提交模式setAutoCommit()方法设为false,那么所有被执行的SQL语句都会在Connection对象的commit()方法被执行时才得到事务确认。若有SQL语句执行失败,只要调用Connection类的rollback()方法将事务回滚即可。,tryclass.forName(DBDriver);Connectionconn=DriverManager.getConnection(constr,user,pass);conn.setAutoCommit(false);Statementstmt=conn.CreateStatement();stmt.executeUpdate(sqlstr1);stmt.executeUpdate(sqlstr2);mit;stmt.close;conn.close;catch(Exceptione)conn.rollback;,事务处理,事务的隔离为了避免多个事务同时访问同一份数据可能引发的冲突,需要设置事务的隔离级别事务隔离指的是数据库系统通过某种机制,在并行的多个事务之间进行分离,使每个事务在其执行过程中保持独立,如同当前只有此事务单独运行。3个概念脏读:一个事务读取了另外一个事务修改后还未提交到数据库的数据(脏数据)。不可重复读:一个事务在结束前第二次读取同一数据,但此时该数据已被另一事务修改,因此读取的不是原来的数据内容。幻读:一个事务读取所有数据后,发现凭空多出了在此期间被另一事务插入的数据。,事务处理,事务的隔离SQL标准4种事务隔离级别ReadUncommitted:仅保证读取过程中不会读取到非法数据,这种级别不能避免上述3种事务问题。ReadCommitted:保证一个事务不会读到另一个并行事务已修改尚未提交的数据(脏读)RepeatableRead:避免了脏读和不可重复读。Serializable:避免了所有上述3种事务问题,即串行化执行事务。Connection接口定义了setTransactionIsolation()方法,用于设定事务的隔离级别,指定5个常量TRANSACTION_NONE/不支持事务TRANSACTION_READ_UNCOMMITTED/可以发生脏读、不可重复读和幻读TRANSACTION_READ_COMMITTED/禁止脏读,可以发生不可重复读和幻读TRANSACTION_REPEATABLE_READ/禁止脏读和不可重复读,可以发生幻读TRANSACTION_SERIALIZABLE/禁止脏读、不可重复读和幻读代码:conn.setTransactionIsolation(TRANSACTION_SERIALIZABLE),事务处理,实例6:事务的应用:购书程序TradeServlet.java,JDBCAPI,可滚动和可更新的结果集可滚动的结果集Connection对象的无参方法createStatement()所创建的结果集只能用next()方法向前移动游标,无法自由滚动游标,因此可以使用有参方法指定结果集的类型。StatementcreateStatement(intresultSetType,intresultSetConcurrency)resultSetType用于指定结果集类型,有3种类型:ResultSet.TYPE_FORWARD_ONLY(只能向前移动),ResultSet.TYPE_SCROLL_INSENSITIVE(可以滚动,但对数据库变化不敏感),ResultSet.TYPE_SCROLL_SENSITIVE(可以滚动,对数据库变化敏感)resultSetConcurrency用于指定并发性类型,有2种类型:ResultSet.CONCUR_READ_ONLY(结果集不能用于更新数据库),ResultSet.CONCUR_UPDATABLE(结果集可以用于更新数据库),JDBCAPI,可滚动和可更新的结果集可滚动的结果集PreparedStatement在Connection接口中也提供了带参数的prepareStatement()以实现可滚动的结果集。PreparedStatementprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)可以利用DatabaseMetaData接口提供的supportsResultSetType(inttype)和supportsResultSetConcurrency(onttype,intconcurrency)方法判断JDBC驱动是否支持可滚动和可更新的结果集,JDBCAPI,可滚动和可更新的结果集可滚动的结果集结果集滚动的方法,JDBCAPI,可滚动和可更新的结果集可更新的结果集可以在创建Statement对象时,指定ResultSet.CONCUR_UPDATABLE类型,这样创建的结果集就是可更新的结果集。更新一行:利用updateXXX()和updateRow()方法来更新一行插入一行:利用moveToInsertRow()、updateXXX()和insertRow()来插入一行删除一行:利用deleteRow()方法删除一行。,JDBCAPI,实例7:可滚动和可更新结果集应用ScrollUpdate,JDBC数据源和连接池,连接池的需求和实现原理为什么需要数据库连接池建立数据库连接需要耗费服务器资源一个数据库服务器同时建立的连接数有限,如果连接过多,服务器反应不过来,容易造成服务器崩溃。连接数多会造成数据库服务器的性能下降。,JDBC数据源和连接池,连接池的需求和实现原理数据库连接池预先建立多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到来时,从池中取出一个连接对象为客户服务,当请求完成后,客户调用close()方法,将连接对象放回池中。数据库连接池动态负责分配、管理和释放数据库连接。连接池取出一个空闲的连接对象分配给客户的连接请求,若客户的请求连接数超过连接池最大连接数量时,这些超额请求被加入到等待队列中。,JDBC数据源和连接池,JNDI和数据源JNDI:JavaNamingandDirectoryInterface,一组帮助做多个命名和目录服务接口的API,为程序开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。JNDI提供的命名服务将名称和对象绑定在一起,使得可以通过名称访问对象,其服务的主要功能就是通过一个名称“key”查找到对应的一个对象“value”为了提高数据库连接池与客户程序的独立性,Sun制定了标准的数据源接口:javax.sql.DataSource,用于封装各种不同的数据库连接池由于数据源对象和连接池对象都是由Web服务器提供的,不能通过在程序中实例化一个对象的方式来获取数据源。因此,需要使用JNDI技术将数据源和名字绑定起来,通过数据源的名字获取数据源对象的引用。,JDBC数据源和连接池,JNDI和数据源如下图,Web服务器所提供的实现了javax.sql.DataSource接口的数据源对象通过JNDI技术和“JNDIName”名字绑定在一起,用户就可以通过“JNDIName”名字访问连接池对象,进而使用连接池。,JDBC数据源和连接池,配置连接池为数据源将连接数据库的JDBC驱动包放在tomcat安装目录的lib下面。在元素中使用元素来配置JDBC数据源。context元素可以在多个位置配置如果应用程序不在tomcat的webapps目录下首先在server.xml(在元素里增添元素)或者Catalinalocalhostxxx.xml(xxx为Web应用程序名称)二者之一里配置,然后再在Web应用程序的web.xml里增加元素。(注意应该首先设定Web应用程序的根目录docBase属性)。如果应用程序在tomcat的webapps目录下,也需要先配置Web应用程序的META-INFcontext.xml,然后再在Web应用程序的web.xml里增加元素。(注意需要去掉docBase等属性),JDBC数据源和连接池,使用数据源数据源的操作使用JNDI的方式进行查找1、初始化名称查找上下文:Contextctx=newInitialContext()2、通过名称查找DataSource对象:DataSourceds=(DataSource)ctx.lookup(“java:comp/env/jdbc/mldn”)/java:comp/env/是一个环境命名上下文,主要是为了解决JNDI查找时的冲突问题。3、通过DataSource取得一个数据库连接:Connectionconn=ds.getConnection()web.xml里面的配置,jdbc/mldnjavax.sql.DataSourceContainer,JDBC数据源和连接池,实例8:利用数据源和连接池实现对表的检索。ConnectionPool(1)将连接数据库的JDBC驱动包放在tomcat安装目录的lib下面。(2)在tomcat的webapps下建立web项目,并建好目录结构(3)建立Web应用程序的META-INFcontext.xml文件,在里面加上JDBC数据源配置(名称、url等)(4)在Web应用程序的web.xml文件中增加元素,并添加相关子元素及其值(5)在程序中构建Connection对象,Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup(java:comp/env/jdbc/mybookinfo);conn=ds.getConnection();,Mysql对中文的处理,一般MySQL中文乱码问题都是与字符集有关,MySQL默认编码是latin1解决方案修改MySQL配置文件my.ini,设置MySQL的默认字符集为utf8,找到客户端配置client在下面添加。default-character-set=utf8,找到服务器配置mysqld在下面添加default-character-set=utf8.设定MySQL数据库以utf8编码运行,连接MySQL数据库时使用utf8编码如果mysql是解压版本,在启动行设定character_set_server=utf8实例:JDBCTest.java,课程小结与练习,小结JDBC驱动程序的类型JDBC-ODBC桥部分本地API部分Java驱动程序JDBC网络纯Java驱动程序本地协议的纯Java驱动程序安装数据库下载MysqlJDBC驱动JDBCAPI加载并注册数据库驱动建立到数据库的连接访问数据库事务处理可滚动和可更新的结果集JDBC数据源和连接池Mysql对中文的处理,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!