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

JSP
搭建Eclipse+MyEclipse开发环境
卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!
一个jsp+AJAX评论系统
JSP 多个文件打包下载代码
JSP 动态树的实现
jsp 重复提交问题
J2ME/J2EE实现用户登录交互 实现代码
访问JSP文件或者Servlet文件时提示下载的解决方法
JSP EL表达式详细介绍
JSP 报表打印的一种简单解决方案
jsp 自定义标签实例
AJAX自学练习 无刷新从数据库后台取数据显示
AJAX 自学练习 请求与显示
AJAX 自学练习 无刷新提交并修改数据库数据并显示
jsp 文件上传浏览,支持ie6,ie7,ie8
JSP application(return String)用法详例
jsp form表单方法示例
JSP request(return String)用法详例
JSP forward用法分析实例代码分析
JSP JavaBean的setProperty属性

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 236 ::
收藏到网摘: 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());
  }
  }