传智播客JDBC_规范和封装jdbc程序代码学习笔记
2009-03-15 00:52
603 查看
package three.jdbc.base;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import three.jdbc.utils.Utils;
// import 的是接口(sql.XXX)
// 不是具体的实现接口类(mysSql.XXX)
// 接口可以引用实现类的对象 从而
// 降低耦合度
public class Base {
public static void main(String[] args) throws SQLException {
template();
}
static void template() throws SQLException{
Statement statement = null;
ResultSet rs = null;
// 1 创建连接
Connection connection = Utils.getConnection();
try {
// 2 创建语句 (小插曲因为:创建 所以是createStatement不是getStatement )
statement = connection.createStatement();
// 4 执行语句
rs = statement.executeQuery("select *from user");
// 5 处理结果
while (rs.next()) {
System.out.println(rs.getObject(1)
+ "/t" + rs.getObject(2)
+ "/t" + rs.getObject(3)
+ "/t" + rs.getObject(4)
+ "/t");
}
} finally {
// 释放资源 finally
Utils.free(connection, statement, rs);
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
package three.jdbc.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// 工具类 特点
// 1 不希望被继承 --> final
// 2 不希望被构造 --> private 的 构造函数
// 3 提供的方法多静态的 --> static
public final class Utils {
private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String user = "root";
private static String password = "root";
private Utils(){
}
// 在不实例的前提下 调用其方法
// 1 单例模式
// 2 public 静态方法
static {
// 保证注册一次-> 1静态代码块类被加载到虚拟机时被执行
try {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
public static void free(Connection connection,
Statement statement,
ResultSet rs) {
// 再使用 对象实例时 养成判断nul的习惯
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
工具类 将业务逻辑代码和为了实现业务逻辑的技术实现代码分离
再这个例子中 执行sql 句 和 处理结果(打印结果到控制台上)
算做是 业务逻辑。想注册驱动,释放连接, 这种有共性 而切
和业务逻辑松耦合的代码就是工具类了。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import three.jdbc.utils.Utils;
// import 的是接口(sql.XXX)
// 不是具体的实现接口类(mysSql.XXX)
// 接口可以引用实现类的对象 从而
// 降低耦合度
public class Base {
public static void main(String[] args) throws SQLException {
template();
}
static void template() throws SQLException{
Statement statement = null;
ResultSet rs = null;
// 1 创建连接
Connection connection = Utils.getConnection();
try {
// 2 创建语句 (小插曲因为:创建 所以是createStatement不是getStatement )
statement = connection.createStatement();
// 4 执行语句
rs = statement.executeQuery("select *from user");
// 5 处理结果
while (rs.next()) {
System.out.println(rs.getObject(1)
+ "/t" + rs.getObject(2)
+ "/t" + rs.getObject(3)
+ "/t" + rs.getObject(4)
+ "/t");
}
} finally {
// 释放资源 finally
Utils.free(connection, statement, rs);
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
package three.jdbc.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// 工具类 特点
// 1 不希望被继承 --> final
// 2 不希望被构造 --> private 的 构造函数
// 3 提供的方法多静态的 --> static
public final class Utils {
private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String user = "root";
private static String password = "root";
private Utils(){
}
// 在不实例的前提下 调用其方法
// 1 单例模式
// 2 public 静态方法
static {
// 保证注册一次-> 1静态代码块类被加载到虚拟机时被执行
try {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
public static void free(Connection connection,
Statement statement,
ResultSet rs) {
// 再使用 对象实例时 养成判断nul的习惯
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
工具类 将业务逻辑代码和为了实现业务逻辑的技术实现代码分离
再这个例子中 执行sql 句 和 处理结果(打印结果到控制台上)
算做是 业务逻辑。想注册驱动,释放连接, 这种有共性 而切
和业务逻辑松耦合的代码就是工具类了。
相关文章推荐
- 第四章 规范和封装jdbc程序代码
- 规范和封装jdbc程序代码
- 代码规范学习笔记
- JDBC基础学习笔记_02JDBC编程的mysql数据准备并编写程序
- JDBC基础学习笔记_05_jdbc的程序优化_Dao
- [Tex学习笔记]写文章需要规范、需要引用到位. [LaTeX代码]
- javascript 学习笔记(四) 倒计时程序代码
- 【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序
- 传智播客c/c++公开课学习笔记--C语言与木马恶意代码分析和360安全防护揭秘
- 在Eclipse中封装程序通过JDBC访问MySQL的代码
- Python学习笔记(15)-Python代码转换为exe可执行程序详解
- 学习笔记:如何写出规范而优美的JavaScript代码(20180218-2)
- 微信小程序学习笔记——第一弹:小程序代码结构
- Objective-C 学习笔记16 代码规范
- Kotlin学习笔记1-3 入门-代码规范
- 《编写高质量代码改善Java程序的151个建议》学习笔记 第6章 枚举和注解
- JDBC基础学习笔记_05_jdbc的程序优化_DTC相关
- hibernate学习笔记之一(JDBC回顾-ORM规范)
- hibernate学习笔记之中的一个(JDBC回想-ORM规范)