JDBC主要包括一个类(DriverManager)和三个核心接口(Connection,Preparement,Resultset)
1.DriverManager类:驱动管理类,用于管理所有注册的驱动。(针对不同的数据库调用不同的驱动)它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接.此外,DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以用.DriverManager类的常用方法有getConnection(String url,String user,String password)方法,
比如连接数据库:Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “1234”);
2.Connection接口:代表与数据库之间的连接。要对数据库表进行操作,首先要与数据库建立来连接。就好像在应用程序和数据库之间建立一条连接的路径,通过DriverManager类的getConnection()方法可获取Connection实例。
3.PreparedStatement:预处理并执行sql语句。(支持预编译,在创建PreparedStatement对象的时候将sql语句传递给数据库做预编译,以后每次执行sql语句时,效率会提高很多。)
4.ResultSet:用于接收数据库所有查询记录,并使用ResultSet显示内容。
5.遍历结果集:
public List<Pet> getAllPet() {
//创建一个集合对象
List<Pet> 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();//创建宠物对象
//getInt是以Int类型取出res里的此列数据
pet.setId(res.getInt("id"));
pet.setName(res.getString("name"));
pet.setTypename(res.getString("typename"));
pet.setHealth(res.getInt("health"));
pet.setLove(res.getInt("love"));
pet.setBirthday(res.getDate("birthday"));
pet.setPrice(res.getInt("price"));
pet.setOwner_id(res.getInt("owner_id"));
pet.setStore_id(res.getInt("store_id"));
pet.setType(res.getInt("type"));
pets.add(pet);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pets;
}
具体实现代码如下:
package jdbc;
import java.sql.Connection;
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) {
try {
res.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (null != pstmt) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 编写数据库的查询方法
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;
}
}