快速上手JDBC(一)

2014-11-24 02:33:28 · 作者: · 浏览: 3

1. JDBC连接数据库的五步走。
JDBC连接数据库操作最多的就是查询操作,也是JDBC中相对其他的增、删、改操作比较复杂的,所以笔者说的五步走是以数据查询操作为基础的。大部分人在学习JDBC的时候可能感觉JDBC比较难学,那几个步骤记不住,其实不然,主要原因在于你是否用心学了,是否用心记了。笔者认为JDBC连接数据库的步骤可以概括为CCPRC。
1. 驱动注册(C—Class)
Class.forName("oracle.jdbc.driver.OracleDriver");
2. 获取连接(C—Connection)
String str = "jdbc:oracle:thin:@localhost:1521:oracle";
Connection conn = DriverManager.getConnection(str, "hr", "hr");
3. 声明预编译语句(P—PreparedStatement)
String sql = "select * from person";
PreparedStatement ps = conn.prepareStatement(sql);
4. 执行语句(R—ResultSet)
ResultSet rs = ps.executeQuery();
5.释放资源(C—close)
ps.close();
conn.close();
记住CCPRC,并且知道每个字母代表的意思,相信即使你是菜鸟你也可以搞定的。

2.写一个比较标准的DBhelper类,实现代码重用,提高连接效率。

如果你按照上面的步骤可以搞定了,那么接下来你应该考虑进一步的进行优化。在一个软件中和数据库的连接有很多次的,我们不能每次都重复的写相同的代码,也没有必要重复的注册数据库的驱动,所以我们应将变化性很小的东西放在,可以重用的东西放在一起,也就是放在一个类里供大家来用。

定义一个DBhelper类。
public final class DbHelper {}
用final关键字修饰是因为我们不希望这个类被继承。

像数据库连接字符串、驱动类字符串、数据库的登录名、数据库的登录密码等这些基本不会发生变化的属性我就可以在DBhelper中声明为常量。

private final static String DB_URL = "jdbc:oracle:thin:@localhost:1521:oracle";
private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
private final static String DB_USERNAME = "hr";
private final static String DB_PASSWORD = "hr";
数据库的驱动不需要多次注册,我们把数据库驱动的注册放在static{}代码块中,仅当DBhelper类被加载时执行一次就可以。
static {
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
这个是和数据库建立连接的静态方法。
public static Connection getConnection() {
try {
conn = DriverManager
.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
} catch (Exception ex) {
ex.printStackTrace();
}
return conn;
}
资源的关闭是每次和数据库交互之后必做的,其中可能涉及到PreparedStatement、Connection、ResultSet、Statement等对象的关闭,如果不关闭,一段时间之后你的系统可能就要崩溃了,因为系统的资源已经被用完了,而且都没有归还。就相当于当我们地球的所有资源都用光了,我们的地球也就要毁灭了。
资源的关闭是伴随着和数据库的交互而存在的,有数据库交互的地方就需要数据库资源的关闭,所以实现资源关闭代码的重用也是必须的,否则你必须每次和数据库交互时都重复的写下面这些代码。

finally {
try {
if (ps != null) {

ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}

}

}
将资源关闭的代码写在DBhelper中如下所示:
// 关闭ResultSet资源
public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}

}

}

// 关闭Statement资源
public static void close(Statement sta) {
if (sta != null) {
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}

}

}

// 关闭Connection资源
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
}
DBhelper类的完整代码见附件。