java学习必有jdbc,今天就来写个笔记梳理一下。
1.什么是jdbc呢
jdbc的全称java date base connectivity 也就是java数据库连接,它是一种可以执行SQL语句的Java API,提供读写数据库操作。
JDBC开发的数据库应用可以跨平台运行,而且可以跨数据库。体现了Java“编写一次,处处运行”的平台无关性的理念。它可以为多种数据库提供统一的访问,是一种统一标准。通过JDBC可以连接Oracle、MySql、Sql Server数据库。
![jdbc](https://img-blog.csdnimg.cn/20200412123031395.png)
2.jdbc的基本工作
可以简单的分为三步
①建立与数据库的连接。
②执行SQL语句。
③获得SQL语句的执行结果。
3.驱动程序
上面已经介绍过JDBC开发的数据库应用可以跨平台运行,而且可以跨数据库。那么它是怎么知道是在哪种数据库平台上运行的呢。
其实是通过一个驱动程序。数据库驱动程序是JDBC程序和数据库之间的转换层,它负责将JDBC调用映射成特定的数据库调用。
大部分数据库系统,例如Orcale等,都有相应的JDBC驱动程序,当需要连接某个特定的数据库时,必须有相应的数据库驱动程序。
4.jdbc的常用类和接口
①DriverManager
用于管理JDBC驱动的服务类。
②Connection
代表数据库连接对象,每一个Connection代表一个物理连接会话。
③Statement
用于执行SQL语句的工具接口。
④PreparedStatement
预编译的Statement对象。(预编译可以防止万能密码,万能密码有兴趣的小伙伴可以自行搜索一下哦)。
⑤ResultSet
结果集对象。
5.jdbc编程步骤
①加载(注册)数据库驱动。(只加载一次就可以啦)
②通过DriverManager获取数据库连接。
③通过Connection对象创建Statement对象。
④使用Statement执行SQL语句。所有Statement都有三个方法来执行SQL语句。
⑤操作结果集。如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。
⑥关闭资源,一定要记得关闭资源哦。
下面就是工具类啦
如果有什么说的不对的地方或者错误,欢迎指正!
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtil {
private static final String URL;
private static final String USER;
private static final String PASSWORD;
private static final String DRIVER;
private static Connection conn = null;
// Statement是用来执行sql语句的工具接口,PreparedStatement是预编译的Statement对象
private static PreparedStatement ps = null;
private static ResultSet rs = null;
static {
FileReader fr = null;
Properties p = null;
try {
fr = new FileReader("/JDBC.properties");
p = new Properties();
p.load(fr);
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
DRIVER = p.getProperty("DRIVER");
URL = p.getProperty("URL");
USER = p.getProperty("USER");
PASSWORD = p.getProperty("PASSWORD");
try {
// 注册驱动
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 获得一个静态连接
public static Connection getConnection() {
try {
//通过DriverManager获取数据库连接。
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static ResultSet executeQuery(String sql, String[] strs) {
getConnection();
try {
// 创建statement对象并执行sql语句
ps = conn.prepareStatement(sql);
// 填充占位符
if (strs != null) {
for (int i = 0; i < strs.length; i++) {
ps.setString(i + 1, strs[i]);
}
}
// 操作结果集
rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
// 返回结构集
return rs;
}
public static int executeUpdate(String sql, String[] strs) {
getConnection();
int in = 0;
try {
// 创建statement对象并执行sql语句
ps = conn.prepareStatement(sql);
// 填充占位符
if (strs != null) {
for (int i = 0; i < strs.length; i++) {
ps.setString(i + 1, strs[i]);
}
}
// 执行sql语句,in表示sql语句影响的行数
in = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(rs, ps, conn);
}
return in;
}
//关流
private static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}