Java DataBase Connectivity,Java 语言操作数据库。Sun 公司定义了操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动 jar 包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类
例如,我们在 Java 代码中如果要访问 MySQL,那么必须编写代码操作 JDBC 接口。注意到 JDBC 接口是 Java 标准库自带的,所以可以直接编译。而具体的 JDBC 驱动是由数据库厂商提供的,例如,MySQL 的 JDBC 驱动由 Oracle 提供。因此,访问某个具体的数据库,我们只需要引入该厂商提供的 JDBC 驱动,就可以通过 JDBC 接口来访问,这样保证了 Java 程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的 JDBC 驱动:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
│ ┌───────────────┐ │
│ Java App │
│ └───────────────┘ │
│
│ ▼ │
┌───────────────┐
│ │JDBC Interface │◀─┼─── JDK
└───────────────┘
│ │ │
▼
│ ┌───────────────┐ │
│ JDBC Driver │◀───── Vendor
│ └───────────────┘ │
│
└ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ┘
▼
┌───────────────┐
│ Database │
└───────────────┘
导入驱动 jar 包
mysql-connector-java-5.1.37-bin.jar
到项目的libs目录下Add As Library
<aside> 💡 或者,可以使用 Maven 导入驱动:
因为我们选择了MySQL 5.x作为数据库,所以我们首先得找一个MySQL的JDBC驱动。所谓JDBC驱动,其实就是一个第三方jar包,我们直接添加一个Maven依赖就可以了:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
**注意到这里添加依赖的scope
是runtime
,因为编译Java程序并不需要MySQL的这个jar包,只有在运行期才需要使用。**如果把runtime
改成compile
,虽然也能正常编译,但是在IDE里写程序的时候,会多出来一大堆类似com.mysql.jdbc.Connection
这样的类,非常容易与Java标准库的JDBC接口混淆,所以坚决不要设置为compile
。
我们在使用 JDBC 的时候,只需要面相接口编程,而非面向实现。这样的话能够降低耦合。
</aside>
注册驱动
Class.forName("com.mysql.jdbc.Driver")
获取数据库连接对象 Connection
Connection conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
定义 SQL 语句
String sql = "update account set balance = 2000";
获取执行 SQL 语句的对象 Statement
Statement stmt = conn.createStatement();
执行 SQL,接收返回的结果
int count = stmt.executeUpdate(sql);
处理结果
System.out.println(count);
释放资源
stmt.close();
conn.close();
注册驱动:告诉程序该适用哪个数据库驱动 jar
static void registerDriver(Driver driver)
:注册与给定的驱动程序 DriverManager 。Class.forName("com.mysql.jdbc.Driver");
通过查看源码发现,该类下存在静态代码块,将该类加载进内存时会执行静态代码块,注册驱动<aside> 💡 MySQL 5 之后的驱动 jar 包可以省略注册驱动的步骤
</aside>
获取数据库连接
static Connection getConnection(String url, String user, String password)
jdbc:mysql://ip地址(域名):端口号/数据库名称
,localhost:3306
可以简写省略Statement createStatement()
PreparedStatement prepareStatement(String sql)
setAutoCommit(boolean autoCommit)
,调用该方法设置参数为false,即开启事务commit()
rollback()