一、JDBC功能详解
在上一篇中有使用到DriverManager、Connection、Statement、ResultSet。这里具体说下
驱动管理对象DriverManager
DriverManager管理一组 JDBC 驱动程序的基本服务。DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。
getConnection(获取到数据库的连接并返回连接对象)
语法如下
static Connection getConnection(String url, String user, String password);
返回值:Connection数据库连接对象
- url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
- user:用户名
- password:密码
数据库连接对象Connection
获取执行对象
- 第一种:Statement createStatement();
- 第二种:PreparedStatement prepareStatement(String sql);
prepareStatement(String sql) 会进行预编译,防止SQL注入,优先使用这种。
事务管理
开启事务:setAutoCommit(boolean autoCommit); // false:开启事务,true:关闭事务。
提交事务:commit();
回滚事务:rollback();
释放资源:void close();
执行对象Statement
在使用createStatement与prepareStatement语法会有不同。
// createStatement
String sql = "SELECT * FROM user";
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery(sql);
// prepareStatement
String sql = "SELECT * FROM student";
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
执行语句
- int executeUpdate(String sql)
- 返回值int:返回影响的行数。
- 可以执行insert、update、delete语句。
- ResultSet executeQuery(String sql)
- 返回值ResultSet:封装查询的结果。
- 参数sql:可以执行select语句。
- 释放资源:void close();
结果集对象ResultSet
- boolean next()
- 有数据:返回true,并将索引向下移动一行
- 没有数据:返回false
- 获取结果集数据
- getXXX:XXX是返回值得类型,比如返回的是Int,那么就是getInt("id"),VARCHAR则getString("name");
- 释放资源:void close();
二、抽取工具类
在当前这种模式下,注册驱动,获取数据库链接,释放资源都是重复的,因此可以抽取一个工具类
配置文件
这在src目录下创建config.properties配置文件
driverClass=com.mysql.jdbc.Driver // 驱动信息
url=jdbc:mysql://xxxxxxxxx:3306/db1 // 数据库url
username=username // 用户名
password=password // 密码
创建工具类
在utils下创建工具类JDBCutils。工具类的实现步骤
- 私有构造方法
private JDBCUtils(){};
- 声明配置
private static String driverClass;
private static String url;
private static String username;
private static String password;
private static Connection con;
- 读取配置文件,注册驱动
static {
try {
// 先获取当前类的class对象,然后再获取当前的类加载器,获取资源文件的输入流。
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("config.properties");
// 创建Properties集合,加载流对象的信息
Properties prop = new Properties();
prop.load(is);
// 变量赋值
driverClass = prop.getProperty("driverClass");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
//注册驱动
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
- 提供连接数据库的方法
public static Connection getConnection() {
try {
con = DriverManager.getConnection(url,username,password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
- 提供释放资源的方法
// 确认数据对象,执行对象,结果集对象是否存在,存在则释放资源
public static void close(Connection con, Statement stat, ResultSet rs) {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection con, Statement stat) {
close(con,stat,null);
}
调用方式
- 获取数据库连接
con = JDBCUtils.getConnection();
- 释放资源
JDBCUtils.close(con,stat);
不足之处,欢迎留言支持!!!