一、JDBC
使用JDBC连接数据库步骤(对数据库进行操作)
注册驱动
static{
try{//diver="com.mysql.jdbc.Driver"
class.forName(driver);
}catch(classNotFoundException e){
Throw new ExceptionInitisIixerError(e);
}
}
获取连接驱动
public static Connection getConnection(){
try{ //url="jdbc:mysql://localhost:3306/dbName" username="root" password="root"
return DriverManager.getConnection(url,username,password);
}catch(SQLException e){
e.printStackTrace();
}
return null;
}
释放资源(设置没空,有利于垃圾回收【置空的意思实际是告诉JVM“强引用”变成“弱引用”,可以进行内存的收
回】)
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}finally{
rs=null;
}
}
if(st!=null){
try{
st.close();
}catch(SQLException e){
e.printStackTrace();
}finally{
st=null;
}
}
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}finally{
conn=null;
}
}
}
①、获取连接对象
Connection conn = getConnection();
②、创建运行环境
Statement st = conn.createStatement();
③、执行SQL语句
ResultSet rs = st.executeQuery("SELECT * FROM emp");
④、处理数据
while(rs.next()){
String name = rs.getString(2);
Double sal = rs.getDouble(6);
System.out.println("姓名:"+name+"工资:"+sal);
}
⑤、释放资源
release(conn,st,rs);
二、连接池应用背景
在WEB应用系统中,每次数据访问都必须经历建立数据库连接、打开数据库、存取数据、关闭数据库连接等步骤。反复的连接打开数据库是系统的性能下降,甚至会使系统奔溃!使用数据库连接池技术缓解此问题(是最常用的解决方法)。
三、数据库连接池
数据库在初始化时创建一定数量的数据库连接池中(数量由最小连接数制约,与是否被使用无关) ,随着用户的请求增加,最少连接数满足不了需求时,系统就会创建新的连接(没有空闲连接时才会创建!),直到达到最大连接数(数量由最大的连接数制约)。当达到最大连接数时,用户的请求还继续增加,就会使用空闲的连接,如果没有空闲的连接,则需要等待,在等待的时间内有连接被释放出来就可以把这个连接分配给该用户。当使用完后再返回给空闲池(有专门的线程定时检测),当空闲池长时间未使用时,会关闭。但数量不少于最小连接数!
四、设置合适的最小连接数、最大连接数
当最小连接数过多时,系统启动慢,但创建后系统的响应速度快。反之亦然。
当最大连接数过多时,系统响应快,但占用的资源多。(根据系统的访问量设定)
五、我的理解(陌生的知识向熟悉的东西类比)
把连接池比作画盘(本人喜欢画画)
下图基本上满足彩画者的需求(涵盖了基本七中颜色),当画者需要使用其它的色料时,而且画盘只有一个盛色盘???
画者需要将原来的盛色盘清洗干净(浪费色料,可能原来的还没使用完)、然后盛入新的色料(需要时间),如果再想使
用原来的色料,要需要重复洗盘、盛新色料(没有可复用性)。(这个过程好比JDBC连接操作)
六、内存释放(GC Garbage Collection【垃圾回收机制】 )
数组和对象本身在堆中分配,即便对象和数组被使用后,也不会被回收(占据的内存不会被释放!!),只有数组和对象在没有引用变量指向它的时候,才会变成垃圾。随后才会被垃圾回收器回收(不定时回收)!
七、参考资料
JDBC:https://baike.baidu.com/item/jdbc/485214?fr=aladdin
连接池:https://baike.baidu.com/item/%E8%BF%9E%E6%8E%A5%E6%B1%A0/1699713
数据库连接池:https://baike.baidu.com/item/jdbc/485214?fr=aladdin