一、引言
最近在学习使用mybatis调用数据库,顺便总结了下java连接数据库的历史发展。从非常传统的jdbc连接,到数据库连接池(dbcp、c3p0)封装后的jdbc连接,再到各种框架对数据库连接池的封装使用,在这个过程中无不透漏着前人的智慧,我们不仅仅限于享受着现有的便利,应该把这些过程都亲自走一遍,体会其中的过程演化==
二、jdbc数据库连接
jdbc相信大家都比较清楚了,是java也就是oracle公司为各大数据库制订了一个类似抽象类或者接口的规范,然后mysql、oracle、postsql等数据库按照这个规范写的实现类。jdbc是最原始的数据库连接方式,也是用户控制程度最高的方式。使用的时候只需到该数据库官网下载对应的jdbc一个包就可以了。
代码:
JDBCTest类
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest {
public static Connection getConnection() throws SQLException,ClassNotFoundException {
/**
* 在加载这个类的时候,会执行静态代码块中的代码,将自己注册到DriverManager类中
*/
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/flkt";
String username="root";
String password = "1234";
Connection conn = DriverManager.getConnection(url,username,password);
return conn;
}
public static void main(String[] args) {
try {
Connection conn = getConnection();
Statement sqlStatement = conn.createStatement();
String query = "select * from t_info";
ResultSet result = sqlStatement.executeQuery(query);
while(result.next()) {
Integer f_id = result.getInt("f_id");
String f_name = result.getString("f_name");
String f_blz = result.getString("f_blz");
System.out.println("f_id="+f_id+" f_name="+f_name+" f_blz="+f_blz);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
三、dbcp数据库连接
数据库是一种重要的资源,我们普通的做法是使用直连方法连接数据库,使用完毕后关闭连接。 一旦数据库链接频繁,这样的数据库连接方式会给数据库很大的压力,这样很容易导致数据库崩溃,然后项目网站也就瘫痪了。 正是针对这样的问题,出现了数据库连接池技术。
先在数据库连接池中创建一定数量的connection等待连接,一旦有需要连接直接从里面取出,当connection释放重新将其放回到池里,当总连接数大于连接池中的connection时用户需要等待。
以dbcp为例,使用的时候需要以下jar包