javaee第八章数据库编程(netbeans版).ppt

上传人:小飞机 文档编号:5435960 上传时间:2023-07-06 格式:PPT 页数:114 大小:4.06MB
返回 下载 相关 举报
javaee第八章数据库编程(netbeans版).ppt_第1页
第1页 / 共114页
javaee第八章数据库编程(netbeans版).ppt_第2页
第2页 / 共114页
javaee第八章数据库编程(netbeans版).ppt_第3页
第3页 / 共114页
javaee第八章数据库编程(netbeans版).ppt_第4页
第4页 / 共114页
javaee第八章数据库编程(netbeans版).ppt_第5页
第5页 / 共114页
点击查看更多>>
资源描述

《javaee第八章数据库编程(netbeans版).ppt》由会员分享,可在线阅读,更多相关《javaee第八章数据库编程(netbeans版).ppt(114页珍藏版)》请在三一办公上搜索。

1、第八章 数据库JDBC编程,2,搭建JDBC开发环境,第八章 JDBC编程,数据库编程,执行带参数的SQL语句,基于连接池和数据源的访问数据库,BLOG字段的处理,分页显示,3,引子数据库,在关系型数据库中,数据以记录(Record)和字段(Field)的形式存储在数据表(Table)中,由若干个数据表构成一个数据库,班级表,4,8.1 搭建JDBC开发环境,安装MySQL数据库,8.1.2 JDBC简介,8.1.3 下载安装MySQL的JDBC驱动,5,安装MySQL数据库,1)下载&安装2)打开MySQL的托盘程序出现在任务栏【开始】-【程序】-MySQL-MySQLSystemTrayM

2、onitor3)启动MySQL服务器4)建表、插入、查询打开MySQL query browser 5)更改配置文件my.ini支持中文,返回,6,1)下载&安装MySQL和JDBC,1.下载MySQL50.45 一路缺省安装 安装并配置MySQL可以在安装时配置,也可以重新配置 如:记得设root的口令,比如我设的javaee 端口号,缺省为33062.下载MySQL的官方管理工具 3.下载安装MySQL的JDBC驱动,并将其配置到服务器的lib下 下载后,将压缩包内的拷贝到服务器JVM可以访问到的目录下,即服务器的lib目录下C:Program Filesglassfish-3.0.1gl

3、assfishlib(目前是),7,返回,8,3)启动MySQL服务器,法1MySQL托盘右键start Instance【法2】使用MySQL Administrator 开始程序MySQL MySQL Administrator用户名root 密码 javaee新建连接名为MySQL connection(其实就是新建了一个database,名为mysql,,新 建连接,9,新建连接,10,启动连接,11,进入MySQL Administrator配置管理,在MySQL管理台,可以停止服务、管理、看到MySQL数据库服务器的端口、协议、所在机器的IP地址等等,返回,12,4)建表、插入、查

4、询打开MySQL query browser,1.打开:程序MySQLMySQL Browser 或托盘右键MySQL Brower,返回,13,a)创建表customer,点右侧导航栏,选mysql库右键Create new Table,14,15,b)编辑表:点击customeredit table,双击字段的编辑框,16,然后观察右侧出现:mysql库下出现customer表,17,C)插入记录,点状态栏中的edit在编辑区右键Add row,然后点击相应的字段编辑框,直接可以输入记录(英文数据)目前不支持中文,中文处理见下页点状态栏apply change即提交,返回,18,5)配置M

5、ySQL 支持中文字段,【错误】mysql数据库无法录入中文数据【原因】因为mySQL缺省语言是latin1【修改】MySQL Administratorstartup variable def.char set填成 gbk,19,上页等价于更改配置文件my.ini支持中文,【错误】mysql数据库无法录入中文数据【原因】因为mySQL缺省语言是latin1【修改】C:Program FilesMySQLMySQL Server 5.0my.ini1.my.ini中客户端和服务器端默认的字符编码client后面加上这句(客户端)default-character-set=gbkmysql(服务

6、器端)default-character-set=gbk这个设置的是MYSQL自带的命令行显示和输入的mysqld default-character-set=gbk这个设置决定MySQL的工作环境的字符集!数据库继承MySQL设置的字符集,而表则继承数据库的字符集,字段则继承表的字符集!所以这里设置很重要!2.在设计字段时,选gbk字符集,否则往mySQL中还是输入汉字错误以上往MySQL录入中文没有问题了,20,支持中文(续),3.改完这些之后,只要把html、jsp页面上的编码方式都设置为gbk或 gb2312 input.html中 接受参数的jsp中 确保jsp显示支持中文 获得录入

7、界面传进的参数确保支持中文 这样在jsp中显示MySQL没有问题了,但是从jdbc向MySQL 录入或传递中文参数还有问题4.在使用jdbc的jsp页面中连接数据库的URL中声明中文编码,如下,这样才能支持从jdbc传往MySQL的中文参数String conURL=jdbc:mysql:/localhost:3306/mysql?useUnicode=true例子见幻灯片 44,21,设计字段时,选gbk字符集,22,点状态栏中的edit,双击字段,将beijing改为北京,再新增其它行记录然后applychanged,23,24,数据库建好了,我们怎么在程序中访问它呢?-JDBC,25,8

8、.1.2 JDBC简介,JDBC 为多种关系数据库提供了统一访问方式作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。数据库JDBC驱动程序:厂商提供的特定于数据库的访问APIJDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API!,26,JDBC访问数据库层次结构,27,8.1.3 下载安装MySQL的JDBC驱动,下载配置到应用服务器Glassfish的li

9、b目录下 下载后,将压缩包内的拷贝到服务器JVM可以访问到的目录下,即服务器的lib目录下(目前是C:apache-tomcat-6.0.26lib),28,8.2 JDBC编程4步曲,前奏:导入SQL包import java.sql.*;注册数据库的JDBC驱动(到JVM中)Class.forName(“org.git.mm.mysql.Driver”).newInstance()”);连接数据库 1)先定义数据库连接的URL对象 String conURL=“jdbc:mySQL:/localhost:3306/test”;或String conURL=“jdbc:odbc:TestDB”

10、;2)再连接数据库 例 JDBC URL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接的对象。Connection conn=DriverManager.getConnection(conURL,”username”,”password”)3.使用SQL语句对数据库操作 例 1)获得语句对象:statement对象:提供执行SQL的方法 2)获得结果集:ResultSet对象:SQL语句执行的结果集,first,next访问结果集记录 3)获得属性:getXXX(“字段名”)Connection sqlStmt=conn.createState

11、ment();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”);/获得String类型的字段title的值4.关闭数据库及各种对象conn.close(),jdbc:子协议/Servername:port/databasename,29,类,DriverManage类以下函数均为public和static的,均抛出SQLException,30,8.2.2JDBC URL格式,JDBC URL 的格式如下:jdbc:子协议:数据库

12、定位器 其中,定位器可能包括主机名、端口和数据库系统名MySQL数据库:jdbc:mysql:/机器名/数据库名jdbc:mySQL:/localhost/testOracle数据库:jdbc:oracle:thin机器名:端口名:数据库名 Access数据库:在机器上:建立ODBC数据源);/Access的odbc驱动 con=DriverManager.getConnection(jdbc:odbc:bookstore);/access的数据源,31,建立连接,给定具体的JDBC URL,获取数据库连接是在DriverManager对象调用getConnection()。两种:Driver

13、Manager.getConnection(url)DriverManager.getConnection(url,user,password)需要输入用户名和密码信息进行身份认证。,32,例8-1 测试数据库连接是否成功 P216,项目:DataWeb测试数据库连接test.jsp,33,conn=DriverManager.getConnection(jdbc:mysql:/localhost/test,root,javaee);%连接MySQL数据库成功!%,程序71:test.jsp,成功连接,连接失败,跳转到异常处理,34,35,8.3 从JSP中创建和执行简单SQL语句,JDBC建

14、立数据库连接后,就可以使用SQL语句对数据库操作,1.Statement对象:提供执行SQL的方法,2.ResultSet对象:SQL语句执行结果集,3.getXXX方法:对属性操作,Statement sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”);/获得String类型的字段title的值,36,Statement 对象执行SQL,Statement提供执行SQL

15、的方法1.创建Statement对象(使用Connection.creatStament)Connection sqlStmt=conn.createStatement();2.Statement的三种SQL语句 1)executeQuery():产生单个结果集,如SELECT 2)executeUpdate():用于 INSERT、UPDATE、返回更新行数DROP、DELETE:返回值为0 3)execute 执行任意一个SQL语句,37,2)ResultSet对象对结果集操作,代表SQL的executeQuery执行结果集符合SQL语句中的所有行ResultSet维护指向当前数据行的光标

16、记录指针,ResultSet类常用成员方法,38,3)对字段操作,Statement的成员方法:public void update类型(int ColumnIndex,类型x)throws SQLExceptionpublic int get类型(int ColumnIndex)throws SQLExceptionpublic int get类型(String ColumnName)Connection sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from custo

17、mer”)rs.first();String rs.getString(“title”);/获得String类型的字段title的值或 String rs.getString(1);/获得第1列的值,效果同上,列从左到右,从1开始编号,39,例:对customer表简单查询所有记录,该 表已经在前面通过MySQL Query browser建立在mysql库下customer表用户root 密码javaee,40,数据库mysql customer表,MySQL数据库服务器,JDBC,select customerid,address,phone from customer,select cu

18、stomerid,firstname,lastname,address from customer where firstname like“张”,41,customer2.jsp(程序8-3 P221),顾客信息表 ID 地址 电话,43,运行,1.启动MySQL服务器2.启动glassfish服务器3.发布customer2.jsp到glassfish上4.火狐中输入http:/localhost:8080/DataWeb/customer2.jsp,44,8.4 带参数的SQL查询,背景:前面的例子:是列出所有客户的信息如果想在查询界面,按顾客姓名查询怎么办呢?prepareStatem

19、ent对象它包含的SQL语句中可以具有1n个IN参数待定参数IN参数在SQL语句创建时未指定,用?标识每个?的值用setXXX指定执行查询(改为均不带参)execute()executeQuery()executeUpdate(),preparedStmt=conn.prepareStatement(select customerid,firstname,lastname,address from customer where firstname like?);/不是createStatement,是prepareStatementString parm=request.getParamete

20、r(parm);/利用request获得input.jsp输入的待查姓名preparedStmt.setString(1,parm);/设置prepareStatement的第一个?对应的待填参数sqlRst=preparedStmt.executeQuery();/执行查询,顾客姓名.,input.jsp,searchResult.jsp,45,该 表已经在前面通过MySQL Query browser建立在mysql库下customer表用户root 密码javaee新增两个字段firstname、lastname用于姓名查询,46,启动MySQL服务器,打开MySQL Query bro

21、wser在右侧导航栏点击mysql库之customer表右键edit table加入firstname、lastname两个字段,47,48,49,input.jsp,查询条件 顾客姓名,50,searchResult.jsp,51,顾客信息表%/end of try,52,更正P222 serarchResult.jsp,P222倒数第2行此后该程序中所有java.sql.Result之类的全部删去java.sql如P223第1,2、3、6、等因为已经导入包了,后面直接用类名即可2.P223第6行conn=DriverManager.getConnection(jdbc:mysql:/loc

22、alhost:3306/mysql,root,javaee);Mysql后加入指定编码集,否则jdbc不支持向MySQL传递中文参数jdbc:mysql:/localhost:3306/mysql?useUnicode=true以保证从input.jsp中通过request获得的参数支持中文4.P223中部 while(sqlRst.next()/如果下条记录不为空 后面改为 String name=sqlRst.getString(“firstname”)+sqlRst.getString(“lastname”);,删去.getBytes(“iso-8859-1”)因为前面已经在MySQL的

23、配置、jsp的page指令以及jdbc连接处都做了支持中文的处理,所以删去这里,53,catch(SQLException e)out.println(e.toString();finallyif(sqlRst!=null)sqlRst.close();/关闭结果集 if(preparedStmt!=null)preparedStmt.close();/关闭SQL语句对象 if(conn!=null)conn.close();/关闭数据库连接对象%,54,8.5 基于连接池数据源的MySQL数据库访问,JDBC作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行Web应用程序开发,存

24、在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重

25、启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。,55,数据库连接池(connection pool)原理,1、基本概念及原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。2、服务器glassfish自带的连接池 JDBC的A

26、PI中没有提供连接池的方法 连接池实际上是JDBC为第三方应用服务器提供的一个由数据库厂家实现的管理标准接口。(我用的是glashfish的),JDBC接口层,J2EE应用,JDBC API,数据库JDBC驱动程序,Sun,JDBC驱动层,数据库,数据库厂商,应用层,Connection,ResultSet,Statement,连接池,图810:基于连接池的数据库访问结构体系,程序员开发,PooledStatement,PooledConnection,PooledResultSet,57,1)配置Glassfish-3下的MySQL数据连接池,登录Glassfish-3的管理页面http:/

27、localhost:4848/缺省账号admin,密码adminadmin在Glassfish服务器上建立数据连接池左侧资源JDBC,右侧将出现连接池,点击新建数据连接池名:MySQL资源类型选:厂商选:MySql下一步设置数据源名称dataSource名:mysql(修改书上的将sample改为我建的mysqlserverName:localhostport:3306user:rootpassword:javaee,58,59,60,61,已经自动输入数据源类名,需要继续填下面的表,62,下一步设置数据源名称dataSource名:mysql(修改书上的将sample改为我建的mysqlse

28、rverName:localhostport:3306user:rootpassword:javaee 配好后:单击完成,63,64,配置完成后,确认一下自动拼接的数据库连接字串url是否正确(有时因为开源的工具有bug,可能会有问题,会在运行中出现:No database selected),Jdbc:mysql:/Servername:port/databasename,65,测试连接池,点击连接池MySQLping,66,测试连接池成功,67,2)创建基于连接池的GlassFish数据源,仍旧在Glassfish控制台资源JDBC资源新建JNDI名称:sample池名称:选刚才建的MyS

29、QL数据池确定重启Glassfish,使之生效,68,3)编测试数据源页面testDataSource.jsp,select customerid,address,phone from customer DB Test 数据源连接结果 customerid$row.customerid address$row.address phone$row.phone,69,8.5.3 例8-6,重写customer2.jsp,变jdbc直连为数据源,1.加入数据源对象2.改为基于数据源的连接,/加入数据源对象 InitialContext context=new InitialContext();Dat

30、aSource dataSource=(DataSource)context.lookup(java:comp/env/sample);,/Class.forName(org.gjt.mm.mysql.Driver).newInstance();/conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/mysql,root,javaee);conn=dataSource.getConnection();/改为基于数据源的连接,70,customer2.jsp(程序8-3 P221),基于连接池和数据源访问数据库,/加入数据源对象

31、InitialContext context=new InitialContext();/DataSource dataSource=(DataSource)context.lookup(java:comp/env/sample);DataSource dataSource=(DataSource)context.lookup(“sample”);/netbeans6.9下直接用,/Class.forName(org.gjt.mm.mysql.Driver).newInstance();/conn=DriverManager.getConnection(jdbc:mysql:/localhos

32、t:3306/mysql,root,javaee);conn=dataSource.getConnection();/改为基于数据源的连接,别忘了java:comp/env/建的数据源都得加这个,否则命名空间找不到,71,其它的都不改,顾客信息表 ID 地址 电话,72,73,74,元数据对象DatabseMetaData和ResultSetMeta,元数据:描述数据的数据:数据库中有多少表,表中的字段的含义?表一级:就是表的结构ResultSetMeta对象有几列?多少个字段?getColumCount()字段的名称都是什么?getColumName()各个都是什么类型的?getColumT

33、ype()数据库一级的:DatabaseMetaData对象当前数据库是什么数据库。比如oracle,access等数据库的版本?一个表的信息、模式、表的名字getTables,75,DatabaseMetaData对象 提供的是关于数据库的各种信息,这些信息包括:1)数据库与用户,数据库标识符以及函数与存储过程。2)数据库限制。3)数据库支持不支持的功能。4)架构、编目、表、列和视图等。2.ResultSetMeta对象 1)ResultSetMetaData存储了 ResultSet的MetaData 2)ResultSet是以表格的形式存在,所以getMetaData就包括了 数据的字段

34、名称、类型以及数目等表格所必须具备的信息。,76,ResultSetMeta,ResultSet是以表格的形式存在,ResultSetMetaData存储了 ResultSet的MetaData.1.获得元数据对象ResultSet接口的.getMetaData():返回描述ResultSet的ResultSetMetaData对象 包括了 数据的字段名称、类型以及数目等表格所必须具备的信息2.ResultSetMetaData接口:getColumnCount():返回ResultSet中列的数目 public int getColumCount()throws SQLException 返

35、回所有字段的数目 getColumnName():返回列在数据库中的名称 public String getColumName(int colum)throws SQLException。根据字段的索引值取得字段的名称。colum,字段的索引值,从1开始。getColumnType():返回列的SQL类型 public String getColumType(int colum)throws SQLException。方法说明:根据字段的索引值取得字段的类型,返回值的定义在isReadOnly():表示该数据项是否为只读值 isNullable():表示该列是否可以存储NULL,77,得到Re

36、sultSet的元数据对象,获得结果集的记录总数,78,顾客信息表 col+)%,获得字段名,获得字段值,79,80,l,81,8.7 分页显示,数据库查询时,记录非常多,一页看不完,分页显示思路:设置一页显示的记录数intRowCount,然后按照记录总数进行计算,算出总页数。无论首页还是以后跳转的页均使用page.jsp代码page.jsp按当前页数,计算出结果集中的起始记录的位置,并定位到该条记录,然后按照一页的记录数读出并显示。在点击上、下页跳转时,将待跳转的页码用用request对象的参数“page”来传递而跳到指定页后,page.jsp先从request中读出当前页码,然后计算应从

37、数据集中读出的记录数,并定位到本页的起始记录的那个位置。,82,%Connection sqlCon=null;/数据库连接对象Statement sqlStmt=null;/SQL语句对象ResultSet sqlRst=null;/结果集对象int intPageSize;/一页显示的记录数int intRowCount;/记录总数int intPageCount;/总页数int intPage;/待显示页码String strPage;/存request传递来的当前“page”页码intPageSize=2;/设置一页显示的记录数strPage=request.getParameter(

38、page);/取得待显示页码if(strPage=null)/表明request中没有这个参数,即为显示第一页intPage=1;elseintPage=Integer.parseInt(strPage);if(intPage1)intPage=1;,83,Class.forName(org.gjt.mm.mysql.Driver).newInstance();/装载JDBC驱动sqlCon=DriverManager.getConnection(jdbc:mysql:/localhost:3306/mysql,root,javaee);/连接数据库sqlStmt=sqlCon.createS

39、tatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);/创建语句对象,双向滚动,只读sqlRst=sqlStmt.executeQuery(SELECT customerid,phone from customer);/执行SQL语句获得结果集intRowCount=sqlRst.getMetaData().getColumnCount();/获得结果集记录总数intPageCount=intRowCount/intPageSize+1;/计算总页数%,84,页次:/页 条/页 ID 电话0)sqlRst.

40、absolute(intPage-1)*intPageSize-1);/若不是第一页,则结果集绝对定位到当/前页的起始记录=(当前页码-1)*页面大小-1;int i=0;while(i,85,1)%上一页下一页,86,87,SQL语言的操作对象主要是数据表。依照SQL命令操作关系型数据库的不同功能,可将SQL命令分成数据定义语言DDL(Data Definition Language)、数据操纵语言DML(Data Manipulation Language)、数据查询语言DQL(Data Query Language)和数据控制语言DCL(Data Control Language)四大类

41、。我们这里只介绍前三类。,附录A:常用SQL语句,88,数据定义语言 数据定义语言提供对数据库及其数据表的创建、修改、删除等操作,属于数据定义语言的命令有Create、Alter和Drop。0.创建数据库 create database 数据库名 1创建数据表 在SQL语言中,使用CREATE TABLE语句创建新的数据库表格。CREATE TABLE语句的使用格式如下:CREATE TABLE 表名(字段名l 数据类型限制条件,字段名2 数据类型限制条件,字段名n 数据类型限制条件),(一)数据定义1.创建数据库和表CREATE,89,说明:(1)表名是指存放数据的表格名称;字段名是指表格中

42、某一列的名称,通常也称为列名。表名和字段名都应遵守标识符命名规则。(2)数据类型用来设定某一个具体列中数据的类型。(3)所谓限制条件就是当输入此列数据时必须遵守的规则。这通常由系统给定的关键字来说明。例如,使用UNIQUE关键字限定本列的值不能重复;NOT NULL用来规定表格中该列的值不能为空;PRIMARYKEY表明该列为该表的主键(也称主码),它既限定本列的值不能重复,也限定该列的值不能为空。(4)表示可选项(下同)。例如,CREATE语句中的限制条件便是一个可选项。,90,修改数据表包括向表中添加字段和删除字段。这两个操作都使用ALTER命令,但其中的关键字有所不同。1)添加字段使用的

43、格式为:ALTER TABLE 表名 ADD 字段名 数据类型 限制条件2)删除字段使用的格式为:ALTER TABLE 表名 DROP 字段名,2修改数据表 ALERT,91,在SQL语言中使用DROP TABLE语句删除某个表格及表格中的所有记录,其使用格式如下:DROP TABLE 表名,3删除数据表DROP,92,数据操纵语言用来维护数据库的内容,属于数据操纵语言的命令有Insert、Delete和Update。1向数据表中插入数据 SQL语言使用INSERT语句向数据库表格中插入或添加新的数据行,其格式如下:INSERT INTO 表名(字段名l,字段名n)VALUES(值l,值n)

44、说明:命令行中的“值”表示对应字段的插入值。在使用时要注意字段名的个数与值的个数要严格对应,二者的数据类型也应该一一对应,否则就会出现错误。,(二)数据操纵语言1.向数据表插入数据insert into,93,SQL语言使用UPDATE语句更新或修改满足规定条件的现有记录,使用格式如下:UPDATE 表名 SET 字段名l 新值l,字段名2 新值2 WHERE 条件 说明:关键字WHERE引出更新时应满足的条件,即满足此条件的字段值将被更新。在WHERE从句中可以使用所有的关系运算符和逻辑运算符。,2数据更新语句 update,94,SQL语言使用DELETE语句删除数据库表格中的行或记录,其

45、使用格式如下:DELETE FROM 表名 WHERE 条件 说明:通常情况下,由关键字WHERE引出删除时应满足的条件,即满足此条件的记录将被删除。如果省略WHERE子句,则删除当前记录。,3删除记录语句delete,95,数据库查询是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询,并以数据表的形式返回符合用户查询要求的结果数据。SELECT语句具有丰富的功能和灵活的使用方式,其一般的语法格式如下:SELECT DISTINCT 字段名l,字段名2,FROM 表名 WHERE 条件,(三)数据查询语句select,96,其中:DISTINCT表示不输出重复值,即当查询结果

46、中有多条记录具有相同的值时,只返回满足条件的第一条记录值;语句中的字段名用来决定哪些字段将作为查询结果返回。用户可以按照自己的需要返回数据表中的任意的字段,也可以使用通配符“*”来表示查询结果中包含所有字段。,97,2Connection类 类负责建立与指定数据库的连接。常用成员方法如下:(1)public Statement createStatement()throws SQLException用来创建Statement类对象。(2)public Statement createStatement(int resultSetType,int resultSetConcurrecy)thro

47、ws SQLException方法,用来按指定的参数创建Statement类对象。(3)public DatabaseMetaData getMetaData()throws SQLException用来创建DatabaseMetaData对象。不同数据库系统拥有不同的特性,DatabaseMetaData类不但可以保存数据库的所有特性,并且还提供一系列成员方法获取数据库的特性,如取得数据库名称、JDBC驱动程序名、版本代号及连接数据库的JDBC URL。(4)public PreparedStatement prepareStatement(String sql)throws SQLExce

48、ption用来创建PreparedStatement类对象。关于该类对象的特性在后面介绍。(5)public void commit()throws SQLException用来提交对数据库执行添加、删除或修改记录(Record)的操作。,附录B Connection类,98,(6)public boolean getAutoCommit()throws SQLException方法,用来获取Connection类对象的Auto_Commit(自动提交)状态。(7)public void setAutoCommit(boolean autoCommit)throws SQLException方

49、法,用来设定Connection类对象的Auto_Commit(自动提交)状态。如果将Connection类对象的autoCommit设置为true,则它的每一个SQL语句将作为一个独立的事务被执行和提交。(8)public void rollback()throws SQLException方法,用来取消对数据库执行过的添加、删除或修改记录(Record)等操作,将数据库恢复到执行这些操作前的状态。,99,(9)public void close()throws SQLException方法,用来断开Connection类对象与数据库的连接。(10)public boolean isClos

50、ed()throws SQLException方法,用来测试是否已关闭Connection类对象与数据库的连接。,100,3Statement类 类的主要功能是将SQL命令传送给数据库,并将SQL命令的执行结果返回。Statement类提供的常用成员方法如下:(1)public ResultSet executeQuery(String sql)throws SQLException方法,用来执行指定的SQL查询语句,返回查询结果。如果发生数据库访问错误,则程序抛出一个SQLException异常。(2)public int executeUPdate(String sql)throws SQ

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号