Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 554|回复: 0

[jsp学习]将数据库操作封装到Javabean

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 23:33:45 | 显示全部楼层 |阅读模式
    封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。
       

       
    但是很多网友在封装时,却喜欢返回结果集(ResultSet对象),那么这个封装就没有意义了。
       

       
    1. 又是直接操作核心数据库类,跟封装前几乎没什么变化。
       
    2. 结果集总是依赖于它使用的连接(Connection)对象。因此当连接对象在方法内被关闭后,你返回的ResultSet就没有用了。
       

       
          如果真的要获得查询数据库的结果集,就把结果集对象内的所有数据,转储到以Map为元素的List对象内。
       
    当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))
       

       
    下面是简单的数据库操作Javabean的代码:
       
      
      
         

       
         
          
          DbWrapper.java
          
          
         
    1. [b]import[/b] java.sql.*;
    2. [b]import[/b] java.util.*;
    3. [b]public[/b] [b]class[/b] DbWrapper
    4. {
    5.     [i]// 定义连接池对象为静态变量,将一直存在,直到工作目录关闭。[/i]
    6.     [b]private[/b] [b]static[/b] DataSource ds = [b]null[/b];

    7.     [i]// 1.用连接池的方式获得连接[/i]
    8.     [i]// 如果不是做多数据库程序,推荐使用此方法[/i]
    9.     [i]// 相关内容:[url=http://blog.csdn.net/cm4ever/archive/2004/10/22/147446.aspx]在tomcat管理界面配置连接池[/url][/i]
    10.     [b]public[/b] [b]static[/b] Connection [b]openConnection[/b]() [b]throws[/b] Exception
    11.     {
    12.         [i]// 只需要初始化1次[/i]
    13.         [b]if[/b] ( ds == [b]null[/b] )
    14.         {
    15.             Context initContext = [b]new[/b] [b]InitialContext[/b]();
    16.             Context envContext = (Context) initContext.[b]lookup[/b]("java:/comp/env");
    17.             DataSource ds = (DataSource) envContext.[b]lookup[/b]("jdbc/MyDataSource");
    18.         }
    19.         [b]return[/b] ds.[b]getConnection[/b]();
    20.     }
    21.    
    22.     [i]// 2.用jdbc驱动获得连接[/i]
    23.     [i]// 相关内容:[url=http://blog.csdn.net/cm4ever/archive/2004/09/30/121770.aspx]JSP数据库连接大全[/url][/i]
    24.     [b]public[/b] [b]static[/b] Connection [b]openConnection[/b](
    25.         String driver,
    26.         String url,
    27.         String username,
    28.         String password)
    29.             [b]throws[/b] Exception
    30.     {
    31.         Class.[b]forName[/b](driver).[b]newInstance[/b]();
    32.         [b]return[/b] DriverManager.[b]getConnection[/b](url, username, password);
    33.     }
    34.    
    35.     [b]public[/b] [b]static[/b] void [b]closeConnection[/b](Connection conn) [b]throws[/b] Exception
    36.     {
    37.         [b]if[/b] ( conn != [b]null[/b] )
    38.         {
    39.             conn.[b]close[/b]();
    40.         }
    41.     }

    42.     [b]public[/b] [b]static[/b] int [b]executeUpdate[/b](String sql) [b]throws[/b] Exception
    43.     {
    44.        int count = 0;
    45.         
    46.         Connection conn = [b]null[/b];
    47.         Statement  stmt = [b]null[/b];
    48.         
    49.         [b]try[/b]
    50.         {
    51.             conn = [b]openConnection[/b]();
    52.             stmt = conn.[b]createStatement[/b]();
    53.         
    54.             count = stmt.[b]executeUpdate[/b](sql);
    55.         }
    56.         [b]catch[/b] ( Exception e )
    57.         {
    58.             [b]throw[/b] e;
    59.         }
    60.         [b]finally[/b]
    61.         {
    62.             [b]closeConnection[/b](conn);
    63.         }
    64.         
    65.         [b]return[/b] count;
    66.     }
    67.    
    68.     [b]public[/b] [b]static[/b] List [b]executeQuery[/b](String sql) [b]throws[/b] Exception
    69.     {
    70.         List list = [b]new[/b] [b]ArrayList[/b]();
    71.         
    72.         Connection conn = [b]null[/b];
    73.         Statement  stmt = [b]null[/b];
    74.         ResultSet  rs   = [b]null[/b];
    75.         
    76.         [b]try[/b]
    77.         {
    78.             conn = [b]openConnection[/b]();
    79.             stmt = conn.[b]createStatement[/b]();
    80.             rs   = stmt.[b]executeQuery[/b](sql);
    81.             
    82.             ResultSetMetaData rsmd = rs.[b]getMetaData[/b]();
    83.         
    84.             [b]while[/b] ( rs.[b]next[/b]() )
    85.             {
    86.                 Map map = [b]new[/b] [b]HashMap[/b]();
    87.                
    88.                 [b]for[/b] ( int i = 1; i <= rsmd.[b]getColumnCount[/b](); i++ )
    89.                 {
    90.                     map.[b]put[/b](rsmd.[b]getColumnName[/b](i), rs.[b]getObject[/b](i));
    91.                 }
    92.                
    93.                 list.[b]add[/b](map);
    94.             }
    95.         }
    96.         [b]catch[/b] ( Exception e )
    97.         {
    98.             e.[b]printStackTrace[/b]();
    99.         }
    100.         [b]finally[/b]
    101.         {
    102.             [b]if[/b] ( rs != [b]null[/b] ) rs.[b]close[/b]();
    103.             [b]closeConnection[/b](conn);
    104.         }
    105.         
    106.         [b]return[/b] list;
    107.     }
    108. }
    复制代码

          
         
       

    使用示例:

       
         
          
         
    1. [i]// 1.对于insert, update, delete语句
    2. [/i]int count = DbWrapper.[b]executeUpdate[/b](sql);

    3. [i]// 2.对于selete语句[/i]
    4. java.util.List list = DbWrapper.[b]executeQuery[/b](sql);

    5. [i]// 方法一:按名字取值,注意大小写是严格区分的[/i]
    6. [b]for[/b] ( int i = 0; i < list.[b]size[/b](); i++ )
    7. {
    8.     java.util.Map map = (java.util.Map)list.[b]get[/b](i);
    9.     out.[b]println[/b](mag.[b]get[/b]("column_name").[b]toString[/b]());
    10. }

    11. [i]// 方法二:遍历取值[/i]
    12. [b]for[/b] ( int i = 0; i < list.[b]size[/b](); i++ )
    13. {
    14.     java.util.Map map = (java.util.Map)list.[b]get[/b](i);

    15.     [b]for[/b] (java.util.Iterator it = map.[b]keySet[/b]().[b]iterator[/b](); it.[b]hasNext[/b]();)
    16.     {
    17.         String column_name = it.[b]next[/b]().[b]toString[/b]());
    18.         [i]// 取值[/i]时注意null判断
    19.         out.[b]println[/b](column_name + " = " + map.[b]get[/b](column_name)  == [b]null[/b] ? "" :
    20.        map.[b]get[/b](column_name).[b]toString[/b]());
    21.     }
    22. }
    复制代码

          
         
       

       
         
         
          
          

            
          

            
          
         
       

    1.                         
    复制代码

      


    源码下载:http://file.javaxxz.com/2014/10/1/233345031.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-27 05:38 , Processed in 0.379393 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表