自己异想天开做的一个工具类,可以用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
*/
public int exeUpdate(String sql, Object... objects) {
int result;
try {
conn = getConnection();
prestmt = conn.prepareStatement(sql, ResultSet.CONCUR_READ_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE);
for (int i = 0; i < objects.length; i++)
prestmt.setObject(i + 1, objects[i]);
result = prestmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
result = 0;
}
return result;
}
/**
* 功能:执行更新操作 executeUpdate()方法执行更新语句,并且返回一个int值,包含给定查询所生成数据的 ResultSet 对象
*
* @return result 包含给定sql语句操作的数据条数,如果执行不成功,则返回0
*/
public int exeUpdate(String sql) {
int result = 0;
try {
conn = getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
result = stmt.executeUpdate(sql);
} catch (SQLException ex) {
result = 0;
}
return result;
}
/**
* 功能:关闭数据库的连接 close()方法关闭所使用的资源.
*/
public void close() {
try {
if (rs != null)
rs.close();
if (prestmt != null)
prestmt.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
private String driver;
private String url;
private String username;
private String password;
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private PreparedStatement prestmt = null;
}
属性文件如下:
#######################
### ORACLE ###
#######################
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#username=scott
#password=tiger
#######################
### MYSQL ###
#######################
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/file
username=root
password=admin