zoukankan      html  css  js  c++  java
  • 类sqljdbc高级模板技术

    每日一贴,今天的内容关键字为类sql

        1:使用之前学习的jdbc模板技术
     A:引入3个包:数据源用到的2个包:commons-dbcp.jar,commons-pool.jar
           数据库驱动包:ojdbc14.jar,mysql-connector-xx.jar
     B:创立数据库工具类:JDBCUtil.java,该类为数据库工具类,供给数据库的打开,关闭等最基本的功能
           采用设计模式:ThreadLocal
     C:创立数据库信息文件:db.properties
     D:创立数据访问异常类:DataAccessException.java,继承运行时异常,重载其构造函数
     E:创立一个映射类:DiscMapper.java,抽象出接口:RowMapper.java
     F:创立jdbc模板类:JDBCTemplate.java,该类为抽象类,里面封装了罕见的基于数据库的CRUD操作
           供给了一个抽象方法:getRowMapper(),该方法重要实现了RowMapper接口,让查询出来的字段和实体
        bean中的属性一一对应。
    JDBCUtil.java

    /**
     * <数据库工具类>
     * @author  kandy
     * @version  [V1.00, 2013-5-3]
     * @see  [相关类/方法]
     * @since V1.00
     */
    public class JDBCUtil
    {
        //定义数据源
        private static DataSource ds;
        
        //定义当前链接的一个当地线程
        private static ThreadLocal<Connection> local =new ThreadLocal<Connection>();
        //初始化数据库信息
        static 
        {
            try
            {
             //创立Properties类文件
             Properties p=new Properties();
             //从用来加载类的搜索路径打开具有指定名称的资源,以读取该资源。
             p.load(JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties"));
             ds=BasicDataSourceFactory.createDataSource(p);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        //获得一个链接(Lazy模式,从线程中获得该链接,如果没有该链接,通过数据源获得连接)
        public static Connection getConnection()
        {
            Connection con = local.get();
            if(con==null)
            {
                try
                {
                    con=ds.getConnection();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
                //将该连接存入当前线程
                local.set(con);
            }
          return con;
        }
        //关闭数据库链接
        public static void colse(Connection con ,Statement st, ResultSet rs)
        {
            try
            {
                if(rs!=null)
                {
                    rs.close();
                }
                if(st!=null)
                {
                    st.close();
                }
                if(con!=null)
                {
                    con.close();
                    //从线程中移除该链接
                    local.remove();
                }
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
        
        //关闭数据库链接
        public static void close()
        {
           
            try
            {
                //将存放在当地线程下的链接关闭
                local.get().close();
                //从线程中移除该链接
                local.remove();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
        public static void main(String[] args)
        {
            Connection conn = JDBCUtil.getConnection();
            System.out.println(conn);
            JDBCUtil.colse(conn, null, null);
        }
        
    }

        

        

        

        

        

        db.properties

        oracle

        driverClassName=oracle.jdbc.driver.OracleDriver

        url=jdbc\:oracle\:thin\:@10.0.5.98\:1521\:ora9

        username=wk

        password=wk

        mysql

        driverClassName=com.mysql.jdbc.Driver

        url=jdbc\:mysql\://10.0.5.98\:3306/disc_shop?Unicode\=true&&characterEncoding\=utf8

        username=root

        password=root

        DataAccessException.java

    package com.itany.jdbc;
      //创立数据访问异常类:DataAccessException.java,继承运行时异常,重载其构造函数
    public class DataAccessException extends RuntimeException
    {
        public DataAccessException()
        {
            super();
        }
        public DataAccessException(String message)
        {
            super(message);
        }
        public DataAccessException(String message,Throwable cause)
        {
            super(message,cause);
        }
        public DataAccessException(Throwable cause)
        {
            super(cause);
        }
    }

     RowMapper.java

    /**
     * <让表中的字段和java中的属性一一对应>
     * @author  kandy
     * @version  [V1.00, 2013-5-3]
     * @see  [相关类/方法]
     * @since V1.00
     */
    public  interface RowMapper
    {
        
        public Object mapRow(ResultSet rs )throws Exception; 
    }

        创立jdbc模板类:JDBCTemplate.java

        每日一道理
    喜马拉雅直冲霄汉,可上面有攀爬者的旗帜;撒哈拉沙漠一望无垠,可里面有跋涉者的脚印;阿尔卑斯山壁立千仞,可其中有探险者的身影;雅鲁藏布江湍急浩荡,可其中有勇敢者的故事。
    /**
     * 
     * <JDBC模板类,实现罕见的CRUD操作>
     *  
     * @author  kandy
     * @version  [V1.00, 2013-5-3]
     * @see  [相关类/方法]
     * @since V1.00
     */
    public abstract class JDBCTemplate
    {
         //查询
        public List query(String sql,Object ...params)
        {
            Connection con =null;
            PreparedStatement ps =null;
            ResultSet rs =null;
            //饿汉式
            List list =new ArrayList();
            try
            {
                con =JDBCUtil.getConnection();
                ps=con.prepareStatement(sql);
                for(int i=0;i<params.length;i++)
                {
                    ps.setObject(i+1,params[i]);
                }
                rs=ps.executeQuery();
                while(rs.next())
                {
                    Object o=getRowMapper().mapRow(rs);
                    list.add(o);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
                throw new DataAccessException("数据查询异常");
            }
            finally
            {
                JDBCUtil.colse(con, ps, rs);
            }
            return list;
        }
        
        //查询,将映射类传入
        public List query(String sql,RowMapper rm,Object ...params)
        {
            Connection con =null;
            PreparedStatement ps =null;
            ResultSet rs =null;
            //饿汉式
            List list =new ArrayList();
            try
            {
                con =JDBCUtil.getConnection();
                ps=con.prepareStatement(sql);
                for(int i=0;i<params.length;i++)
                {
                    ps.setObject(i+1,params[i]);
                }
                rs=ps.executeQuery();
                while(rs.next())
                {
                    Object o=rm.mapRow(rs);
                    list.add(o);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
                throw new DataAccessException("数据查询异常");
            }
            finally
            {
                JDBCUtil.colse(con, ps, rs);
            }
            return list;
        }
        //插入记录
        public Object save(String sql,Object ...params)
        {
            Connection con =null;
            PreparedStatement ps =null;
            ResultSet rs =null;
            Object pk =null;
            try
            {
                con =JDBCUtil.getConnection();
                ps=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
                for(int i=0;i<params.length;i++)
                {
                    ps.setObject(i+1,params[i]);
                }
                //执行新增
                ps.executeUpdate();
                //获得该记录的主键值
                rs=ps.getGeneratedKeys();
                if(rs.next())
                {
                    pk=rs.getObject(1);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
                throw new DataAccessException("数据插入异常");
            }
            finally
            {
                JDBCUtil.colse(con, ps, rs);
            }
            
            //返回该记录的主键值
            return pk;
        }
        
        
      //更新记录
        public void update(String sql,Object... params){
            Connection con=null;
            PreparedStatement ps=null;
            try {
                con = JDBCUtil.getConnection();
                ps=con.prepareStatement(sql);
                for(int i=0;i<params.length;i++)
                {
                    ps.setObject(i+1,params[i]);
                }
                //执行数据更新
                ps.executeUpdate();
    
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
                throw new DataAccessException("数据更新异常");
            }
            finally
            {
                JDBCUtil.colse(con, ps, null);
            }
    
        }
        //更新删除
        public void delete(String sql,Object... params){
            Connection con=null;
            PreparedStatement ps=null;
            try {
                 con = JDBCUtil.getConnection();
                 ps=con.prepareStatement(sql);
                for(int i=0;i<params.length;i++)
                {
                    ps.setObject(i+1,params[i]);
                }
                //执行数据删除
                ps.executeUpdate();
    
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
                throw new DataAccessException("数据删除异常");
            }
            finally
            {
                JDBCUtil.colse(con, ps, null);
            }
    
    
        } 
        
        public int selectmaxId(String sql,Object... params){
            Connection con=null;
            PreparedStatement ps=null;
            ResultSet rs=null;
            int result=0;
            try {
                con=JDBCUtil.getConnection();
                ps=con.prepareStatement(sql);
                for (int i = 0; i < params.length; i++) {
                    ps.setObject(i+1, params[i]);
                }
                rs=ps.executeQuery();
                while(rs.next()){
                    result = rs.getInt(1);
                }               
            } catch (Exception e) {
                e.printStackTrace();
                throw new DataAccessException("数据访问异常");
            } finally {
                 JDBCUtil.colse(null, ps, rs);
            }       
        return result;
    }
       protected abstract RowMapper getRowMapper();
    }

    文章结束给大家分享下程序员的一些笑话语录: IBM和波音777
      波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
      波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”

    --------------------------------- 原创文章 By
    类和sql
    ---------------------------------

  • 相关阅读:
    启用div作为编辑器 添加contentEditalbe属性
    AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖-转
    angularjs的懒加载
    JavaScript 中的this指向问题
    Project Euler:Problem 41 Pandigital prime
    Android 消息机制
    新西兰天维网登录发送明文password
    使用Reveal来查看别人的APP界面+白苹果不刷机解决方式
    Android中List循环遍历性能对照
    2016年最新苹果开发人员账号注冊申请流程最强具体解释!
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3111390.html
Copyright © 2011-2022 走看看