一.jdbc简介
jdbc,java database Connectivity即java数据库连接,是一组定义了如何连接和操作数据库的java api。下面结合一个简单示例说明下具体步骤:
public class Main {
private static Logger LOG = LoggerFactory.getLogger(Main.class);
public static String DRIVER = "com.mysql.jdbc.Driver";
public static String USER_NAME = "root";
public static String PASSWORD = "root";
public static String TABLE = "account";
public static String URL = "jdbc:mysql://127.0.0.1/bank";
public static void main(String[] args) {
//导入驱动
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
LOG.error("驱动加载失败", e);
}
//获取连接
Connection connection = null;
try {
connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
} catch (SQLException e) {
LOG.error("建立连接失败", e);
}
try {
//获取可用于执行sql的statement,statement中也包含了连接到数据库的一些信息
Statement statement = connection.createStatement();
String sql = "select account_id,avail_balance from " + TABLE + " limit 2";
//通过stament执行sql,并获取执行结果,返回的结果resultSet可以看成一个二维表格形式,
//next方法表明是否还有下一行,可以通过坐标或列名获取下一列;只能遍历下一行,不能返回或跳到指定行
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
long id = resultSet.getLong(1);
long balance = resultSet.getLong(2);
System.out.println(id + " " + balance);
}
} catch (Exception e) {
LOG.error("sql执行异常");
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
LOG.error("异常");
}
}
}
}
}
可以看到一共分为5步:加载驱动–>获取连接–>获取Statement对象–>执行sql–>解析结果。上面给的sql是执行的查询操作流程,但对于删除的新增等操作也是类似的。
上面涉及到的比较重要的几个类是:Driver、DriverManager、Connection、Statement、ResultSet,下面就依次介绍下这几个类以及它们之间的联系。
二.jdbc中主要的类及其层次关系
下面这张图比较清楚的说明Driver、DriverManger、Connection、Statement、ResultSet之间的层次关系以及它们大致的功能。
下面具体来介绍每个类的作用以及一些值得注意的地方。
1)Driver
使用JDBC操作数据库的第一步就是将数据库对应的驱动(Driver)载入内存。从上面的代码可以看到,所谓的导入驱动本质上只是通过Class.forName()方法将一个具体的类
加载到了内存之中,比如上面的就是:com.mysql.jdbc.Driver这个类,而其实所谓的驱动就是实现了Java.sql.Driver接口的类。下面看下Driver接口中的几个主要方法:
主要使用的是两个方法:acceptsURL()、connect()。
acceptsURL()负责检查传入的url,判断驱动能否打开该url,需要指出的是这里的检查并不会对url进行实际的连接操作而只是会对格式进行检查;
每个数据库连接的url都有自己定义的格式,如果检查符合格式则返回true,否则返回false。
例如mysql的url格式为: jdbc:mysql://host:port/database_name
connect()方法负责根据传入的url和用户名、密码等信息建立与数据库的连接,返回可以对数据库进行操作的Connection对象。
因为每种数据库建立连接的方式是不一样的,所以操作不同的数据库需要使用不同的Driver类的connect()方法,这就是不同数据库需要导入不同驱动的原因。
下面手动操作mysql的Driver类进行数据库的连接和协议测试:
public static void testDriver() throws Exception {
//导入mysql的驱动,并且获得Driver实例
Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver")