Java高级:数据库访问优化
系列文章目录
Java高级部分 JDBC编程
文章目录
- 系列文章目录
- 前言
- 一、编写属性文件:
- 二、编写DBUtil工具类:
- 三、使用DBUtil工具类:
- 总结
前言
通过我之前发的数据库连接,数据库连接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不空,关闭rsif (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}// 如果pstmt不空,关闭pstmtif (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}// 如果conn不空,关闭connif (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 执行SQL语句,可以进行查询Select SQL*/public ResultSet executeQuery(String preparedSql, Object[] param) {// 处理SQL,执行SQLtry {// 得到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,执行SQLtry {// 得到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();}}}
总结
以上就是今天要讲的内容,本文就是简单的让大家认识一下这个我们自己编写的工具类,而且这个工具类也是用封装的思想,就是对于重复操作的我们可以将其封装起来,减少代码冗余,下面会持续更新的,谢谢大家。