如何使用单例模式返回一个安全的Connection
2017-11-19 17:08
399 查看
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectDemo { public enum MyEnumSingleton { connectionFactory; private Connection conn; private MyEnumSingleton() { try { String url = "jdbc:mysql://localhost:3306/mydb"; String name = "root"; String password = ""; String Driver = "com.mysql.jdbc.Driver"; Class.forName(Driver); conn = DriverManager.getConnection(url, name, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Connection getConn() { return conn; } } public static Connection getConn() { return MyEnumSingleton.connectionFactory.getConn(); } }
使用枚举类时,构造方法会被自动调用。
再修改一下,降低一下耦合度,将建立连接的四大参数改成在配置文件中获取
首先在项目目录下建立一个配置文件
把参数添加进去
变成从配置文件中读取参数,这样修改的话只用修改配置文件就可以了
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class ConnectDemo { public enum MyEnumSingleton { connectionFactory; private Connection conn; private MyEnumSingleton() { try { InputStream in=Connection.class.getClassLoader() .getResourceAsStream("dbconfig.properties"); Properties pro=new Properties(); pro.load(in); String url = pro.getProperty("url"); String name = pro.getProperty("name"); String password =pro.getProperty("password"); String Driver = pro.getProperty("DriverClassName"); Class.forName(Driver); conn = DriverManager.getConnection(url, name, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } public Connection getConn() { return conn; } } public static Connection getConn() { return MyEnumSingleton.connectionFactory.getConn(); } }
相关文章推荐
- MVC中,如果从controller返回的不是一个html,而是一个文本,使用AJAX中如何获取?
- 如何在终端使用后台运行模式启动一个Linux应用程序
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- 创建存储过程,以部门编号为参数返回该部门的人数及平均工资(返回一个值可以通过函数来实现,但如果要返回多个值,需要使用out或in out模式参数实现)
- 客户端使用Ajax访问struts2 , struts2如何返回一个json数据!json-lib与flexjson
- 一个"如何使用示波器安全测试接市电电路板"的问题
- 如何将DBUtil中使用BeanListHandler中转返回的List存入一个JSONArray中
- MVC中,如果从controller返回的不是一个html,而是一个文本,使用AJAX中如何获取?
- 如何使用三层架构设计模式去完整的实现一个功能?
- 在一个有返回值的方法里使用了子线程,如何返回子线程中的值,如下代码中,我在子线程获取到了address的值,但是这个方法的返回结果是空,该如何解决?
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- 如何使用Future和ConcurrentHashMap实现一个线程安全且高效的缓存
- 如何进入安全模式? windows系统使用小技巧
- 如何使用指针从函数返回一个数组。
- 如何在一个项目中完美融入GreenDao并使用Facde设计模式操作数据库
- Yii:如何在CGridView列表控件使用了Ajax方式更新数据的情况下返回前一个页面
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- 单例模式如何在多线程环境下保证安全—Double Checked Locking 模式使用
- 如何使用double-check实现一个单例模式
- 如何在终端使用后台运行模式启动一个Linux应用程序