学习 JDBC 的时候,我们首先应该了解一些基础知识点:
1、JDBC 全称:Java DataBase Connectivity
2、数据库本身是个独立运行的程序,我们编写的应用程序是利用通信协议对数据库进行指令交换。
3、JDBC 是用于执行 SQL 的解决方法,开发人员使用 JDBC 的标准接口,数据库厂商则对数据库接口进行操作,开发人员无须接触底层数据库驱动程序的差异性。
4、JDBC API 由类和接口构成,这些类和接口用于:建立数据库的连接,把 SQL 语句发送到数据库,处理 SQL 语句的结果,以及获取数据库的元数据。
5、使用 JDBC 开发任何有关于数据库的应用程序,都需要注意四个主要接口:Driver、Connection、Statement、ResultSet ,这些接口定义使用 SQL 访问数据库的一般架构。访问数据库的典型 Java 程序主要采用下列步骤:
(1)、加载驱动程序(使用 Driver 接口装载一个合适的驱动程序)
(2)、建立连接(使用 Connection 接口连接到数据库)
(3)、创建和执行语句(使用 Statement 接口创建和执行 SQL 语句)
(4)、处理结果(如果语句返回数据集结果,可以使用 ResultSet 接口处理该结果)
6、com.mysql.jdbc.Driver 是 mysqljdbc.jar 中的一个类,oracle.jdbc.driver.OracleDriver 是 classes12.jar 中的一个类,mysqljdbc.jar 和 classes12.jar 包含许多支持驱动程序的类,这些类由 JDBC 使用,但不是直接由 JDBC 程序员使用。当我们在程序中明确使用某个类时,他被 JVM 自动加载,但驱动程序没有在程序中明确地使用,因此,我们必须编写代码告诉 JVM 加载它们。
JDBC 连接 MySql 数据库 实例:
首先在 MySql 中的 test 数据库中创建一个表 “ tb_user ” ,包含两列 “ id ”,“ name ”
CREATE TABLE `tb_user` (
`id` int NOT NULL AUTO_INCREMENT ,
`name` char(255) NOT NULL ,
PRIMARY KEY (`id`)
);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC {
public static void main(String[] args) {
// 连接MySql数据库必备的三个信息:数据库url、用户名、密码
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String pwd = "";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");// 加载驱动
conn = DriverManager.getConnection(url, user, pwd);// 获取连接
if (!conn.isClosed()) {
System.out.println("成功连接mysql数据库");
stmt = conn.createStatement();// 创建sql描述的代表对象
String sql = "select * from tb_user";
rs = stmt.executeQuery(sql);// 执行sql并返回结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + " " + name);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {// 关闭资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
public static final String DB_URL = "jdbc:mysql://localhost:3306/test";
public static final String DB_NAME = "root";
public static final String DB_PWD = "";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 取得连接
*
* @return
*/
public static Connection getConnection() {
try {
return DriverManager.getConnection(DB_URL, DB_NAME, DB_PWD);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 释放资源
*
* @param rs
* @param stmt
* @param conn
*/
public static void free(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
conn = JDBCUtil.getConnection();
JDBCUtil.free(rs, stmt, conn);
结合 JDBCUtil 类,上面的 “JDBC 连接 MySql 数据库 实例" 就可以改写成如下形式
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from tb_user");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + " " + name);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.free(rs, stmt, conn);
}
}
}