JDBC的常用类和接口
DriverManager类
DriverManager类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。此外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪信息的显示等事务。DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以调用。DriverManager类的常用方法如表所示:
Connection接口
Connection接口代表与特定的数据库的连接。要对数据表中的数据进行操作,首先要获取数据库连接。Connection实例就像在应用程序与数据库之间开通了一条渠道,如图所示:
可通过DriverManager类的getConnection()方法获取Connection实例。Connection接口的常用方法如表所示:
Statement接口
Statement接口用于创建向数据库中传递SQL语句的对象,该接口提供了一些方法可以实现对数据库的常用操作。Statement接口的常用方法如表所示:
PreparedStatement接口
PreparedStatement接口继承Statement,用于执行动态的SQL语句,通过PreparedStatement实例执行的SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以反复地执行该SQL语句。PreparedStatement接口的常用方法如表所示。
ResultSet接口
ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet接口的常用方法如表所示:
通过JDBC操作数据库
如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需要在第一次访问数据库时加载一次。然后在每次访问数据库时创建一侧Connection实例,获取数据库连接,这样就可以执行操作数据库的SQL语句。最后在完成数据库操作时,释放与数据库的连接。
加载数据库驱动
例:
建立连接
增删改查程序:
/*
* 向数据库插入一条数据
*/
sql="insert into data(id,name,password,email,birthday)values('4','laowang','123456','laowang.com','1995.05.09')";
stmt=conn.createStatement();//创建一侧Statement对象
stmt.executeUpdate(sql);//执行SQL语句
/*
* 删除数据库中的数据
*/
sql="delete from data where id=4";
stmt=conn.createStatement();
stmt.executeUpdate(sql);
/*
* 修改数据库中的数据
*/
sql="update data set password=159684 where id=4";
stmt=conn.createStatement();
stmt.executeUpdate(sql);
/*
* LIKE模糊查询
*/
sql="select * from data where id like '1'";
ResultSet rs = stmt.executeQuery(sql);
/*
* 查询所有数据
*/
sql = "SELECT * FROM data";
ResultSet rs = stmt.executeQuery(sql);//执行给定sql语句,查询结果集
完整程序:
package server;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Server {
// JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/data?useSSL=true";
// 数据库的用户名与密码,需要根据自己的设置
static final String USER = "root";
static final String PASS = "root";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;//Statement接口用于创建向数据库中传递SQL语句的对象
try{
// 加载 JDBC 驱动
Class.forName("com.mysql.jdbc.Driver");
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);//建立连接
// 执行查询
System.out.println(" 实例化Statement对象...");
stmt = conn.createStatement();
String sql;
/*
* 向数据库插入一条数据
*/
/*sql="insert into data(id,name,password,email,birthday)values('4','laowang','123456','laowang.com','1995.05.09')";
stmt=conn.createStatement();//创建一侧Statement对象
stmt.executeUpdate(sql);//执行SQL语句
*/
/*
* 修改数据库中的数据
*/
/*sql="update data set password=159684 where id=4";
stmt=conn.createStatement();
stmt.executeUpdate(sql);
*/
/*
* 删除数据库中的数据
*/
/*sql="delete from data where id=4";
stmt=conn.createStatement();
stmt.executeUpdate(sql);
*/
/*
* LIKE模糊查询
*/
/*sql="select * from data where id like '1'";
ResultSet rs = stmt.executeQuery(sql);
/*
* 查询所有数据
*/
sql = "SELECT * FROM data";
ResultSet rs = stmt.executeQuery(sql);//执行给定sql语句,查询结果集
while(rs.next()){ //将指针向下移一行
// 通过字段检索
int id = rs.getInt("id");
String name = rs.getString("name");
int password = rs.getInt("password");
String email = rs.getString("email");
String birthday = rs.getString("birthday");
// 输出数据
System.out.print("id: " + id);
System.out.print(", name: " + name);
System.out.print(",password: " + password);
System.out.print(", email: " + email);
System.out.print(",birthday: " + birthday);
System.out.print("\n");
}
// 完成后关闭
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 关闭资源
try{
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}