一.简介
- JDBC 全称 Java DataBase Connection 数据库连接技术。
- 可以根据驱动包连接不同类型的数据库。
二.JDBC API
- JDBC API是java中位于java.sql包下的一个数据库访问统一接口,通过它来跟数据库打交道。
三.驱动包
- 如果java中要访问数据库,那么必须引入跟数据库对应的驱动包。
- 如果要更换其他类型数据库,比如 orcale,那么就去该数据库厂商去下载对应的驱动包。
四.工作原理
当一个java应用程序要访问数据库时,它不会直接和与之对应的数据库驱动包打交道,而是让它本身的JDBC API 去跟驱动包里的Driver Manager打交道,并获取连接,关闭连接(每一个不同的驱动都对应着不同类型的数据库)。
五.驱动类
DriverManager : 根据不同的数据库,管理不同的JDBC驱动,获取连接。
六.常用接口
1.Connection : 用于获取连接(通过Driver Manager)。
2.Statement : 由Connection产生,负责执行SQL语句。
3.PreparedStatement : Statement的子接口,可以防止sql注入,比较安全。
4.ResultSet : 负责处理Statement的返回结果集。
七.访问步骤
以mysql为例
1.加载驱动
如果驱动包是在8.0之后(包括) ,那么它默认会加载之前的驱动(可以不写)。
static
{Class.forName("com.mysql.cj.jdbc.Driver") //驱动包中Driver类的地址
}
2.获取数据库连接
我这里将数据库连接以及其他操作方法都封装到了BaseDao类里,以便复用。
//获取连接
public Connection getConnection() {
Connection connection = null;
try {
connection=DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return connection;
}
url: 数据库连接地址 格式:
String url="jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false"
user: 数据库连接用户名
password: 数据库密码
3.执行SQl语句并处理结果集
在要处理访问数据库的类里,继承BaseDao类,调用获取连接的方法,执行sql语句。
public List<BookSort> getBookSort() {
Connection connection=getConnection();
PreparedStatement preparedStatement=null;
ResultSet rs=null;
BookSort bookSort=null;
List<BookSort> bookSortList=new ArrayList<>();
String sql="select * from bookSort";
try {
preparedStatement= connection.prepareStatement(sql);
rs= preparedStatement.executeQuery();
while(rs.next())
{
bookSort=new BookSort();
bookSort.setId(rs.getInt("id"));
bookSort.setName(rs.getString("name"));
bookSortList.add(bookSort);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
closeConnection(rs,preparedStatement,connection);
}
return bookSortList;
}
4.释放连接
当访问完数据库后,要将获取到的连接关闭,释放资源空间。(关闭顺序: 从内到外)
public void closeConnection(ResultSet rs, Statement stat, Connection con) {
try {
if (rs != null) {
rs.close();
}
if (stat != null) {
stat.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}