日期:2014-05-16 浏览次数:20575 次
自己异想天开做的一个工具类,可以用database.properties管理连接的数据库属性。
?
有两种加载方式,一种是默认加载方式,即默认加载src(即编译后的classes)目录下的database.properties文件,
或者自定义文件,实例化的时候传入URL对象加载。
?
代码如下
/** * 此类可以进行不同数据库的连接,操作。<br> * 此类有一个带有一个String类型参数的构造方法,用来接收一个字符串作为所连接数据库的标识。并加载驱动<br> * 此类不提供任何初默认数据库连接配置,使用需要手动在类加载路径下配置database.propertiesa属性文件。<br> * 如果不想在类加载路径下配置database.propertiesa属性文件,可以在实例化的时候传入URL参数进行指定文件初始化。<br> * 配置格式如下:<br> * driver=oracle.jdbc.driver.OracleDriver<br> * url=jdbc:oracle:thin:@127.0.0.1:1521:orcl<br> * username=username<br> * password=password<br> * 每次使用完本类后需要手动调用close()方法关闭所使用的资源.<br> * * @version 1.0.0.0 * @author leaves叶知泉,<a href="http://c5ms.iteye.com/">博客地址c5ms.iteye.com</a> * QQ:1330771552 */ public class JDBConnection { /** * 构造方法,只调用init方法,此方法不需要提供属性文件路径,会自动在类加载路径下搜寻database.properties文件,默认即src目录下 * 。 */ public JDBConnection() { init(null); } /** * 构造方法,只调用init方法,需要制定加载的属性文件,需要一个URL类型参数 。 */ public JDBConnection(URL databaseURL) { init(databaseURL); } /** * 实例化方法,指定数据库名字,该类会得到属性配置文件里面配置的参数。 * * @param databaseName * 数据库名 * @throws Exception */ private void init(URL databaseURL) { URL path; Properties prop = new Properties(); InputStream is; if (databaseURL != null) { path = databaseURL; } else { path = ClassLoader.getSystemResource("database.properties"); } if (path == null) { try { throw new Exception("没有配置属性文件不能构建"); } catch (Exception e) { e.printStackTrace(); } } try { is = new FileInputStream(new File(path.toURI())); prop.load(is); is.close(); driver = prop.getProperty("driver"); url = prop.getProperty("url"); username = prop.getProperty("username"); password = prop.getProperty("password"); Class.forName(driver).newInstance(); } catch (Exception e) { e.printStackTrace(); System.out.println("属性配置读取失败,初始化失败"); return; } } /** * getConnection()方法会返回一个连接上构造此类时制定的数据库的Connection. * * @return 目标连接数据库的连接 */ public Connection getConnection() { Connection conn = null; try { conn = DriverManager.getConnection(url, username, password); } catch (Exception ee) { ee.printStackTrace(); } if (conn == null) { System.err.println("警告: DriverManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:" + driver + "\r\n链接位置:" + url + "\r\n用户/密码" + username + "/" + password); } return conn; } /** * 功能:执行查询语句 executeQuery()方法执行查询语句并且返回一个ResultSet,封装了执行结果。 * * @param sql * 想要执行的sql语句 * @param update * 是否返回允许更新的ResultSet * @param objects * 此sql语句需要处理的预编译参量 * @return rs 查询结果过对应的ResultSet * */ public ResultSet exeQuery(String sql, boolean update, Object... objects) throws SQLException { conn = getConnection(); if (update) prestmt = conn.prepareStatement(sql, ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE); else prestmt = conn.prepareStatement(sql); for (int i = 0; i < objects.length; i++) { prestmt.setObject(i + 1, objects[i]); } rs = prestmt.executeQuery(); return rs; } /** * 功能:执行查询语句 executeQuery()方法执行查询语句并且返回一个ResultSet,封装了执行结果。 * * @param sql * 要执行的查询语句,此语句是预编译语句。 * @return 执行给定查询语句后返回封装了执行结果的ResultSet<br> * 注意:此ResultSet是可滚动但通常不受 ResultSet 底层数据更改影响,并且不可更新的。 */ public ResultSet exeQuery(String sql) { try { conn = getConnection(); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = stmt.executeQuery(sql); } catch (SQLException ex) { System.err.println(ex.getMessage()); } return rs; } /** * 功能:执行更新操作 executeUpdate()方法执行更新语句,并且返回一个int值,包含给定查询所生成数据的 ResultSet 对象 * * @param sql * 要执行的查询语句,此语句是预编译语句 * @param objects * 此sql语句需要处理的预编译参量 * @return result 包含给定sql语句操作的数据条数,如果执行不成功,则返回0