Chapter 7 JSP与JDBC数据库连接

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Chapter7JSP与JDBC数据库连接一、数据库的连接二、结果集的操作三、数据操纵一、数据库的连接1、数据库连接2、Java程序的数据库连接3、使用JDBC-ODBC桥连接、访问数据库1、数据库连接数据库连接一般有3种方法:利用ODBC专用驱动程序利用数据库厂家提供的函数库,直接编程。连接效率增高2、Java程序的数据库连接什么是JDBC?JavaDataBaseConnectivity,又称Java数据库连接技术。它以ODBC为基础,对ODBCAPI进行了面向对象的封装和重新设计。2、Java程序的数据库连接JDBC连接数据库JDBC支持如下2种方法连接数据库:ODBC专用驱动程序JDBC特点JDBC是一种低级API,直接调用SQL命令,因此性能极佳。JDBC也在相当高层提供了功能强大的对象来处理数据库,它易于学习和使用。2、Java程序的数据库连接(1)JDBC的任务主要完成如下三件事:与数据库建立连接向数据库发送SQL语句处理数据库返回的结果2、Java程序的数据库连接(2)为什么不直接使用ODBC?ODBC不适合在Java中直接使用:ODBC是一个C语言实现的API,从Java中调用本地的C程序在安全性、完整性、健壮性方面都有缺点。无法精确实现从ODBCAPI到JavaAPI的翻译(语言的限制:指针支持)。ODBC很难学不再是纯Java3、使用JDBC-ODBC桥连接、访问数据库ODBC驱动程序被广泛使用,JDBC提供了利用ODBC驱动程序(即JDBC-ODBC桥)访问数据库的方法。这种方法适用于企业内部网和三层结构中的应用服务器代码。3、使用JDBC-ODBC桥连接、访问数据库(1)注册、加载驱动程序//显式注册DriverManager.registerDriver(sun.jdbc.odbc.JdbcOdbcDriver);//隐式注册Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);说明:Class是包java.sql中的一个类,通过调用它的静态方法forName就能建立JDBC-ODBC桥接器了。3、使用JDBC-ODBC桥连接、访问数据库(2)建立连接Connectionconn=DriverManager.getConnection(jdbc:odbc:数据源,帐户,口令);例:Connectionconn=DriverManager.getConnection(jdbc:odbc:sample);说明:Connection是java.sql包中的一个类通过调用DriverManager的静态方法getConnection可以创建Connection对象。对于Access数据库,帐号、口令可以省略不写。3、使用JDBC-ODBC桥连接、访问数据库(3)向数据库发送SQL及处理结果//创建Statement对象Statementstmt=conn.createStatement();//建立结果集ResultSetrs=stmt.executeQuery(select*fromstudent);说明:一个Statement对象只能打开一个结果集。3、使用JDBC-ODBC桥连接、访问数据库(4)结果集的访问while(rs.next()){out.print(学号:+rs.getString(1));out.print(姓名:+rs.getString(2));……out.print(BR);}说明:结果集的next()方法返回一个boolean值,当有记录时,返回true,否则返回false。二、结果集的操作1、ResultSet对象2、获取ResultSet中的数据3、结果集记录的随机访问1、ResultSet对象ResultSet结果集对象,它非常类似于数据库中的cursor。二者都具有下列特点对应一个SELECT语句通过指针访问记录外部的修改可以实时地反映到结果集中可通过修改结果集,修改表中的数据2、获取ResultSet中的数据ResultSet对象提供了访问其数据的方法,具体如下:getString()、getBoolean()、getInt()、getLong()、getFloat()、getDouble()、getDate()、getTime()、getByte()、getBytes()此外,还提供了获取当前行号的方法getRow()2、获取ResultSet中的数据【参数】以getString()为例,可以使用2中参数getString(字段名)getString(字段序号)例:rs.getString(name)、rs.getString(1)【参数说明】字段序号——结果集中的字段序号对于指针的一次移动,所指向记录的字段不能被读取2次2、获取ResultSet中的数据Question:对于下面2条SQL语句生成的结果集,调用rs.getString(1)获得的数据是否一样?SELECT*FROMstudentSELECTclass,name,stuNoFROMstudent2、获取ResultSet中的数据【补充】ResultSetMetaData元数据对象,通过它可获得表结构方面的数据。它提供了下列2个有用的方法:getColumnCount()——获得列数getColumnName(i)——获得列名说明:所谓元数据就是“关于数据的数据”。2、获取ResultSet中的数据【补充】例:元数据对象的创建使用ResultSetrs=stmt.executeQuery(strsql);ResultSetMetaDatarmd=rs.getMetaData();intn=rmd.getColumnCount();while(rs.next()){for(i=0;in;i++){out.print(rmd.getColumnName(i+1)+:);out.print(rs.getString(i+1));}out.print(br);}3、结果集记录的随机访问前面介绍的结果集只能从头至尾访问记录,如何随机访问呢?这需要从Statement对象的定义入手。Statementstmt=conn.createStatement(指针类型,数据一致性参数);说明:方法中的2个参数都是int型,但通常我们都用字符串常数来表示。3、结果集记录的随机访问指针类型参数:值说明ResultSet.TYPE_FORWARD_ONLY默认。单向ResultSet.TYPE_SCROLL_SENSITIVE双向,反映实时改动ResultSet.TYPE_SCROLL_INSENSITIVE双向,不反映实时改动3、结果集记录的随机访问数据一致性参数值说明ResultSet.CONCUR_READ_ONLY默认。只读ResultSet.CONCUR_UPDATEABLE可修改3、结果集记录的随机访问示例:Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);Stringsql=“Select*Fromstudent;ResultSetrs=stmt.ExecuteQuery(sql);rs.afterLast();//指针移至最后longn=rs.getRow();rs.previous();//指针前移rs.close();stmt.close();3、结果集记录的随机访问移动指针next()——指针后移previous()——指针前移first()last()beforeFirst——第一条之前afterLast()——最后一条之后3、结果集记录的随机访问【练习1】输出本班学生记录,每条记录前加上序号【练习2】输出student表中各班的人数。三、数据操纵1、executeUpdate()方法2、操纵数据1、executeUpdate()方法Statement对象提供了2种方法,分别用于执行查询和数据修改。stmt.executeQuery()stmt.executeUpdate()前者只适用于Select语句,后者可以执行Delete、Insert、Update语句,甚至还支持CreateTable等创建对象的操作。1、executeUpdate()方法executeUpdate()的返回值与executeQuery()不同,executeUpdate()方法返回的是一个long型值,表示更新操作所影响的行数。例如:一个删除语句删除了5条记录,则返回值为5一个插入语句的返回值为1或0(插入不成功)。2、操纵数据(1)删除longrtn=0;Stringsql=DeleteFromstudentWhereclass='04网络4';rtn=stmt.executeUpdate(sql);if(rtn=0)out.print(删除失败br);elseout.print(删除了+rtn+条记录br);注意:不要省略From2、操纵数据(2)插入longrtn=0;Stringsql=InsertIntostudent(stuNo,name,class)Values('04402150','张睿','04网络4');rtn=stmt.executeUpdate(sql);if(rtn=0)out.print(插入失败br);elseout.print(插入了+rtn+条记录br);注意:不要省略Into2、操纵数据(3)更新longrtn=0;Stringsql=UpdatestudentSetclass='04网络2'WherestuNo='04402150');rtn=stmt.executeUpdate(sql);if(rtn=0)out.print(更新失败br);elseout.print(更新了+rtn+条记录br);2、操纵数据【练习1】试对student表作如下操作插入新学生李宏,学号03640120,班级04网络1李宏转到2班李宏退学了【练习2】连接到sample数据库,创建一个新表teacher(id,name,dept),添加3条数据,输出记录。

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功