系列文章目录
Java高级部分 JDBC编程
前言
通过我之前发的数据库连接,数据库连接https://blog.csdn.net/2301_81776550/article/details/147314012?spm=1001.2014.3001.5501能够发现问题:在访问数据库时,执行步骤都是相同的,不同的是每次执行的SQL语句。因此,为了简化数据库访问操作,减少代码冗余,提高效率,需要将访问数据库时通用的基本代码进行封装,即程序员自己编写一个数据库访问工具类DBUtils,用于提供访问数据库时所用到的连接,查询,更新和关闭等操作的基本方法,其他类通过调用DBUtils工具类来实现数据库的访问。所以下面我们来讲讲这个类是怎么写的。
提示:以下是本篇文章正文内容,下面案例可供参考
一、编写属性文件:
为了便于后期维护,在编写DBUtil工具类之前,通常将连接数据库的参数信息保存在属性文件中。
内容:
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/MY_STU?useSSL=false
user = root
pwd = 123456
而为了读取属性文件中的配置信息,需要编写一个Config配置类,在该类中通过java.util.properties类的get()方法来获取指定的“键”所对应的“值”。
内容:
package util;
import java.io.FileInputStream;
import java.util.Properties;
//配置类
public class Config {
private static Properties p = null;
static {
try {
p = new Properties();
// 加载配置文件
//p.load(new FileInputStream("config/oracle.properties"));
p.load(new FileInputStream("config/mySql.properties"));
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取键对应的值
public static String getValue(String key) {
return p.get(key).toString();
}
}
二、编写DBUtil工具类:
在上面的一些属性信息配置完毕后,下面我们就要开始编写此工具类了。
package DButils_;
import util.Config;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
/**
* 得到数据库连接
*/
public Connection getConnection() throws ClassNotFoundException,
SQLException, InstantiationException, IllegalAccessException {
// 通过Config获取Oracle数据库配置信息
String driver = Config.getValue("driver");
String url = Config.getValue("url");
String user = Config.getValue("user");
String pwd = Config.getValue("pwd");
try {
// 指定驱动程序
Class.forName(driver);
// 建立数据库连结
conn = DriverManager.getConnection(url, user, pwd);
return conn;
} catch (Exception e) {
// 如果连接过程出现异常,抛出异常信息
throw new SQLException("驱动错误或连接失败!");
}
}
/**
* 释放资源
*/
public void closeAll() {
// 如果rs不空,关闭rs
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 如果pstmt不空,关闭pstmt
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 如果conn不空,关闭conn
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 执行SQL语句,可以进行查询Select SQL
*/
public ResultSet executeQuery(String preparedSql, Object[] param) {
// 处理SQL,执行SQL
try {
// 得到PreparedStatement对象
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
// 为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
// 执行SQL语句
rs = pstmt.executeQuery();
} catch (SQLException e) {
// 处理SQLException异常
e.printStackTrace();
}
return rs;
}
/**
* 执行SQL语句,可以进行增、删、改的操作SQL,不能执行查询
*/
public int executeUpdate(String preparedSql, Object[] param) {
int num = 0;
// 处理SQL,执行SQL
try {
// 得到PreparedStatement对象
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
// 为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
// 执行SQL语句
num = pstmt.executeUpdate();
} catch (SQLException e) {
// 处理SQLException异常
e.printStackTrace();
}
return num;
}
}
三、使用DBUtil工具类:
下面代码使用DBUtil类对Userdetails表实现数据的增,删,改,查等操作。
import java.sql.ResultSet;
import com.qst.chapter02.db.DBUtil;
public class DBDemo {
public static void main(String[] args) {
String selectSql = "SELECT id,username,password,sex FROM userdetails";
String insertSql = "INSERT INTO userdetails(id,username,password,sex) VALUES(?,?,?,?)";
String updateSql = "UPDATE userdetails SET password=? WHERE username=?";
String deleteSql = "DELETE FROM userdetails WHERE username=?";
// 创建DBUtil对象
DBUtil db = new DBUtil();
try {
// 连接数据库
db.getConnection();
// 查询并显示原来的数据
ResultSet rs = db.executeQuery("SELECT id,username,password,sex FROM userdetails", null);
System.out.println("---------原来的数据---------");
while (rs.next()) {
System.out.println("行 " + rs.getRow() + ":"
+ rs.getInt(1)+ "\t"
+ rs.getString(2) + "\t"
+ rs.getString(3) + "\t"
+ (rs.getInt(4) == 1 ? "男" : "女"));
}
System.out.println("-------------------------");
// 执行添加
int count = db.executeUpdate(insertSql, new String[] { "9", "Rose",
"123456", "0" });
System.out.println("添加" + count + "行!");
// 执行修改
count = db.executeUpdate(updateSql, new String[] { "686868","Tom" });
System.out.println("修改" + count + "行!");
// 执行删除
count = db.executeUpdate(deleteSql, new String[] { "lisi" });
System.out.println("删除" + count + "行!");
// 查询并显示更新后的数据
rs = db.executeQuery(selectSql, null);
System.out.println("---------更新后的数据---------");
while (rs.next()) {
System.out.println("行 " + rs.getRow() + ":"
+ rs.getInt(1)+ "\t"
+ rs.getString(2) + "\t"
+ rs.getString(3) + "\t"
+ (rs.getInt(4) == 1 ? "男" : "女"));
}
System.out.println("-------------------------");
} catch (Exception e) {
// 关闭连接
db.closeAll();
e.printStackTrace();
}
}
}
总结
以上就是今天要讲的内容,本文就是简单的让大家认识一下这个我们自己编写的工具类,而且这个工具类也是用封装的思想,就是对于重复操作的我们可以将其封装起来,减少代码冗余,下面会持续更新的,谢谢大家。