使用Java实现数据库编程学习总结——田超凡 |
一.数据库的设计1. 规范设计数据库的步骤: 收集信息、标识实体、标识实体属性、标识实体之间的关系 2. E-R图:实体——关系图(Entity-Relationship),用来表示实体的组成部分和实体之间的关系。 矩形名词代表实体,椭圆名词代表属性,菱形动词表示关系 3. 数据库模型图UML:数据库模型图是在详细设计步骤时绘制的清晰表示各个实体(数据表),各个字段(列),标识了主外键关系的一个模型图,作用是更直观的展现数据库各个实体以及实体之间的关系。 4. 映射基数:映射基数指的是各个数据实体之间的关联关系,常见映射基数有以下几种: 一对一 1:1 一对多 1:N 多对一 N:1 多对多 M:N 5. 三大范式:三大范式(3NF)是规范设计数据库必须遵循的标准,是设计数据库的规范,其中三个范式的具体含义如下: 第一范式(1NF):确保每列的原子性(每列都是不可再分的最小数据单元) 第二范式(2NF):确保每列都和主键相关(每个表只描述一件事情) 第三范式(3NF):每列都和主键直接相关,不能间接相关(除主键列以外的其他列不传递依赖于主键列) 6. 三大范式对性能的影响:有时为了方便检索数据库中的数据,会在设计数据库时适当添加冗余字段,以空间换取时间。其次,在严格遵循使用三大范式设计数据库时会对数据库的性能产生影响。因此实际设计数据库时,既需要考虑三大范式,也需要考虑数据库的系统性能。
二.初识MySQL 1. MySQL是Oracle公司旗下的又一强大的关系型数据库,目前由企业版和社区版两种版本供用户下载使用。 2. 安装MySQL需要遵循的步骤: ①官网下载MySQL,启动安装程序 ②设置默认端口号,默认为3306,设置MySQL服务名,默认服务名为MySQL ③设置数据库默认字符集,默认选中latin1(ISO-8859-1),建议设置为utf8,对中文兼容性更好 ④勾选安装时自动配置环境变量,也可在安装后手动像配置jdk一样配置MySQL环境变量 ⑤选择安装路径,完成安装。 3. 启动MySQL常用DOS命令 ①启动MySQL服务 net start mysql; ②关闭MySQL服务 net stop mysql; ③登录MySQL服务器 mysql -u root -p密码; mysql -u root -p; Enter password:输入密码 ④退出MySQL服务器: exit; ⑤查看系统帮助 HELP指令 4. 回顾SQL语言(Struct Query Language)结构化查询语言 SQL语言组成: DDL数据定义语言,定义数据库、表、约束 DML数据操作语言:数据增删改 DQL数据查询语言:数据查询 DCL数据控制语言:权限的管理和回收等 TCL事务控制语言:事务的处理(此处仅作了解)
①DDL数据定义语言: 创建数据库: DROP DATABASE IF EXISTS 数据库名 CREATE DATABASE 数据库名 创建数据库表: DROP TABLE IF EXISTS 数据表名 CREATE TABLE 表名 ( 列名 数据类型 列的特征(null/not null),约束等 ) 添加约束: ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 约束内容
修改表结构: ALTER TABLE 表名 RENAME 新表名 (修改表名称) ALTER TABLE 表名 ADD 列名 数据类型 列的特征 (添加列) ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型 列的特征(修改列名和列的特征) ALTER TABLE 表名 DROP COLUMN 列名 (删除列)
DML数据操作语言: 插入数据: ①一次插入一条记录 INSERT INTO 表名(列名) VALUES (值) ②一次插入多条记录 插入已存在表中: INSERT INTO 表名(列名) VALUES (值),(值),(值).... 插入新表中:自动创建新表 CREATE TABLE 表名 (SELECT 语句)
修改数据 UPDATE 表名 SET 列名=值 WHERE 更新条件
删除数据 DELETE FROM 表名 WHERE 删除条件 清空表中数据 TRUNCATE TABLE 表名 DELETE FROM 表名
DQL数据查询语言: SELECT 列名 FROM 表名 WHERE 查询条件 GROUP BY 分组 HAVING 分组筛选 ORDER BY 排序(ASC升序,默认值/DESC降序) LIMIT 行偏移量,行数
DCL数据控制语言 创建用户: CREATE USER 用户名 IDENTIFIED BY 密码 创建用户并授权: GRANT 权限 ON 数据库名.表名 TO 用户名@`localhost` IDENTIFIED BY 密码 修改用户密码: DOS命令:mysqladmin -u 用户名 -p password 新密码 SQL命令: SET PASSWORD FOR 用户名@`localhost`=PASSWORD(新密码) 删除用户: DROP USER 用户名1@`localhost`,用户名2@主机名 查看所有用户: USE mysql; SELECT * FROM `user`;
拓展SHOW语句 ①查看所有数据库 SHOW DATABASES; ②查看当前数据库的所有数据库表 USE 数据库名; SHOW TABLES; ③查看默认字符集 SHOW VARIABLES LIKE ‘character_set_%’ ④查看表结构 DESCRIBE 表名 DESC 表名 ⑤查看导出文件路径 SHOW VARIABLES LIKE ‘secure%’
三.子查询 SELECT 列名 FROM 表名 WHERE 列名=(子查询) 注意:以上语句中的子查询只能返回唯一结果(因为使用的是关系运算符,关系运算符左右两边的值只能返回唯一结果),如果返回多条记录,将引发query more than 1 row异常 IN/NOT IN子查询 SELECT 列名 FROM 表名 WHERE 列名 IN(子查询语句)/NOT IN(子查询语句) IN子查询作用:判断某列的值是否存在于某个范围内,类似于OR运算符的作用,IN后面子查询查询出的结果作为列举值并逐个与IN前面的列值判断,如果IN前面的列值为其中之一,则返回true,都不匹配返回false
NOT IN运算符作用:进行IN子查询的取反操作,及如果如果IN前面的列值为子查询查询出的结果的其中之一,则返回false,都不匹配返回true
EXISTS/NOT EXISTS子查询 SELECT 列名 FROM 表名 WHERE EXISTS (子查询)/NOT EXISTS(子查询)
EXISTS作用:判断某列的值是否存在于子查询语句查询的结果中,仅判断是否存在。如果存在返回true,不存在返回false NOT EXISTS作用:作用同上,但是是对EXISTS的结果进行取反操作。即不存在返回true,存在返回false
四:MySQL常用函数 字符串函数: CONCAT()拼接 UPPER()转换为大写 LOWER()转换为小写 SUBSTRING()截取字符串
日期函数: NOW()当前系统日期和事件 CURDATE()当前系统日期 CURTIME()当期系统时间 DATEDIFF()日期差
数学函数: CEIL()向上取整 FLOOR()向下取整 ROUND()四舍五入 RAND()返回0-1之间的随机数
五.事务、视图、索引、备份和恢复、数据导入和导出 事务:事务是一个整体,必须同时执行,要么成功,要么失败,从而保证数据库中数据状态一致。 事务的特性(ACID): 原子性:事务是不可再分的最小逻辑工作单元,必须同时执行,要么全部执行,要么都不执行。 一致性:事务在开始前和提交回滚后,数据库中的数据保持一致状态。 隔离性:事务和事务之间相互独立,互不干涉。 持久性:事务成功提交或回滚后,对数据库数据造成的影响是持久的。 语法: 开启事务 BEGIN; START TRANSACTION; 提交事务 COMMIT; 回滚事务 ROLLBACK;
视图:视图可以理解为虚拟表,是表数据的引用。视图可以互相嵌套,主要用来做查询,可以增删改数据,将会同步引用的表的数据。 创建视图: CREATE VIEW 视图名 删除视图 DROP VIEW 视图名 查看视图 SELECT * FROM view_name
索引:索引用来提高数据检索速度,提高数据查询的性能。 索引类型:普通索引、主键索引、全文索引、空间索引、唯一索引、组合索引。 创建索引 CREATE (UNIQUE/FULLTEXT/SPATIAL) INDEX index_name ON table_name(column_name) 删除索引 DROP INDEX index_name FROM table_name 查看索引 SHOW INDEX FROM table_name
备份和恢复: 备份数据库 DOS命令: mysqldump -u root -p密码 数据库名 > 文件名 恢复数据库 DOS命令: mysql -u root -p密码 数据库名 < 文件名 SQL命令: USE 数据库名; SOURCE 数据库备份文件名
导出数据: SELECT ...INTO OUTFILE 文件名 导入数据: LOAD DATA INFILE 文件名 INTO TABLE 表名
六.JDBC 1.JDBC:Java连接数据库技术,全程Java DataBase Connectivity 2.JDBC API:使用JDBC常用接口访问和操作数据库 3.使用JDBC访问和操作数据库步骤(纯Java方式) 首先在项目中Build Path MySQL数据库JAR包 ①加载驱动Class.forName(“com.mysql.jdbc.Driver”); ②获取链接 Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/数据库名”,”root”,”root”); 参数:连接字符串、用户名、密码 ③获取Statement或PreparedStatement接口实例 Statement stmt=conn.createStatement(); PreparedStatement pstmt=conn.preparedStatement(sql语句); ④编写SQL语句 ⑤调用Statement或PreparedStatement接口方法执行数据库操作 boolean execute()查询SQL返回true,其他SQL返回false Int executeUpdate()执行增删改,返回受影响的行数Int类型 ResultSet executeQuery()执行查询,返回查询结果集ResultSet对象 ⑥处理查询结果 resultSet.next() 前进到下一行记录中,读到记录返回true,没有读到记录返回false getXX()获取每行记录中每列的值 ⑦关闭连接,释放资源 先关闭ResultSet,在关闭Statement或PreparedStatement,最后关闭Connection,注意checked异常处理。
七.DAO模式 数据持久化:数据持久化就是将程序中的数据在瞬时状态和持久状态之间相互转换的机制。 DAO层:数据访问层,负责实现数据持久化,对数据库数据的增删改查,降低代码耦合度,提高内聚性。 DAO模式组成: DAO接口、DAO接口实现类、Entity实体类,BaseDao数据库链接和关闭工具类 Properties类:负责读取数据库配置文件中的驱动、连接字符串、用户名、密码等数据库参数信息 读取步骤: ①创建Properties类的实例 Properties properties=new Properties(); ②将配置文件读入InputStream流 InputStream inputStream=BaseDao.class.getClassLoader().getResourceAsStream(“配置文件名”); ③调用Properties类实例的load()方法读取流 Properties.load(inputStream);//.注意处理checked异常 ④调用Properties类的实例的getProperty(String key)方法根据配置文件中的key映射获取到相应的value值 String driver=properties.getProperty(“driver”); .... 实体类标准定义: ①类名public ②属性private ③属性名和映射表的字段名尽量保持一致,采用驼峰命名法。 ④提供公有的getter/setter方法封装属性 ⑤最好实现java.io.Serializable接口,支持序列化机制。
注意:转载请注明原作者 |