当前位置: 首页 > 图文教程 > 网络编程 > JSP > 封装数据库操作,Javabean给数据库瘦身

JSP
Hibernate save() saveorupdate()的用法
hibernate更新数据方法小结
jsp 复选框使用方法
JSP单选按钮验证、下拉框验证、复选框验证实现代码
jsp Hibernate批量更新和批量删除处理代码
JSP彩色验证码的实例代码
[J2SE]Java中3DES加密解密调用示例
【算法】扑克发牌算法实现
java易懂易用的MD5加密(可直接运行) (1)
java 易懂易用的MD5加密(可直接运行)(2)
java 截取字符串(判断汉字)
java 中文字符串数组按照音序排列
JAVA 18位身份证号码校验码的算法
jsp JFreeChart使用心得与例子
Hibernate 查询方式总结
java struts常见错误以及原因分析
Java 获取URL的内容
JAVA (Jsp)利用Google的Translate开发API的代码
java SOAPHEADER的web service
JSP与JS交互问题 值传递

JSP 中的 封装数据库操作,Javabean给数据库瘦身


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 225 ::
收藏到网摘: n/a

  封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。
  但是很多网友在封装时,却喜欢返回结果集(ResultSet对象),那么这个封装就没有意义了。
  1. 又是直接操作核心数据库类,跟封装前几乎没什么变化。
  2. 结果集总是依赖于它使用的连接(Connection)对象。因此当连接对象在方法内被关闭后,你返回的ResultSet就没有用了。
  如果真的要获得查询数据库的结果集,就把结果集对象内的所有数据,转储到以Map为元素的List对象内。
  当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))
  下面是简单的数据库操作Javabean的代码
  DbWrapper.java
  import java.sql.*;
  import java.util.*;
  public class DbWrapper
  {
  // 定义连接池对象为静态变量,将一直存在,直到工作目录关闭。
  private static DataSource ds = null;
  // 1.用连接池的方式获得连接
  // 如果不是做多数据库程序,推荐使用此方法
  // 相关内容:在tomcat管理界面配置连接池
  public static Connection openConnection() throws Exception
  {
  // 只需要初始化1次
  if ( ds == null )
  {
  Context initContext = new InitialContext();
  Context envContext = (Context) initContext.lookup("java:/comp/env");
  DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");
  }
  return ds.getConnection();
  }
  // 2.用jdbc驱动获得连接
  // 相关内容:JSP数据库连接大全
  public static Connection openConnection(
  String driver,
  String url,
  String username,
  String password)
  throws Exception
  {
  Class.forName(driver).newInstance();
  return DriverManager.getConnection(url, username, password);
  }
  public static void closeConnection(Connection conn) throws Exception
  {
  if ( conn != null )
  {
  conn.close();
  }
  }
  public static int executeUpdate(String sql) throws Exception
  {
  int count = 0;
  Connection conn = null;
  Statement stmt = null;
  try
  {
  conn = openConnection();
  stmt = conn.createStatement();
  count = stmt.executeUpdate(sql);
  }
  catch ( Exception e )
  {
  throw e;
  }
  finally
  {
  closeConnection(conn);
  }
  return count;
  }
  public static List executeQuery(String sql) throws Exception
  {
  List list = new ArrayList();
  Connection conn = null;
  Statement stmt = null;
  ResultSet rs = null;
  try
  {
  conn = openConnection();
  stmt = conn.createStatement();
  rs = stmt.executeQuery(sql);
  ResultSetMetaData rsmd = rs.getMetaData();
  while ( rs.next() )
  {
  Map map = new HashMap();
  for ( int i = 1; i < = rsmd.getColumnCount(); i++ )
  {
  map.put(rsmd.getColumnName(i), rs.getObject(i));
  }
  list.add(map);
  } }
  catch ( Exception e )
  {
  e.printStackTrace();
  }
  finally
  {
  if ( rs != null ) rs.close();
  closeConnection(conn);
  }
  return list; }
  }
  使用示例:
  // 1.对于insert, update, delete语句int count = DbWrapper.executeUpdate(sql);
  // 2.对于selete语句
  java.util.List list = DbWrapper.executeQuery(sql);
  // 方法一:按名字取值,注意大小写是严格区分的
  for ( int i = 0; i < list.size(); i++ )
  {
  java.util.Map map = (java.util.Map)list.get(i);
  out.println(mag.get("column_name").toString());
  }
  // 方法二:遍历取值
  for ( int i = 0; i < list.size(); i++ )
  {
  java.util.Map map = (java.util.Map)list.get(i);
  for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();)
  {
  String column_name = it.next().toString()); // 取值时注意null判断
  out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());
  }
  }