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

JSP
Java 创建cookie和删除cookie
jsp 从web.xml读取连接数据库的参数
jsp 不支持EL表达式,解决办法
jsp 获取客户端的浏览器和操作系统信息
struts2 session 解读
struts2 spring整合fieldError问题
jsp 生成验证码代码
搭建java WEB开发环境和应用
JSP 自定义标签
Java 区分文本中的中英文字符函数
通用JSP页面 jsp入门级文章
jsp struts1 标签实例详解
一个jdbc 测试程序代码
SSH整合中 hibernate托管给Spring得到SessionFactory
jsp SmartUpload 实现上传功能代码
jsp Unsupported encoding: gb2312 错误原因
java Struts2 在拦截器里的跳转问题
jsp 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
Java 项目生成静态页面的代码
jdk与jre的区别 很形象,很清晰,通俗易懂

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


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