您的位置:首页 > 编程语言 > Java开发

[疯狂Java]JDBC:JDBC/ODBC基本概念、MySQL基本命令、SQL语句基本概念

2016-03-31 14:10 573 查看
1. JDBC基本概念:

1) 即Java Database Connectivity的简称,即Java数据库连接;

2) 它是一组API,提供连接数据库、执行SQL查询并返回查询结果的功能;

3) JDBC夸平台、跨数据库:

i. JDBC本身就是基于JVM的,因此JDBC必然跨平台;

ii. 跨数据库是JDBC的一种典型的面向接口编程:

a. Sun一开始想为所有商业数据库实现JDBC的驱动,但是发现太不现实,商业数据库体系太庞大,而且各有各的特点,工作量太大;

b. 于是Sun就设计了一组标准的API接口(即编写Java数据库程序都用这组API),但是这些接口都未实现,里面的驱动都交给各个数据库厂商实现,这样就大大减轻了工作量;

c. 也就是说用户使用的是同一组API来操作数据库,但是底层使用的驱动程序可以是不同数据库的,因此JDBC就允许在不同数据库之间切换但不改变调用的方法;

d. 这就完美地实现了跨数据库;

e. 只要在连接数据库时制定好数据库的品牌,接下来的所有工作在任何数据库上都是完全一样的(即调用的API完全一样),完全隐藏了底层数据库的不同;

2. JDBC基于ODBC思想:

1) ODBC是Open Database Connectivity的简称,即开放式数据库连接;

2) 它的思想就是提供一组通用的API,而这些API(数据库驱动)由各个数据库厂商自实现,但是ODBC负责统一管理这些驱动程序(类似苹果的App Store的模式);

3) JDBC就是模仿ODBC设计的,虽然JDBC在结果和表面上和ODBC一致,但是在实现上并未严格的按照ODBC思想来;

4) JDBC驱动的实现方式:

i. JDBC-ODBC桥:JDBC调用ODBC的API(ODBC比JDBC更通用,并且ODBC比JDBC更早出现),而ODBC的API由各个厂商实现,但是这种两层映射导致效率低下,现已被淘汰,最早出现是因为这样实现JDBC及其简单而且开发快速成本低,主要是为了达到快速推广JDBC的商业目的;

ii. 本地调用:JDBC直接调用本地数据库的API代码(如果本地数据库API使用C++写的,那就相当于Java调用C++本地代码),这样做效率最最高,但是会丧失一部分跨平台性,代码维护量较大;

iii. 纯Java驱动:JDBC驱动完全用纯Java编写,效率结余本地调用和JDBC-ODBC桥之前,但是非常智能,并且商业价值最最高,是目前最流行的JDBC实现方法;

iv. Applet专用JDBC:负责让Applet操作数据库;

3. 多使用标准SQL语法完全实现跨数据库:

1) 由于不同数据库厂商实现自己的数据库时或多或少会提供一些自己特有的功能,因此除了标准的SQL语句之外都会在其上扩展一些新的语句添加一些新的功能;

2) 即使是跨数据库的JDBC仍然可以使用这些特有的SQL,但是这就会丧失一部分跨数据库的能力;

3) 因此要完全的做到跨数据库就尽量少用这些属于特定数据的扩展,尽量只用标准的SQL语句,标准SQL语句在任何数据库上都是通用的;

4. 数据库/关系数据库基本概念:

1) 数据库是数据库和数据库管理系统的统称,前者数据库是指仅仅用来存放用户数据的地方,而后者DBMS(Database Management System)是指管理数据库的软件库;

2) 数据库本身只是用户数据的集合,而DBMS负责数据的存储(存储结构)、安全、一致、并发、恢复、访问等;

3) 元数据(metadata):是指数据字典,即关于数据的数据(比如描述数据库中的条目的属性、类型等的数据),也称为系统表(描述跟数据库本身有关的数据);

4) 关系数据库:

i. 数据库历史上出现过很多类型的数据库,其中关系数据库理论最成熟,使用时间最长(长达30年之久),且应用最广泛,商业化程度最高;

ii. 其基本存储单元就是数据表,因此关系数据库就是大量数据表的集合;

iii. 数据表以行列存放数据,一行就是一个数据条目,列是数据的属性,列是需要确定的,但是行是动态改变的,因为数据条目是动态删减的;

5. MySQL的基本命令即语法:

1) 这里使用MySQL作为Java开发的数据库,虽然JDBC可以跨数据库(因此可以使用其它数据库),但是MySQL非常轻量,而且使用方便,因此优先选择MySQL;

2) MySQL管理系统的一个实例可以包含多个数据库:这句话的意思其实就是,可以把MySQL系统看做一个类,它的实例就是一个数据库管理系统对象,一个对象中可以建立多个数据库;

3) MySQL默认以分号;作为每条命令的结束符!

4) 5条最基础的MySQL命令:MySQL命令指示MySQL这个软件提供的命令,并不是SQL语句!

i. 创建数据库:create database 数据库名;

ii. 删除指定数据库:drop database 数据库名;

iii. 要查询或操作一个数据库中的内容必须先进入该数据库才行:use 数据库名;

iv. 进入数据库后可以查看该数据库中包含多少张表:show tables;

v. 查看一张表的表结构(有多少行、多少列、属性的类型):desc 表名;

vi. 查看当前系统对象中有多少个数据库:show databases;

5) SQL脚本:如果想要一次执行多条SQL命令或SQL查询,则可以将所有命令和语句写在一个.sql脚本中,然后用DBMS执行该脚本即可,这种就是注入(导入)SQL脚本;

6. 存储机制:

1) MySQL支持两种存储机制:

i. MyISAM:一种早期的存储机制,对事务支持不够好;

ii. InnoDB:提供良好的事务安全机制;

2) 事务是Java EE最重要的特性,因此通常推荐使用InnoDB,5.0以上版本的MySQL默认使用的就是InnoDB;

3) 在建表时可以在建表语句后添加ENGINE选项强制指定使用哪种存储机制:

i. ENGINE=MyISAM

ii. ENGINE=InnoDB

7. SQL语句:

1) 全称是Structured Query Language,即结构化查询语言,是操作和检索关系型数据库的标准语言(注意:其对象是关系型数据库);

2) 可以使用SQL操作关系型数据库的角色主要有两种,一种是普通程序员(编写数据库交互应用程序的),另一个是数据库系统管理员DBA,两者的分工主要为:

i. 程序员:主要关注软件产品的数据库交互部分,主要实现数据库信息的检索、更新以及数据结构的控制(业务逻辑);

ii. DBA:安全管理,权限管理,主要为上层的应用程序提供支持(更底层);

3) SQL语句的关键字(select、alter等)不区分大小写!!

4) SQL语句主要有一下5大类型:

i. 查询语句:即select语句,是SQL中最复杂、最灵活、功能最丰富的语句;

ii. DML(Data Manipulation Language,数据操作语言):由insert、update、delete等组成;

iii. DDL(Data Definition Language,数据定义语言):由create、alter、drop、truncate(高级的删除)等组成;

iv. DCL(Data Control Language,数据控制语言):主要功能是权限以及安全的管理,由grant、revoke等组成;

v. 事务控制语句:有commit、rollback、savepoint等组成;

5) SQL语句是格式自由的,即空格可以随意加,在随意位置加,和C、Java一样;

8. SQL标识符:

1) 用于定义数据库名、表名、列名,以及脚本中的变量名等;

2) 命名规则:

i. 必须以字母开头;

ii. 可以使用字母、数字、#、_、$,最后三种特殊字符;

iii. 命名不要和SQL关键字、保留字等重复;

iv. 同一个外模式下的对象不要重名;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: