我们经常在已经搭建好的工程上去访问数据库,执行一些操作,但我不想搭建环境,只接用类去访问呢?这时就需要写一个访问数据库的工具类了。本文介绍两种方法:一种是直接把数据配置写在类里,另一种是把数据库配置写在一个properties属性文件里。
第一种:
package com.easy.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 采用直接赋值的方式获取数据库连接的工具类
* @author Administrator
*
*/
public class DBUtils {
private final static String driver = "oracle.jdbc.driver.OracleDriver";
private final static String url = "jdbc:oracle:thin:@localhost:1521:xe";
private final static String user = "test";
private final static String password = "test";
public static Connection getConnection() throws ClassNotFoundException,
SQLException {
Connection conn = null;
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
return conn;
}
public static void close(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(PreparedStatement pstmt) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
System.out.println("所获得的数据库连接为:"+conn);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
DBUtils.close(conn);
}
}
}
是不是很简单呢,呵呵,DBUtils里有个Main方法,是用来测试的。
第二种:
package com.easy.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* 采用读取属性文件的方式获取数据库连接的工具类
* @author Administrator
*
*/
public class DbUtil {
/** 创建读取properties文件类 */
private static Properties prop = new Properties();
/** 设定properties文件路径。properties文件要放在src目录下,放到WEB-INF下是找不到的,
* 因为此处用的是getResourceAsStream方法去加载属性文件,而它是根据类加载器来确定路径的,所以要放在src目录下。
* 如果是根目录则写成:/xxx.properties;
* 如果是当前目录下则写成:xxx.properties;
* 如果是其它目录则写成:/xxx/xxx/xxx.properties
* 也可以用:.代表当前目录;..代表上级目录,如:./xxx.properties;../xxx/xxx.properties
*/
private static String filePath = "/db.properties";
//private static String filePath = "db.properties";
//private static String filePath = "/com/easy/web/db.properties";
//private static String filePath = "./db.properties";
//private static String filePath = "../web/db.properties";
/** 创建ThreadLocal类,用来存放当前线程正在使用的Connection */
private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
/** 静态代码块加载properties文件 */
static {
InputStream in = DbUtil.class.getResourceAsStream(filePath);
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 此方法用来获取一个Connection。
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public static Connection getConnection() throws SQLException, ClassNotFoundException {
Connection conn = tl.get();
if(conn==null||conn.isClosed()){
String driver = prop.getProperty("database.driver");
//System.out.println("driver:"+driver);
String url = prop.getProperty("database.url");
//System.out.println("url:"+url);
String username = prop.getProperty("database.username");
//System.out.println("username:"+username);
String password = prop.getProperty("database.password");
//System.out.println("password:"+password);
Class.forName(driver);
conn = DriverManager.getConnection(url,username,password);
tl.set(conn);
}
return conn;
}
public static void close(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(PreparedStatement pstmt) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Connection conn = null;
try {
conn = DbUtil.getConnection();
System.out.println("所获得的数据库连接为:"+conn);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
DbUtil.close(conn);
}
}
}
和第一种一样,有个Main方法用来测试。
总结:
获取数据库核心语句就两句:
①Class.forName(driver);
②conn = DriverManager.getConnection(url,username,password);
①加载数据库驱动。不同的数据库,驱动是不一样的,但大概相似。本文用的是Oracle的驱动。驱动是需要驱动包的,本文的驱动包为ojdbc14.jar。
下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html
②利用驱动管理器来获取一个数据库连接。getConnection方法需要三个参数:数据库的url,用户名,密码。
以上两种方式其实原理都是一样的,只是获取数据库配置方式不一样而已。