JDBC简介
JDBC是什么?JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,根本上说JDBC是一种规范,它提供的接口,一套完整的,允许便捷式访问底层数据库。可以用JAVA来写不同类型的可执行文件:JAVA应用程序、JAVA Applets、Java Servlet、JSP等,不同的可执行文件都能通过JDBC访问数据库,又兼备存储的优势。简单说它就是Java与数据库的连接的桥梁或者插件,用Java代码就能操作数据库的增删改查、存储过程、事务等。
我们可以发现,JDK自带了一个java.sql
包,而这里面就定义了大量的接口,不同类型的数据库,都可以通过实现此接口,编写适用于自己数据库的实现类。而不同的数据库厂商实现的这套标准,我们称为数据库驱动
。
使用前准备
将mysql驱动jar依赖导入到项目中,下载地址:http://dev.mysql.com/downloads/connector/j/,这是MySQL的官方实现,也可以使用其他相应版本的数据库驱动。
使用JDBC连接数据库
总共分为四步进行:
1
|
Connection connection = DriverManager.getConnection("URL","root","password");
|
1
|
Statement statement = connection.createStatement();
|
注意:以上两个对象使用后均需要释放,可以使用try-with-resource自动释放资源。若出现错误,将抛出SQLException
异常。
- 使用
statement.executeQuery
执行SQL语句并且范围结果集
1
|
ResultSet set = statement.executeQuery("select * from teacher");
|
1
|
System.out.println(set.getString(1));
|
测试代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.sql.*;
public class JDBC {
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/study","root","998244353");
Statement statement = connection.createStatement()) {
ResultSet set = statement.executeQuery("select * from teacher");
while (set.next()) {
System.out.println(set.getString(2));
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
|
了解DriverManager
我们首先来了解一下DriverManager是什么东西,它其实就是管理我们的数据库驱动的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static synchronized void registerDriver(java.sql.Driver driver,
DriverAction da)
throws SQLException {
/* Register the driver if it has not already been added to our list */
if(driver != null) {
registeredDrivers.addIfAbsent(new DriverInfo(driver, da)); //在刚启动时,mysql实现的驱动会被加载,我们可以断点调试一下。
} else {
// This is for compatibility with the original DriverManager
throw new NullPointerException();
}
println("registerDriver: " + driver);
}
|
我们可以通过调用getConnection()来进行数据库的链接:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@CallerSensitive
public static Connection getConnection(String url,
String user, String password) throws SQLException {
java.util.Properties info = new java.util.Properties();
if (user != null) {
info.put("user", user);
}
if (password != null) {
info.put("password", password);
}
return (getConnection(url, info, Reflection.getCallerClass())); //内部有实现
}
|
我们可以手动为驱动管理器添加一个日志打印:
1
2
3
|
static {
DriverManager.setLogWriter(new PrintWriter(System.out)); //这里直接设定为控制台输出
}
|