关于代码重用的感悟
在我们作项目时免不了碰到一些功能相同的代码,而这些代码若不加以管理便会使得程序变得十分臃肿,使程序的开发变得混乱,使后期的维护变得让人头晕眼花,所以做程序时注意代码重用性是很重要的!注意代码重用性不但可以使你在做程序时提高效率,而且可以将一些比较实用的代码有效的在其它项目中重新发挥作用!
以下给出一段以连接数据库为例的代码,以讲述代码重用的重要性。
* 数据库连接工具类
* 说明:DBToolsX-此工具类用于获取数据库连接与关闭数据库连接,关闭结果集等功能。
* 无需实例化该工具类(DBToolsX),可直接调用此工具类(DBToolsX)的静态方法
* 注意:1.使用前请导入相应适当的Jar文件
* 2.注意更改为适用的加载数据库驱动
* 3.注意更改为适用的数据库连接字符串(URL)
* 4.注意更改为正确的数据库用户名(USER)和密码(PWD)
* 5.请注意检查加载数据库驱动与数据库连接字符串(URL)是否合适,正确
*/
import java.sql. * ;
public class DBToolsX
... {
//静态块:加载数据库驱动
static
...{
try
...{
Class.forName("");
//加载SQlServer2000驱动-com.microsoft.jdbc.sqlserver.SQLServerDriver
//加载MySQL5.x驱动-com.mysql.jdbc.Driver
//加载Oracle9i驱动-oracle.jdbc.driver.OracleDriver
}
catch (ClassNotFoundException e)
...{
e.printStackTrace();
}
}
//禁止实例化
private DBToolsX()...{}
//获取连接方法
public synchronized static Connection getConnection()
...{
Connection con=null;
try
...{
con=DriverManager.getConnection(URL,USER,PWD);
}
catch (SQLException e)
...{
e.printStackTrace();
}
return con;
}
//关闭ResultSet方法
public static void closeResultSet(ResultSet rs)
...{
try
...{
if(rs!=null)
rs.close();
}
catch (SQLException e)
...{
e.printStackTrace();
}
}
//关闭Statement方法
public static void closeStatement(Statement stmt)
...{
try
...{
if(stmt!=null)
stmt.close();
}
catch (SQLException e)
...{
e.printStackTrace();
}
}
//关闭本次连接方法
public static void closeConnection(Connection con)
...{
try
...{
if(con!=null)
con.close();
}
catch (SQLException e)
...{
e.printStackTrace();
}
}
//数据库连接字符串
private static String URL="";
/**//*
SQlServer2000的连接字符串:jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs
MySQL5.x的连接字符串:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gb2312
Oracle9i(thin)<无需WEB服务器端安装Oracle客户端>的连接字符串:jdbc:oracle:thin:@127.0.0.1:1521:TEMPDB
Oracle9i(oci)的连接字符串:jdbc:oracle:oci8:@TEMPDB
*/
//数据库用户名
private static String USER="";
//测试常用用户名:SQLServer2000-sa,MySQL5.x-root,Oracle9i-scott
//数据库密码
private static String PWD="";
//测试常用密码:SQLServer2000-sa/空密码,MySQL5.x-root/a,Oracle9i-tiger
}
以上这个工具类是用来做数据库操作的(要注意注释,注释也是做程序开发时很重要的部分),即使上面的说明注释已经解释过如何使用这个工具类,我还是要用一段代码来解释一下如何使用这个工具类。
代码如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.xuan.vo.UserInfo;
// 以一个验证用户登录的实例解释DBToolsX工具类的使用
// 这里就不给出UserInfo的JavaBean了
public class UserInfoDAO
... {
//构造方法(这里的构造方法须传入一个Connection对象,
//而这个Connection对象可以在实例化UserInfoDAO时用
//DBToolsX.getConnection()来获取并传入:new UserInfoDAO(DBToolsX.getConnection())
public UserInfoDAO(Connection conn)
...{
this.conn=conn;
}
//判断用户登录条件方法
public boolean checkUser(UserInfo user)
...{
try
...{
ps=conn.prepareStatement("SELECT userid FROM UserInfo WHERE userid=? AND passwordchar=?");
ps.setString(1,user.getUserid());
ps.setString(2,user.getPasswordchar());
rs=ps.executeQuery();
if(rs.next())
...{
return true;
}
else
...{
return false;
}
}
catch (SQLException e)
...{
e.printStackTrace();
}
finally
...{
// finally块十分重要,在连接被打开后必须在不用此连接时关闭连接以解省资源
DBTools.closeResultSet(rs); //关闭结果集rs
DBTools.closeStatement(ps); //关闭ps
DBTools.closeConnection(conn); //关闭连接conn
}
return false;
}
private Connection conn=null;
private ResultSet rs=null;
private PreparedStatement ps=null;
}
这样我们就做到了代码的重用(当然这个例子做得还可以更简便,不过在这里只为了讲述代码重用的意义,所以没再优化代码),我们不需要在每次对数据库进行操作时重新写DBToolsX.java中的代码了,不但节省了时间,提高了做程序的效率,而且程序不再臃肿,那些重复的代码也被“巧妙”的“隐藏”了,对修改和维护程序起到了作用,更好的是DBToolsX工具类在做其它程序时仅需稍加改动就可以发挥作用了!
我们平时做程序时多注意代码重用性,对我们做程序是很有帮助的!
以上为本人拙见,还请各位高手多多指点!
阿轩
AXuan_Good_GAME
2008年4月