一:数据库连接池的原理
数据库连接池保存了一些数据库连接对象(Connection对象),操作数据库时
直接从连接池中获取Connection对象,用完后又放回数据库连接池中。通过
对连接对象的保存与放回,大大提高了数据库的访问效率。
二:DBCP连接池组件
Properties pro=new Properties(); // 属性资源类
InputStream input=DBCPDemo.class.getClassLoader().getResourceAsStream("dbcpfactory.properties"); // 获取指向配置文件的输入流
pro.load(input); // 从输入流中读取属性列表(键和元素对)
DataSource ds=BasicDataSourceFactory.createDataSource(pro);
Connection conn=ds.getConnection(); // 获取连接对象
注意:属性配置文件中的key不能改变。
三:C3P0连接池组件
配置文件为:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">org.gjt.mm.mysql.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb2?characterEncoding=utf8</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
ComboPooledDataSource ds=new ComboPooledDataSource(); // 获取连接池对象
Connection conn=ds.getConnection(); // 获取Connection数据库连接对象
四:MySQL中的触发器(trigger)
delimiter //
create trigger 触发器名称 before|after 触发事件(insert|delete|update)
on 触发器关联的表名称 for each row
begin
触发器执行的逻辑代码
end
delimiter ;
触发器案例:
delimiter //
create trigger stu_trigger after insert
on student for each row
begin
insert into log(logname,logtime)values(new.name,now());
end //
delimiter ;
五:MySQL的优化
查询优化的方法:
1.优化查询SQL语句。如果连接查询和子查询都可以查询到结果,则优先选择连接查询。
因为子查询时会创建临时表,临时表的内容是存储子查询结果的,查询完毕后,还要撤销临时表。
2.在频繁使用的列上创建索引(index)。
3.拆表。如果一个表中的字段很多,应该将不经常使用的字段存储于另一张表中,原表
只保留常用查询字段。
4.增加冗余字段。将需要经常使用到的信息以冗余字段的方式添加到表中,省去了连接
查询的耗时。eg:如果经常要查询员工姓名与其对应的部门名称,则
可将部门名称作为员工表emp的一个冗余字段,省去了emp表与dept表
的连接查询。
5.增加中间表。建立一个中间表,将多张表的查询字段存放于此中间表中。
六:使用MySQL Workbench建立ER图,导出成SQL文件,并导入
1.在Data Modeling模式下创建EER模型。
2.导出EER模型为SQL文件。
3.在SQL Development模式下导入SQL文件,并执行。