数据库讲解课件.ppt
- 文档编号:18692358
- 上传时间:2023-09-15
- 格式:PPT
- 页数:38
- 大小:303.50KB
数据库讲解课件.ppt
《数据库讲解课件.ppt》由会员分享,可在线阅读,更多相关《数据库讲解课件.ppt(38页珍藏版)》请在冰点文库上搜索。
数据库基础,概述,数据库是按照数据结构组织、存储和管理数据的仓库,内置了DBMS(databasemanagementsystem;数据库管理系统),并运行在操作系统之上。
数据库包含三类文件:
1.数据文件;2.控制文件;3.日志文件。
数据文件:
用于保存存储在数据库中的信息。
控制文件:
用于维持数据库正常运行的程序文件。
日志文件:
用于记录用户对数据库进行操作的日志信息和数据库日常工作的日志信息。
创建数据表,语法:
createtabletable_name(column_name1column_type1,column_name2column_type2,)说明:
table_name表名column_name1,column_name2,字段名column_type1,column_type2,字段类型,添加记录,语法:
insertintotable_name(column_name1,column_name2,)values(column_value1,column_value2,)说明:
table_name表名column_name1,column_name2,字段名column_value1,column_value2,字段存储的值,删除记录,语法:
deletefromtable_namewherecolumn_name1=column_value1and|orcolumn_name2=column_value2and|or说明:
table_name表名column_name1删除记录依据的字段名column_value1删除记录依据的字段值and表示与(同时满足条件的记录)or表示或(部分满足条件的记录),修改记录,语法:
updatetable_namesetcolumn_name1=column_value1,column_name2=column_value2,wherecolumn_name3=column_value3and|orcolumn_name4=column_value4and|or说明:
table_name表名column_name1,column_name2,字段名column_value1,column_value2,要修改成的字段值column_name3,column_name4,修改记录依据的字段名column_value3,column_value4,修改记录依据的字段值and表示与(同时满足条件的记录)or表示或(部分满足条件的记录),基本查询,语法Selectall|distinctFrom|,|WhereGroupbyhavingorderbyASC|DESC注:
Groupby的分组字段根据字段前后顺序分组Orderby排序字段根据字段前后顺序排序(后一个在前一个基础上排序),语法分析Selectall(获取全部记录)|distinct(去掉重复记录)(多个表包含重复列名需要指明所属表)From|,|Where(检索约束)Groupbyhaving(结果集约束)orderbyASC|DESC(ASC表示正序,DESC表示逆序),基本查询,高级查询,常用查询条件:
常用查询条件包括比较、确定范围、确定集合、模糊配置、是否空值和多重条件六部分,如下表所示:
已知表t1中的数据如下:
(以下示例均使用t1表),例1:
查询CODE小于1000的记录select*fromt1wherecodeabc结果为2、3、4行,比较运算符:
例3:
查询CODE范围在0到500之间的记录select*fromt1wherecodebetween0and500结果为3、4行同样,betweenand也支持非整型数据。
例4:
查询NAME范围在a至h之间的记录select*fromt1wherenamebetweenaandh结果为1、2、3行,1.若between后面的值小于and后面的值,则查询出的结果集为空,例如:
between2and0的结果集就为0.2.betweenand比较非数值类型数据时,遵循compareTo方法。
betweenand:
谓词IN可以用来查找字段值属于指定集合的记录例5:
查询CODE值包含在集合100,1600中的记录select*fromt1wherecodein(100,1600)结果为1、4行LIKE是在模糊查询时使用的关键字语法形式:
select*fromt1whereNAMELIKE%e%select*fromt1whereNAMELIKEg_注:
左侧带有%表示左侧模糊,右侧带有%表示右侧模糊,汉字占两个字节(两个_),In和Like:
IS是指定查询条件包含的字段是否为空值时使用的关键字注:
ISNOTNULL和ISNULL中IS和NOT的顺序例6:
查询NAME不为null的记录select*fromt1wherenameisnotnull结果为:
1、2、3、4行And|Or用于连接多个查询条件例7:
查询NAME为a开头并且CODE大于1000的记录select*fromt1wherenamelikea%andcode1000结果为:
1行,Is和And|Or:
IS是指定查询条件包含的字段是否为空值时使用的关键字注:
ISNOTNULL和ISNULL中IS和NOT的顺序例6:
查询NAME不为null的记录select*fromt1wherenameisnotnull结果为:
1、2、3、4行And|Or用于连接多个查询条件例7:
查询NAME为a开头并且CODE大于1000的记录select*fromt1wherenamelikea%andcode1000结果为:
1行,1.count函数,求结果集记录数例9:
selectcount(*)fromt1wherecode200结果为3,因为code值大于200的记录数为3条2.sum函数,求和(sum求和字段必须为数值类型)例10:
selectsum(code)fromt1结果为3000,因为100+400+900+1600=30003.avg函数,求平均值(avg求平均值字段必须为数值类型)例11:
selectavg(code)fromt1结果为750,因为3000/4=750,常用函数:
MySQL使用limit关键字能够获取表中一部分相邻行的记录信息。
语法格式:
select*fromt1limitstart,rows其中:
start为获取数据起始行(下标从0开始)。
rows为获取的记录行数。
例12:
查询t1表中第3条第7条记录的值select*fromt1limit3,5注意:
第3条第7条记录为3、4、5、6、7,所以limit的第二个参数为5。
MySQL的limit关键字,数据库的连接和嵌套查询,对两个表的单表查询结果如右图:
在成绩表中只存储了学生的学号,而没有存储学生的其他信息。
那么学员表与成绩表之间的关联只能通过学号(sid)这个字段完成。
如果需要将学员的基本信息和学员的考试成绩关联显示,需要以下SQL语句。
连接查询的结果如右图所示:
外连接包括左外连接、右外连接和全外连接三种,也可以简称为左连接、右连接和全连接。
左外连接:
leftjoinon以左侧表为主表右外连接:
rightjoinon以右侧表为主表全外连接:
fulljoinon两个表同时全部显示。
具体语法:
设表t1和t2如下图:
,查询结果如右图:
当使用左外连接和右外连接时,如果增加其他条件,则只能对从表(即非主表)进行条件过滤。
因为这两种连接方式一定会将主表的全部信息显示出来。
如果使用全外连接,因为两个表均为主表身份,所以会全部显示出来,如果增加了其他条件只会影响连接条件(on关键字后面紧跟的条件为连接条件),这样可能会造成查询记录的增加。
如下:
造成了id为1的关联失败,外连接组合其他条件:
嵌套查询:
在一个SELECT语句的WHERE子句或HAVING子句中嵌套另一个SELECT语句的查询称为嵌套查询。
嵌套查询通常是在一次查询不能满足条件的前提下使用的,子查询应使用最大范围的收敛方法,以减少外查询对内存的使用量。
同样以学员表和成绩表为例。
例1:
查询语文成绩大于85分的学员姓名。
分析:
成绩表中存储了学员的成绩信息,但是不包含学员的基本信息(如姓名、年龄等),分析结果如下:
(1)先对achievements表进行查询,获取语文成绩大于85的学员学号。
(2)再根据
(1)中的学号从student表中获取学员姓名。
语句如下:
嵌套连接:
例2:
查询年龄小于21岁的学生的各科成绩分析:
学员表中存储了学生的年龄信息,但是没有存储学员的考试成绩,分析结果如下:
(1)先从student表中查询年龄小于21岁的学生编号。
(2)再根据学员编号从achievements表中获取成绩信息。
语句如下:
JDBC连接数据库,JDBC是JavaDataBaseConnectivity的缩写,意思是Java程序连接和存取数据库的应用程序接口(API)。
此接口是Java核心API的一部分。
JDBC由一群类和接口组成,它支持ANSISQL-92标准,因此,通过调用这些类和接口所提供的成员方法,我们可以方便地连接各种不同的数据库,进而使用标准的SQL命令对数据库进行查询、插入、删除、更新等操作。
用JDBC连接数据库实现了与平台无关的客户机/服务器的数据库应用。
由于JDBC是针对“与平台无关”设计的,所以我们只要在Java数据库应用程序中指定使用某个数据库的JDBC驱动程序,就可以连接并存取指定的数据库。
而且,当我们要连接几个不同的数据库时,只需修改程序中的JDBC驱动程序,无需对其他的程序代码做任何改动。
Java程序和JDBC管理器,Java程序包括Java应用程序和小应用程序,主要是根据JDBC方法实现对数据库的访问和操作。
完成的主要任务有:
请求与数据库建立连接;向数据库发送SQL请求;为结果集定义存储应用和数据类型;查询结果;处理错误;控制传输、提交及关闭连接等操作。
JDBC管理器为我们提供了一个“驱动程序管理器”,它能够动态地管理和维护数据库查询所需要的所有驱动程序对象,实现Java程序与特定驱动程序的连接,从而体现JDBC的“与平台无关”这一特点。
它完成的主要任务有:
为特定数据库选择驱动程序;处理JDBC初始化调用;为每个驱动程序提供JDBC功能的入口;为JDBC调用执行参数等。
驱动程序处理JDBC方法,向特定数据库发送SQL请求,并为Java程序获取结果。
在必要的时候,驱动程序可以翻译或优化请求,使SQL请求符合DBMS支持的语言。
驱动程序可以完成下列任务:
建立与数据库的连接;向数据库发送请求;用户程序请求时,执行翻译;将错误代码格式化成标准的JDBC错误代码等。
JDBC是独立于数据库管理系统,而每个数据库系统均有自己的协议与客户机通信,因此,JDBC利用数据库驱动程序来使用这些数据库引擎。
JDBC驱动程序由数据库软件商和第三方的软件商提供,因此,根据编程所使用的数据库系统不同,所需要的驱动程序也有所不同。
这里的数据库是指Java程序需要访问的数据库及其数据库管理系统。
JDBC编程要点,在Java中使用数据库进行JDBC编程时,Java程序中通常应包含下述几部分内容:
(1)在程序的首部用import语句将java.sql包引入程序:
importjava.sql.*;
(2)使用Class.forName()方法加载相应数据库的JDBC驱动程序。
若以加载jdbc-odbc桥为例,则相应的语句格式为:
Class.forName(“com.mysql.jdbc.Driver”);,(3)定义JDBC的URL对象。
例如:
StringURL=jdbc:
mysql:
/localhost:
3306/jdbcTest(4)连接数据库。
Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);(5)使用SQL语句对数据库进行操作。
创建一个Statement,执行SQL语句,处理结果。
(6)使用close()方法解除Java与数据库的连接并关闭数据库。
例如:
s.close();1、关闭记录集2、关闭声明3、关闭连接对象,常用的JDBC类与方法,1DriverManage类java.sql.DriverManager类是JDBC的管理器,负责管理JDBC驱动程序,跟踪可用的驱动程序并在数据库和相应驱动程序之间建立连接。
如果我们要使用JDBC驱动程序,必须加载JDBC驱动程序并向DriverManage注册后才能使用。
加载和注册驱动程序可以使用Class.forName()这个方法来完成。
此外,java.sql.DriverManager类还处理如驱动程序登录时间限制及登录和跟踪消息的显示等事务。
java.sql.DriverManager类提供的常用成员方法如下:
(1)publicstaticsynchronizedConnectiongetConnection(Stringurl)throwsSQLException方法。
这个方法的作用是使用指定的数据库URL创建一个连接,使DriverManager从注册的JDBC驱动程序中选择一个适当的驱动程序。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(2)publicstaticsynchronizedConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLException方法。
这个方法使用指定的数据库URL和相关信息(用户名、用户密码等属性列表)来创建一个连接,使DriverManager从注册的JDBC驱动程序中选择个适当的驱动程序。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(3)publicstaticsynchronizedConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException方法。
它使用指定的数据库URL、用户名和用户密码创建一个连接,使DriverManager从注册的JDBC驱动程序中选择一个适当的驱动程序。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(4)publicstaticDrivergetDriver(Stringurl)throwsSQLException方法。
它定位在给定URL下的驱动程序,让DriverManager从注册的JDBC驱动程序选择一个适当的驱动程序。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(5)publicstaticvoidderegisterDriver(Driverdriver)throwsSQLException方法。
这个方法的作用是从DriverManager列表中删除指定的驱动程序。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(6)publicstaticintgetLoginTimeout()方法。
它用来获取连接数据库时驱动程序可以等待的最大时间,以秒为单位。
(7)publicstaticPrintStreamgetLogStream()方法。
它用来获取DriverManager和所有驱动程序使用的日志PrintStream对象。
(8)publicstaticvoidprintln(Stringmessage)方法。
它用来给当前JDBC日志流输出指定的消息。
Connection类:
java.sql.Connection类负责建立与指定数据库的连接。
Connection类提供的常用成员方法如下:
(1)publicStatementcreateStatement()throwsSQLException方法,用来创建Statement类对象。
(2)publicStatementcreateStatement(intresultSetType,intresultSetConcurrecy)throwsSQLException方法,用来按指定的参数创建Statement类对象。
(3)publicDatabaseMetaDatagetMetaData()throwsSQLException方法,用来创建DatabaseMetaData对象。
不同数据库系统拥有不同的特性,DatabaseMetaData类不但可以保存数据库的所有特性,并且还提供一系列成员方法获取数据库的特性,如取得数据库名称、JDBC驱动程序名、版本代号及连接数据库的JDBCURL。
(4)publicPreparedStatementprepareStatement(Stringsql)throwsSQLException方法,用来创建PreparedStatement类对象。
关于该类对象的特性在后面介绍。
(5)publicvoidcommit()throwsSQLException方法,用来提交对数据库执行添加、删除或修改记录(Record)的操作。
(6)publicbooleangetAutoCommit()throwsSQLException方法,用来获取Connection类对象的Auto_Commit(自动提交)状态。
(7)publicvoidsetAutoCommit(booleanautoCommit)throwsSQLException方法,用来设定Connection类对象的Auto_Commit(自动提交)状态。
如果将Connection类对象的autoCommit设置为true,则它的每一个SQL语句将作为一个独立的事务被执行和提交。
(8)publicvoidrollback()throwsSQLException方法,用来取消对数据库执行过的添加、删除或修改记录(Record)等操作,将数据库恢复到执行这些操作前的状态。
(9)publicvoidclose()throwsSQLException方法,用来断开Connection类对象与数据库的连接。
(10)publicbooleanisClosed()throwsSQLException方法,用来测试是否已关闭Connection类对象与数据库的连接。
Statement类:
java.sql.Statement类的主要功能是将SQL命令传送给数据库,并将SQL命令的执行结果返回。
Statement类提供的常用成员方法如下:
(1)publicResultSetexecuteQuery(Stringsql)throwsSQLException方法,用来执行指定的SQL查询语句,返回查询结果。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
publicintexecuteUPdate(Stringsql)throwsSQLException方法,用来执行SQL的INSERT、UPDATE和DELETE语句,返回值是插入、修改或删除的记录行数或者是0。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
publicbooleanexecute(Stringsql)throwsSQLException方法,用来执行指定的SQL语句,执行结果有多种情况。
如果执行结果为一个结果集对象,则返回true,其他情况返回false。
如果发生数据库访问错误,则程序抛出SQLException异常。
publicResultSetgetResultSet()throwsSQLException方法,用来获取ResultSet对象的当前结果集。
对于每一个结果只调用一次。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(5)publicintgetUpdateCount()throwsSQLException方法,用来获取当前结果的更新记录数,如果结果是一个ResultSet对象或没有更多的结果,则返回-1。
对于每一个结果只调用一次。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(6)publicvoidclearWarnings()throwsSQLException方法,用来清除Statement对象产生的所有警告信息。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
(7)publicvoidclose()throwsSQLException方法,用来释放Statement对象的数据库和JDBC资源。
如果发生数据库访问错误,则程序抛出一个SQLException异常。
PreparedStatement类:
java.sql.PreparedStatement类的对象可以代表一个预编译的SQL语句,它是Statement接口的子接口。
由于PreparedStatement类会将传入的SQL命令编译并暂存在内存中,所以当某一SQL命令在程序中被多次执行时,使用PreparedStatement类的对象执行速度要快于Statement类的对象。
因此,将需要多次执行的SQL语句创建为PreparedStatement对象,可以提高效率。
PreparedStatement对象继承Statement对象的所有功能,另外还添加一些特定的方法。
PreparedStatement类提供的常用成员方法如下。
(1)publicResultSetexecuteQuery()throwsSQLException方法,使用SQL指令SELECT对数据库进行记录查询操作,并返回ResultSet对象。
(2)publicintexecuteUpdate()throwsSQLException方法,使用SQL指令INSERT、DELETE和UPDATE对数据库进行添加、删除和修改记录(Record)操作(3)publicvoidsetDate(intparameterIndex,Datex)throwsSQLException方法,用来给指定位置的参数设定日期型数值。
(4)publicvoidsetTime(intparameterlndex,Timex)throwsSQLException方法,用来给指定位置的参数设定时间型数值。
(5)publicvoidsetDouble(intparameterIndex,doublex)throwsSQLException方法,用来给指定位置的参数设定Double型数值。
publicvoidsetFloat(intparameterIndex,floatx)throwsSQLException方法,用来给指定位置的参数设定浮点型数值。
(7)publicvoidsetInt(intparameterIndex,intx)throwsSQLException方法,用来给指定位置的参数设定整数型数值。
(8)publicvoidsetNull(intparameterIndex,intsqlType)throwsSQLException方法,用来给指定位置的参数设定NULL型数值。
ResultSet类:
java.sql.ResultSet类表示从数据库中返回的结果集。
当我们使用Statement和PreparedStatement类提供的executeQuery()方法来下达Select命令以查询数据库
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 讲解 课件