PreparedStatement 有着如下的优势:提高了代码的可读性和可维护性、提高了执行重复<span lang="EN-US" mso-fareast-font-family:宋体;mso-font-kerning:10.5pt;mso-ansi-language:en-us;="" mso-fareast-language:zh-cn;mso-bidi-language:ar-sa'="" new="" roman",serif;="" times="">SQL语句时系统的性能、能有效防止<span lang="EN-US" mso-fareast-font-family:宋体;mso-font-kerning:10.5pt;mso-ansi-language:en-us;="" mso-fareast-language:zh-cn;mso-bidi-language:ar-sa'="" new="" roman",serif;="" times="">SQL注入。
Statement 接口是操作数据对象的类型;Connection 接口是数据库连接对象的类型;DatabaseMetaData 类是数据库的元数据类型;ResultSet 接口是数据结果集对象的类型。
使用 Statement 获取结果集的代码是 “Statement sta=con.createStatement(); ResultSet rst=sta.executeQuery(“selectfrom book”);” 使用PreparedStatement 获取结果集的代码是 “PreparedStatement pst=con.preparedStatement(“selectfrom book”);ResultSet rst=pst.executeQuery();”。
MySQL 数据库有 9 种存储引擎(但并不是所有的都支持),但是 这里因为实验环境安装的是 MariaDB, 只能查询出 8 种,少了 MyISAM。各参数含义如下:
- Engine:数据库存储引擎的名称;
- Support:当前是否支持该类引擎;
- Comment:对该数据库引擎的解释说明;
- Transactions:是否支持事务处理;
- XA:是否支持分布式交易处理的 XA 规范;
- Savepoints:是否支持保存点,以便事务进行回滚操作。
InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。且自 MySQL5.5 版本,MySQL 默认存储引擎为 InnoDB。
InnoDB 存储引擎的特点:
- InnoDB 给 MySQL 提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID,即原子性、一致性、隔离性、持久性)兼容;
- InnoDB 支持行级锁,行锁的粒度小,在高并发环境下产生冲突的概率低,能够更好的保障数据安全,实现事务的隔离性,因此更适合具有大量写操作的场景;
- InnoDB 存储引擎用自己的缓冲池维护主内存里的缓存数据和索引,大大提高查询效率; 此外,InnoDB 存储引擎还具有与 MySQL 服务器整合性好、支持外键完整性约束、灾难恢复性比较好等特点。
-
在 MySQL5.5 版本之前,MyISAM 存储引擎一直都是 MySQL 的默认存储引擎。
MyISAM 的主要特点:
- 不支持事务;
- 不支持外键,如果强加外键,不会提示错误,但外键不起作用;
- 自己的缓冲池仅用于缓存索引,而数据的缓存则依赖操作系统缓存;
- 默认的锁粒度为表级锁,所以并发性差,但加锁快,锁冲突较少,所以不太容易发生死锁;
- 支持全文索引(MySQL5.6 后),但这项功能的使用率极低;
- 数据库所在主机如果宕机,MyISAM 的数据文件容易损坏,且难以恢复;
- 如果在首次建表并导入数据后不会再进行修改操作,那么这样的表适合采用 MyISAM 压缩表。可以使用 myisampack 对 MyISAM 表进行压缩,压缩后的表不能进行修改,压缩表可以极大地减少磁盘空间的占用,因此也可以减少磁盘 I/O 操作,从而提升查询性能。压缩表也支持索引,但索引是只读的。