DBC是一种执行方式SQL语句的Java API,它由一组Java语言编写的类和接口组成,可以为各种关系数据库提供统一的访问.JDBC为构建更先进的工具和接口提供了一个基准,毫无疑问JDBC是连接java应用与数据库之间的桥梁。它使数据库开发人员能够编写数据库应用程序,JDBC实现了这些标准的所有目标,并且具有简单、严格的类型定义和高性能的界面。接下来介绍一下JDBC的实际操作过程。
JDBC主要包括一个类和三个核心接口:
1.DriverManger:用于管理所有注册驱动的驱动管理。(为不同的数据库调用不同的驱动程序)它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。此外,DriverManager中的方法是静态的,因此在程序中不需要实例化,可以直接通过类名使用.常用的DriverManager类方法有getconectionnion(String url,String user,String password)方法。
2.Conection接口:代表与数据库的连接。要操作数据库表,首先要与数据库建立连接。就像在应用程序和数据库之间建立一条连接路径,Conection实例可以通过drivermananager类的getcon()获得。创建方法如下:
Connection conn = DriverManager.getConnection(url,user,pass);
该对象的常用方法:
3.PreparedStatement:预处理和执行sql语句,在创建过程中支持预编译当Preparedstatement对象将sql语句传输到数据库进行预编译时,每次执行sql语句时,效率都会大大提高。 PreperedStatement是Statement的孩子,可以调用其实例对象:
PreperedStatement st = conn.preparedStatement()
Statement使数据库频繁编译SQL,可能导致数据库缓冲区溢出。PreparedStatement 可预编译SQL,从而提高数据库的执行效率。
并且Preperedstatement允许以占位符的形式替换sql中的参数,以简化sql语句的编写。
4.ResultSet:用于接收数据库中的所有查询记录,并使用Resultset显示内容。
Jdbc程序中的Resultset用于代表Sql语句的执行结果。Resultset封装执行结果时,采用类似表格的方式,ResultSet 对象维护了指向表数据行的游标。初始时,游标在第一行之前调用Resultset.next() 该方法可以使游标指向具体的数据行,并通过调用该方法获取该行的数据。
5.遍历结果集:
public List getAllPet() {
//创建一个集合对象
List pets=new ArrayList<>();
///声明一个宠物对象
Pet pet=null;
///sql语句
String sql="SELECT `id`,`name`,`typename`,`health`,`love`,`birthday`,`price`,`owner_id`,`store_id`,`type` FROM pet";
//参数集
Object[] params={};
///处理sql语句和参数,将执行结果存储在res中
res=super.executeSelect(sql, params);
try {
/*
res.next使用res对象读取记录中的内容,有两个动作,
1、指向下一条记录的数据库指针;
2、如果不返回false,自然循环退出;如果有记录,完成第二个动作,将记录内容存储在res中,并返回true.
*/
while(res.next()){
pet=new Pet();//创建宠物对象
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 数据库操作基础类
*
* @author AAA
*
*/
public class BaseDao {
// 创建4个常量(数据库连接地址、数据库驱动地址、数据库登录权限名、登录密码)
////数据库驱动地址
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
//数据库连接地址
private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
//用户名
private static final String UNAME = "system";
//密码
private static final String UPWD = "ok";
// 使用静态块加载数据库的驱动
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 声明三个核心接口对象(Connection,PreparedStatment,ResultSet)
private Connection conn = null;// 连接到数据库的对象
private PreparedStatement pstmt = null;// SQL命令预处理和执行操作对象
protected ResultSet res = null;// 查询后返回的结果集对象
// 编写创建数据库连接对象的方法(DriverManager)
private void getConn() {
try {
conn = DriverManager.getConnection(URL, UNAME, UPWD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 编制关闭数据库释放资源的方法
protected void colseAll() {
if (null != res) {
// 编制数据库的查询方法
protected ResultSet excuteSelect(String sql, Object[] params) {
// 调用数据库连接对象的方法
this.getConn();
// 创建预处理对象
try {
pstmt = conn.prepareStatement(sql);
// 通过for循环预处理参数
if (null != params) {
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i+1, params[i]);
}
}
// 操作查询并返回结果集
res = pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
// 编写数据库的增删方法
protected int excuteEdit(String sql,Object[] params){
int count = 0;
////调用数据库连接对象的方法
this.getConn();
try {
///创建SQL命令预处理执行操作的对象
pstmt = conn.prepareStatement(sql);
///预处理参数
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i+1, params[i]);
}
////接收操作执行返回的行数
count = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
this.colseAll();
}
return count;
}
}
6、释放资源
Jdbc程序运行后,记得释放程序在运行过程中创建的与数据库互动的对象,通常是Resultset, Statement和conection对象。值得注意的是为确保资源释放代码能够运行,还必须放置资源释放代码在finally语句中。
当然,我们上面说的只是JDBC的一些简单操作步骤,事实上,JDBC有很多知识和需要注意的地方。在实际操作过程中,我们也会遇到各种需要探索和解决的问题。如何看到彩虹而不经历风雨,只有通过不断的学习和探索,才能在实践的道路上获得真正的知识。