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

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

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

    hyljava

    升級版JDBC工具類

     

    import java.sql.Connection;
    import java.sql.DriverManager;
    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;


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

     private Connection conn;
     private Statement st;
     private PreparedStatement pps;
     private ResultSet rs;
     public  String url="jdbc:oracle:thin:@localhost:1521:orcl";
     private String user="hyl";
     private String password="hyl";
     
     //加載驅(qū)動、放在靜態(tài)代碼塊中,保證驅(qū)動在整個項目中只加載一次,提高效率
     static{
      try {
       Class.forName("oracle.jdbc.driver.OracleDriver");
      } catch (ClassNotFoundException e) {
       e.printStackTrace();
      }
     }
     
     /**
      * 獲取連接的方法
      * @return Connection 一個有效的數(shù)據(jù)庫連接
      */
     public Connection getConnection()
     {
      try {
       //注意鏈接時,要換成自己的數(shù)據(jù)庫名,數(shù)據(jù)庫用戶名及密碼
       Connection con=DriverManager.getConnection(url,user,password);
       return con;
      } catch (SQLException e) {
       e.printStackTrace();
      }
      return null;
     }

     /**
      * 用于執(zhí)行更新的方法,包括(insert delete update)操作
      * @param sql String 類型的SQL語句
      * @return Integer 表示受影響的行數(shù)
      */
     public int update(String sql)
     {
      //定義變量用來判斷更新操作是否成功,如果返回-1說明沒有影響到更新操作的數(shù)據(jù)庫記錄條數(shù),即更新操作失敗
      int row=-1;
      try {
       //如果數(shù)據(jù)庫鏈接被關閉了,就要既得一個新的鏈接
       if(conn==null||conn.isClosed()){
         conn=getConnection();
       }
       //使用Connection對象conn的createStatement()創(chuàng)建Statement(數(shù)據(jù)庫語句對象)st
       st=conn.createStatement();
       //執(zhí)行更新操作,返回影響的記錄條數(shù)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 存放動態(tài)參數(shù)的數(shù)組
      * @return Integer 表示受影響的行數(shù)
      */
     public int update(String sql,Object ...obj)
     {
      try {
       //獲取鏈接
       if(conn==null||conn.isClosed()){
         conn=getConnection();
       }
       //創(chuàng)建預編譯的 SQL 語句對象
       pps=conn.prepareStatement(sql);
       //定義變量length代表數(shù)組長度,也就是預處理的sql語句中的參數(shù)個數(shù)
       int length=0;
       //ParameterMetaData:用于獲取關于 PreparedStatement 對象中每個參數(shù)的類型和屬性信息的對象
       ParameterMetaData pmd=pps.getParameterMetaData();
       length=pmd.getParameterCount();
       //循環(huán)將sql語句中的?設置為obj數(shù)組中對應的值,注意從1開始,所以i要加1
       for(int i=0;i<length;i++)
       {
        pps.setObject(i+1, obj[i]);
       }
       //執(zhí)行更新操作
       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)
     {
      //執(zhí)行下面的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)
     {
      //創(chuàng)建集合列表用以保存所有查詢到的記錄
      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 是結果集元數(shù)據(jù),可獲取關于 ResultSet 對象中列的類型和屬性信息的對象 例如:結果集中共包括多少列,每列的名稱和類型等信息
       ResultSetMetaData rsmd=rs.getMetaData();
       //獲取結果集中的列數(shù)
       int columncount=rsmd.getColumnCount();
       //while條件成立表明結果集中存在數(shù)據(jù)
       while(rs.next())
       {
        //創(chuàng)建一個HashMap用于存儲一條數(shù)據(jù)
        HashMap<String, Object> onerow=new HashMap<String, Object>();
        //循環(huán)獲取結果集中的列名及列名所對應的值,每次循環(huán)都得到一個對象,形如:{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){
      //創(chuàng)建集合列表用以保存所有查詢到的記錄
      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 是結果集元數(shù)據(jù),可獲取關于 ResultSet 對象中列的類型和屬性信息的對象 例如:結果集中共包括多少列,每列的名稱和類型等信息
       ResultSetMetaData rsmd=rs.getMetaData();
       //獲取結果集中的列數(shù)
       int columncount=rsmd.getColumnCount();
       //while條件成立表明結果集中存在數(shù)據(jù)
       while (rs.next()) {
        //創(chuàng)建一個HashMap用于存儲一條數(shù)據(jù)
        HashMap<String, Object> onerow=new HashMap<String, Object>();
        //循環(huán)獲取結果集中的列名及列名所對應的值,每次循環(huán)都得到一個對象,形如:{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;
     }
     
     
     
     /**
      * 實現(xiàn)oracle分頁功能
      * @param 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;
      String exesql="select a.* from (select t.*,rownum as rowindex from ("+sql+") t where rownum<="+end+" ) a where a.rowindex>="+start;
      String countsql="select count(*) as rowcount from ("+sql+")";
      pb.setResult(queryToList(exesql));
      pb.setPagenow(pagenow);
      pb.setPagesize(pagesize);
      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);
      pb.setSql(sql);
      return pb;
     }
     /**
      * 關閉數(shù)據(jù)庫各種資源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 2012-05-31 22:07 何云隆 閱讀(2913) 評論(10)  編輯  收藏 所屬分類: SQL ServerMySQL 、java 、OracleJsp 、Struts1

    評論

    # re: 升級版JDBC工具類 2012-09-22 00:06 軍軍

    大哥啊, 能否 把 你的升級版 JDBC工具類中的 PageBean 類給我發(fā)一下。

    謝謝了先,小弟參考一下。郵件 發(fā)我也可以 。 181744926@qq.com



    拜托了, 萬分感謝,跪求代碼。  回復  更多評論   

    # re: 升級版JDBC工具類 2012-09-23 10:49 何云隆

    @軍軍
    已經(jīng)發(fā)到你的郵箱了  回復  更多評論   

    # re: 升級版JDBC工具類 2012-12-10 15:25 杜萬博

    也發(fā)我一份好不好,感覺蠻好用的 378120075@qq.com  回復  更多評論   

    # re: 升級版JDBC工具類 2012-12-10 17:33 何云隆

    @杜萬博
    已經(jīng)發(fā)到你的郵箱  回復  更多評論   

    # re: 升級版JDBC工具類 2013-04-10 23:35 懵懂

    有調(diào)用存儲過程的嗎 給我份363374160@qq.com  回復  更多評論   

    # re: 升級版JDBC工具類 2013-04-13 12:22 何云隆

    @懵懂
    JAVA執(zhí)行存儲過程

    以SQLServer為例
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;

    public class TestCall {
    public static void main(String[] args) {
    try{
    Connection conn=null;
    CallableStatement cs=null;
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=studentdb";
    conn=DriverManager.getConnection(url,"sa","sqlserver");
    String sql="{call s_insert(?,?)}";
    cs=conn.prepareCall(sql);
    cs.setString(1,"張三");
    cs.setInt(2, 12);
    int num=-1;
    num=cs.executeUpdate();
    System.out.println("num:"+num);
    }catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      回復  更多評論   

    # re: 升級版JDBC工具類 2013-05-16 22:21 蒙哥大汗

    我也要一份 升級版 JDBC工具類 PageBean 類給我發(fā)一下 381460710@qq.com  回復  更多評論   

    # re: 升級版JDBC工具類 2013-09-02 11:20 志成中國

    要給我一份吧,麻煩了。jiadp2012@163.com  回復  更多評論   

    # re: 升級版JDBC工具類 2014-05-27 10:33 mao

    大哥,能把那個PageBean也發(fā)我一份嗎,感謝!1361730313@qq.com  回復  更多評論   

    # re: 升級版JDBC工具類 2014-07-16 13:20 天雨

    全部代碼 給我一份 謝謝.. 6673258@qq.com  回復  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 国拍在线精品视频免费观看| 色se01短视频永久免费| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产成人人综合亚洲欧美丁香花 | 无码日韩精品一区二区免费暖暖| 亚洲色中文字幕无码AV| 国产一级黄片儿免费看| 国产V亚洲V天堂无码| 国产精品区免费视频| 亚洲天天做日日做天天看| 69影院毛片免费观看视频在线| 亚洲欧洲精品国产区| www.999精品视频观看免费| 久久久久亚洲国产| 国产成人免费a在线资源| 日韩在线一区二区三区免费视频| 亚洲一区二区三区乱码A| 免费人成激情视频在线观看冫| 亚洲AV日韩精品久久久久久久 | 久久久久久免费一区二区三区| 亚洲AV人人澡人人爽人人夜夜| 1000部禁片黄的免费看| 亚洲中文无码mv| 免费看小12萝裸体视频国产| 日产久久强奸免费的看| 亚洲AV无码国产精品色午友在线| 在线免费中文字幕| 亚洲精品中文字幕| 亚洲综合伊人久久大杳蕉| 亚洲最大免费视频网| 国产偷国产偷亚洲清高APP| 国产亚洲美女精品久久久久狼| **aaaaa毛片免费| 亚洲av无码专区在线观看下载| 国产亚洲人成网站在线观看 | 两性刺激生活片免费视频| 羞羞漫画登录页面免费| 亚洲AV成人片色在线观看| 日本特黄特色aa大片免费| 嫩草在线视频www免费看| 亚洲日本VA午夜在线电影|