<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 325,  comments - 25,  trackbacks - 0
    package com.shxt.util;


    import java.sql.Connection;
    import java.sql.ParameterMetaData;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;

    import javax.sql.DataSource;

    import org.apache.commons.dbcp.BasicDataSource;


    /**
     * 用戶數據庫訪問的類
     *@作者Administrator
     *@createTime 2011-12-5 上午11:55:18
     *@version 1.0
     */
    public class DButil {

        private Connection conn;
        private Statement st;
        private PreparedStatement pps;
        private ResultSet rs;
        private DataSource ds;
        
        /**
         * 獲取連接的方法
         * @return Connection 一個有效的數據庫連接
         */
        
        public Connection getConnection()    {
            try {
                ds = setupDataSource("jdbc.properties");
                Connection con = ds.getConnection();
                return con;
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
        
        public static DataSource setupDataSource(String configFile) {
            BasicDataSource ds = new BasicDataSource();
            try {
                Properties prop = new Properties();
                prop.load(DButil.class.getResourceAsStream(configFile));
                ds.setDriverClassName(prop.getProperty("driverClassName"));
                ds.setUrl(prop.getProperty("url"));
                ds.setUsername(prop.getProperty("username"));
                ds.setPassword(prop.getProperty("password"));
                ds.setMaxActive(Integer.parseInt(prop.getProperty("maxActive")));
                ds.setMaxIdle(10);
               // ds.setMaxActive(maxActive);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }

            return ds;
        }
        

        /**
         * 用于執行更新的方法,包括(insert delete update)操作
         * @param sql String 類型的SQL語句
         * @return Integer 表示受影響的行數
         */
        public int update(String sql)
        {
            //定義變量用來判斷更新操作是否成功,如果返回-1說明沒有影響到更新操作的數據庫記錄條數,即更新操作失敗
            int row=-1;
            try {
                //如果數據庫鏈接被關閉了,就要既得一個新的鏈接
                if(conn==null||conn.isClosed()){
                     conn=getConnection();
                }
                //使用Connection對象conn的createStatement()創建Statement(數據庫語句對象)st
                st=conn.createStatement();
                //執行更新操作,返回影響的記錄條數row
                row=st.executeUpdate(sql);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            finally{
                close();
            }
            return row;
        }
        
        /**
         * 基于PreparedStatement的修改方法 PreparedStatement:表示預編譯的 SQL 語句的對象
         * @param sql  String 類型的SQL語句(insert delete update)
         * @param obj 存放動態參數的數組
         * @return Integer 表示受影響的行數
         */
        public int update(String sql,Object ...obj)
        {
            try {
                //獲取鏈接
                if(conn==null||conn.isClosed()){
                     conn=getConnection();
                }
                //創建預編譯的 SQL 語句對象
                pps=conn.prepareStatement(sql);
                //定義變量length代表數組長度,也就是預處理的sql語句中的參數個數
                int length=0;
                //ParameterMetaData:用于獲取關于 PreparedStatement 對象中每個參數的類型和屬性信息的對象
                ParameterMetaData pmd=pps.getParameterMetaData();
                length=pmd.getParameterCount();
                //循環將sql語句中的?設置為obj數組中對應的值,注意從1開始,所以i要加1
                for(int i=0;i<length;i++)
                {
                    pps.setObject(i+1, obj[i]);
                }
                //執行更新操作
                return pps.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                close();
            }
            
            return -1;
        }
        /**
         * 獲取一條記錄的方法,要依賴于下面的queryToList方法,注意泛型的使用
         * @param sql
         * @return Map<String,Object>
         */
        public Map<String,Object> getOneRow(String sql)
        {
            //執行下面的queryToList方法
            List<Map<String,Object>> list=queryToList(sql);
            //三目運算,查詢結果list不為空返回list中第一個對象,否則返回null
            return list.size()>0?list.get(0):null;
        }
        
        /**
         * 返回查詢結果列表,形如:[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}...]
         * @param sql
         * @return List<Map<String,Object>>
         */
        public List<Map<String,Object>> queryToList(String sql)
        {
            //創建集合列表用以保存所有查詢到的記錄
            List<Map<String, Object>> list=new LinkedList<Map<String, Object>>();
            try {
                if(conn==null||conn.isClosed()){
                     conn=getConnection();
                }
                st=conn.createStatement();
                rs=st.executeQuery(sql);
                //ResultSetMetaData 是結果集元數據,可獲取關于 ResultSet 對象中列的類型和屬性信息的對象 例如:結果集中共包括多少列,每列的名稱和類型等信息
                ResultSetMetaData rsmd=rs.getMetaData();
                //獲取結果集中的列數
                int columncount=rsmd.getColumnCount();
                //while條件成立表明結果集中存在數據
                while(rs.next())
                {
                    //創建一個HashMap用于存儲一條數據
                    HashMap<String, Object> onerow=new HashMap<String, Object>();
                    //循環獲取結果集中的列名及列名所對應的值,每次循環都得到一個對象,形如:{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}
                    for(int i=0;i<columncount;i++)
                    {
                        //獲取指定列的名稱,注意orcle中列名的大小寫
                        String columnName=rsmd.getColumnName(i+1);
                        onerow.put(columnName, rs.getObject(i+1));
                    }
                    //將獲取到的對象onewrow={TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}放到集合列表中
                    list.add(onerow);
                }
            }catch (SQLException e) {
                e.printStackTrace();
            }
            finally{
                close();
            }
            return list;
        }
        /**
         * 返回查詢結果列表,使用的是預編繹SQL 語句對象PreparedStatement
         * 形如:[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}]
         * @param sql
         * @param paramValues
         * @return List<Map<String,Object>>
         */
        public List<Map<String,Object>> queryWithParam(String sql,Object ...paramValues){
            //創建集合列表用以保存所有查詢到的記錄
            List<Map<String, Object>> list=new LinkedList<Map<String, Object>>();
            try {
                if(conn==null||conn.isClosed()){
                     conn=getConnection();
                }
                pps = conn.prepareStatement(sql);
                for (int i = 0; i < paramValues.length; i++) {
                    pps.setObject(i + 1, paramValues[i]);
                }
                rs = pps.executeQuery();
                //ResultSetMetaData 是結果集元數據,可獲取關于 ResultSet 對象中列的類型和屬性信息的對象 例如:結果集中共包括多少列,每列的名稱和類型等信息
                ResultSetMetaData rsmd=rs.getMetaData();
                //獲取結果集中的列數
                int columncount=rsmd.getColumnCount();
                //while條件成立表明結果集中存在數據
                while (rs.next()) {
                    //創建一個HashMap用于存儲一條數據
                    HashMap<String, Object> onerow=new HashMap<String, Object>();
                    //循環獲取結果集中的列名及列名所對應的值,每次循環都得到一個對象,形如:{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}
                    for(int i=0;i<columncount;i++)
                    {
                        //獲取指定列的名稱,注意orcle中列名的大小寫
                        String columnName=rsmd.getColumnName(i+1);
                        onerow.put(columnName, rs.getObject(i+1));
                    }
                    //將獲取到的對象onewrow={TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}放到集合列表中
                    list.add(onerow);
                }
            }catch (SQLException e) {
                e.printStackTrace();
            }
            finally{
                close();
            }
            return list;
        }
        
        
        
        /**
         * 實現oracle分頁功能
         * @param sql 要查詢的sql語句
         * @param pagesize 每頁顯示的記錄條數
         * @param pagenow    當前頁數
         * @return PageBean
         */
        public PageBean getPage(String sql,int pagesize,int pagenow)
        {
            PageBean pb=new PageBean();
            int end=pagenow*pagesize;//根據當前頁數及每頁顯示的條數計算出要查詢結果的終止數
            int start=end-pagesize+1;//依據終止數和每頁顯示條數計算出開始數
            /*拼出oracle分頁sql語句*/
            String exesql="select a.* from (select t.*,rownum as rowindex from ("+sql+") t where rownum<="+end+" ) a where a.rowindex>="+start;
            /*拼出查詢總共有多少條的sql語句*/
            String countsql="select count(*) as rowcount from ("+sql+")";
            /*執行分頁sql語句,將所查詢的結果放到PageBean的result列表屬性中*/
            pb.setResult(queryToList(exesql));
            /*設置當前頁成員變量*/
            pb.setPagenow(pagenow);
            /*設置每頁條數成員變量*/
            pb.setPagesize(pagesize);
            /*執行countsql語句,得出一共有多少條記錄*/
            Map<String,Object> map=this.getOneRow(countsql);
            int rows=Integer.parseInt(map.get("ROWCOUNT").toString());
            /*設置總共條數成員變量*/
            pb.setRows(rows);
            /*計算總頁數*/
            int pages=rows%pagesize==0?rows/pagesize:rows/pagesize+1;
            pb.setPages(pages);
            /*設置查詢sql成員變量*/
            pb.setSql(sql);
            return pb;
        }
        /**
         * 關閉數據庫各種資源Connection Statement PreparedStatement ResultSet的方法
         */
        private void close()
        {
            if(rs!=null)
            {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            
            if(st!=null)
            {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(pps!=null){
                try {
                    pps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            try {
                if(conn!=null&&!conn.isClosed())
                {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
    }
    posted on 2015-03-24 11:06 長春語林科技 閱讀(161) 評論(0)  編輯  收藏 所屬分類: utiljava
    <2015年3月>
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

     

    長春語林科技歡迎您!

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 黄色网址免费在线观看| 黄色大片免费网站| 亚州免费一级毛片| 久久亚洲国产精品| 在线成人爽a毛片免费软件| 亚洲AV综合色区无码另类小说| 一区二区三区精品高清视频免费在线播放| 午夜无遮挡羞羞漫画免费| 亚洲av产在线精品亚洲第一站| 日日麻批免费40分钟日本的| 亚洲国产成人精品无码一区二区 | 国产精品怡红院永久免费| 亚洲宅男永久在线| 黄瓜视频影院在线观看免费| jiz zz在亚洲| 免费播放特黄特色毛片| 一级做a免费视频观看网站| 国产成人无码综合亚洲日韩| 在线看无码的免费网站| 中文字幕亚洲男人的天堂网络| 国产黄色片在线免费观看| www在线观看免费视频| 亚洲一区二区三区高清| 在线视频免费观看高清| 国产亚洲人成在线影院| 久久精品国产亚洲av麻豆| 无码免费午夜福利片在线| 四虎国产精品成人免费久久| 亚洲AV午夜成人影院老师机影院 | 特级无码毛片免费视频| 亚洲精品成人网站在线观看 | 成人无码区免费A∨直播| 亚洲国产精品久久久久久| 日本特黄a级高清免费大片| 97在线视频免费公开观看| 99亚洲精品卡2卡三卡4卡2卡| 亚洲影院在线观看| 亚洲人成无码网站久久99热国产| 人妻丰满熟妇无码区免费| 国产精品亚洲精品日韩动图| 亚洲美女在线观看播放|