JDBC是什么?
JDBC,是一种用于Java编程语言和多种数据库连接的标准Java API。
JDBC库提供的多种API可以完成如下的几个和数据库相关的任务:
- 和数据库建立连接。
- 创建 SQL 或 MySQL 声明。
- 在数据库中执行 SQL 或 MySQL 查询。
- 展示或修改数据库中的记录。
之所以提供以上功能,是为了实现将Java编程代码和数据库相分离的目的。这样可以使得Java编写的可执行程序可以通过同样的JDBC API连接不同的数据库,而仅仅是改变数据库驱动,这样更有利于数据库的选择。
JDBC的作用
JDBC 组件
JDBC API 提供了一些接口和类以便使用:
- DriverManager:该类被用于管理数据库驱动。当Java应用发送一个数据库连接请求时,会伴随一个对应数据库的驱动连接子协议。这个协议会通过DriverManager发送到各个Driver,而第一个识别该协议的Dirver会在对应的数据库和JDBC接口间建立连接。
- Driver:驱动接口负责处理与数据库服务器之间的通信。Java编程人员很少会直接使用到这个接口,这是用于DriverManager类在管理着Driver接口。
- Connection:这个接口包含了所有连接数据库相关的方法。一个connection对象会包含了和数据库通信的上下文等信息。所有与数据库相关的通信都且仅需要通过connection对象。
- Statement:该接口负责将Java代码中嵌入的SQL语句提交到数据库,另外还有一些派生出的接口可以完成参数的传递和存储过程的执行。
- ResultSet:通过Statement对象执行的查询语句的查询结果将被通过ResultSet对象从数据库取回。ResultSet对象可以像迭代器一样去操作数据。
- SQLException:这个类用来处理数据库应用中出现的各种错误。
JDBC Template
下面给出一个JDBC连接数据库的模板,虽然已经很少使用了,但是会帮助理解连接流程。
//STEP 1.
Import required packagesimport java.sql.*;
public class FirstExample {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/EMP";
// Database credentials
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id"); int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){ //Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){ //Handle errors for Class.forName
e.printStackTrace();
}finally{ //finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){ }// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");
}//end main
}//end FirstExample