Java中的Mysql(二)

今天来简化一下Mysql操作,也就是进行一些封装。

1,释放资源

为了节约内存空间,我们通常在操作完成后会对资源进行释放。
这里面要关闭的资源有PreparedStatement、Connection、以及ResultSet(前面还没总结到,这个是执行查询返回的结果集)

/**
	 * 关闭Connection和PreparedStatement
	 * 
	 * @param con
	 * @param p
	 */
	public static void close(Connection con, PreparedStatement p) {
		try {
			p.close();
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
/**
 * 重载close方法 关闭Connection  PreparedStatemen ResultSe
 * @param con
 * @param p
 * @param rs
 */
	public static void close(Connection con, PreparedStatement p, ResultSet rs) {
		try {
			rs.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		close(con, p);
	}

2,对数据库配置信息进行封装

先把我们的配置信息放在properties文件里面,可以方便操作。
然后再自己创建一个Configuration类,用来装载配置文件的信息。再用工具类返回这个类。

配置类

/**
 * 将配置文件中的数据放入配置类中以便使用
 * @author vv
 *
 */
public class Configuration {
	private String driver;
	private String url;
	private String name;
	private String pwd;
	
	@Override
	public String toString() {
		return "Configuration [driver=" + driver + ", url=" + url + ", name=" + name + ", pwd=" + pwd + "]";
	}
	public Configuration() {
		
	}
	public Configuration(String driver, String url, String name, String pwd) {
		super();
		this.driver = driver;
		this.url = url;
		this.name = name;
		this.pwd = pwd;
	}
	public String getDriver() {
		return driver;
	}
	public void setDriver(String driver) {
		this.driver = driver;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	
}

工具类

public class MysqlUtil {
	static Configuration conf = new Configuration();
	static {
		Properties p = new Properties();
		InputStream in;
		try {
			in = new FileInputStream("src/db.properties");
			try {
				p.load(in);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		conf.setDriver(p.getProperty("mysql.driver"));
		conf.setName(p.getProperty("mysql.name"));
		conf.setUrl(p.getProperty("mysql.url"));
		conf.setPwd(p.getProperty("mysql.pwd"));
	}

	public static Configuration getConfiguration() {
		return conf;
	}
}

如果不知道properties基本操作可以移步到 https://blog.csdn.net/weixin_44140423/article/details/100151664

3,对获取连接进行封装

每次都去加载驱动获取连接,有点麻烦。不如封装起来。

public static Connection getConn() {
		try {
			Class.forName(conf.getDriver());
		} catch (ClassNotFoundException e) {
			System.out.println("驱动加载失败");
		}
		try {
			return DriverManager.getConnection(conf.getUrl(), 
					conf.getName(), conf.getPwd());	//目前直接建立链接,后期增加连接池提高效率
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("获取连接失败");
			return null;
		}
	}
	

以上就是基本的工具类封装情况,其实还可以更加优化。就是对数据库操作的优化。

对了!ResultSet明明只是一个集合,为什么要关闭啊,一般来说没有听说关闭集合。

然后去搜了一下,翻到了源码(英语差,但可以使用翻译软件啊)。
在这里插入图片描述

翻译两段后:大概意思是【在某些情况下,需要立即释放ResultSet的数据库和JDBC资源,而不是等待它自动关闭时发生; close方法提供了这个即时发布。

后面的提示是:【当Statement关闭,重新执行或用于从多个结果序列中检索下一个结果时,ResultSet会自动关闭ResultSet。 在收集垃圾时,ResultSet也会自动关闭。

emmm,大概意思就是这个集合会自动关闭,或者在preparestatement关闭后会自动关闭。但在这种和数据库打交道的途中资源很宝贵,所以能关就是第一时间关。

帮助文档地址:

https://docs.oracle.com/cd/E13222_01/wls/docs45/classdocs/java.sql.ResultSet.html#top

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值