技术开发 频道

关于代码重用的感悟

【IT168 技术文章】

    在我们作项目时免不了碰到一些功能相同的代码,而这些代码若不加以管理便会使得程序变得十分臃肿,使程序的开发变得混乱,使后期的维护变得让人头晕眼花,所以做程序时注意代码重用性是很重要的!注意代码重用性不但可以使你在做程序时提高效率,而且可以将一些比较实用的代码有效的在其它项目中重新发挥作用!

    以下给出一段以连接数据库为例的代码,以讲述代码重用的重要性。

/**//*
 * 数据库连接工具类
 * 说明: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
}

    以上这个工具类是用来做数据库操作的(要注意注释,注释也是做程序开发时很重要的部分),即使上面的说明注释已经解释过如何使用这个工具类,我还是要用一段代码来解释一下如何使用这个工具类。


    代码如下: 

//DBToolsX工具类的应用示范:
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工具类在做其它程序时仅需稍加改动就可以发挥作用了!
    
    我们平时做程序时多注意代码重用性,对我们做程序是很有帮助的!

0
相关文章