JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。
JDBC简介
JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。
JDBC主要功能
- 建立与数据库或者其他数据源的链接;
- 向数据库发送SQL命令;
- 处理数据库的返回结果;
JDBC中常用类和接口
连接到数据库(Connection)、建立操作指令(Statement)、执行查询指令(executeQuery)、获得查询结果(ResultSet)等。
JDBC编程步骤
(1)加载驱动程序:Class.forName(driverClass)
// 加载mysql驱动
Class.forName("com.mysql.jdbc.Driver");
// 加载oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
(2)获得数据库连接:DriverManager.gerConnection(URL,user,password);
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc",user,password)
DriverManager.gerConnection(URL,user,password);
(3)创建Statement对象:conn.createStatement()
Statement st=conn.createStatement();
(4)向数据库发送SQL命令:st.executeQuery();
ResultSet rs=st.executeQuery("select * from user");
(5)处理数据库的返回结果(ResultSet类)
while(rs.next()){
System.out.println(rs.getString("user_name")+" "+rs.getString("user_password"));
}
(6)关闭资源
rs.close();
st.close();
conn.close();
每次Java程序操作数据库时,都要按上面将的步骤一步步地来。显然这样在实际应用中是不合理的,所以就诞生了数据库连接池。在这里先不使用数据库连接池。先自己封装一个数据库操作工具类,就是把在数据库连接操作中公用且固定不变的代码提炼出来。
封装JDBC工具类
在Java程序操作数据库中,公用代码中固定不变有:加载驱动程序、获取数据库连接、关闭资源。所以只要把这三个步骤中的代码提炼出来【封装到方法中,并暴露出方法】即可。
1、封装加载驱动程序
/**
* 加载驱动程序是直接调用CLass类的forName()方法,且必须在第一时间运行。封装的JDBC操作工具类一般不需要通过实例化去操作,所以可以根据Java类加载机制,把【加载驱动程序】这一操作封装到静态代码块中。
*/
static {
Class.forName();
}
/**
* 上面的代码还有些小瑕疵,就是在进行加载驱动程序时,可能会发生加不到驱动程序的情况发生,这样就会导致程序代码发生错误。可以根据Java异常处理机制,捕获一下异常。
*/
static {
try {
Class.forName();
} catch(ClassNotFoundException e){
e.printStackTrace();
}
}
2、封装获取数据库连接
通过封装第一步,就已经知道,在使用这个工具类时,是不需要进行实例化操作的,必须把使用权交给这个工具类本身。所以封装的方法(代码)必须是静态的。【获取数据库连接】这一步骤,是会返回一个数据库连接对象,所以比较适合封装到一个方法中。
public static Connection getConnection() {
Connection conn = null;
String url = "jdbc:mysql://127.0.0.1:3306/dbtest?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "rootPassword";
conn = DriverManager.getConnection(url, user, password);
System.out.println("connection is successful!");
return conn;
}
然后再处理一下异常
public static Connection getConnection() {
Connection conn = null;
String url = "jdbc:mysql://127.0.0.1:3306/dbtest?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "rootPassword";
try {
conn = DriverManager.getConnection(url, user, password);
System.out.println("connection is successful!");
} catch (SQLException e) {
System.out.println("connection error!");
e.printStackTrace();
}
return conn;
}
3、封装关闭资源
这一步骤是通过三个对象的调用各自的close()方法来关闭连接,释放资源的。所以适合封装到一个带参的方法中。
//释放JDBC资源(关闭顺序与声明时的顺序相反)
public static void release(Connection conn, Statement state, ResultSet rs) {
rs.close();
state.close();
conn.close();
}
加上条件限制及异常处理
//释放JDBC资源(关闭顺序与声明时的顺序相反)
public static void release(Connection conn, Statement state, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (state != null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
到此,这个JDBC数据库工具类就封装好了。整合一下,完整代码如下。
package util;
import java.sql.*;
public class JDBCUtil {
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获得连接
public static Connection getConnection() {
Connection conn = null;
String url = "jdbc:mysql://150.158.152.250:3306/demo_com_47aa3?useUnicode=true&characterEncoding=utf8";
String user = "demo_com_47aa3";
String password = "zero#ZFTS5080";
try {
conn = DriverManager.getConnection(url, user, password);
System.out.println("connection is successful!");
} catch (SQLException e) {
System.out.println("connection error!");
e.printStackTrace();
}
return conn;
}
//释放JDBC资源(关闭顺序与声明时的顺序相反)
public static void release(Connection conn, Statement state, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (state != null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/jdbc-util-class.html