欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 使用策略模式操作JDBC數(shù)據庫

 更新時間:2017年08月18日 11:58:11   作者:woshisap  
這篇文章主要介紹了java 使用策略模式操作JDBC數(shù)據庫的相關資料,這里提供實例實現(xiàn)對JDBC數(shù)據庫的操作增刪改查的功能,需要的朋友可以參考下

java 使用策略模式操作JDBC數(shù)據庫

1:構造一個操作數(shù)據庫的工具類,可以獲得連接和釋放連接

public class DBUtil { 
  private static Connection conn = null; 
  static { //靜態(tài)初始塊 
      try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "064319"); //初始化獲取連接 
      } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
      } catch (SQLException e) { 
        e.printStackTrace(); 
      } 
  } 
 
  /** 
   * 釋放連接 
   * @param rs 
   * @param psmt 
   * @param conn 
   * @throws SQLException 
   */ 
  public static void closeAll(ResultSet rs, PreparedStatement psmt, Connection conn) throws SQLException { 
     
    if(rs != null) { 
      rs.close(); 
    }  
     
    if(psmt != null) { 
      psmt.close(); 
    } 
     
    if(conn != null) { 
      conn.close(); 
    } 
     
  } 
   
  /** 
   * 獲取連接 
   * @return 
   */ 
  public static Connection getConnection() { 
    return conn; 
  } 
   
  /** 
   * 根據表的名字來獲得表的列信息 
   * @param tableName 
   */ 
  public static void getTableColumnInfoByTableName(String tableName) { 
    Connection conn = getConnection(); 
    ResultSet rs = null; 
    PreparedStatement psmt = null; 
    String sql = "select * from " + tableName; 
    try { 
      psmt = conn.prepareStatement(sql); 
      rs = psmt.executeQuery(); 
       
      ResultSetMetaData resultSetMetaData = rs.getMetaData(); 
      for(int i = 1; i<= resultSetMetaData.getColumnCount(); i++) { 
        System.out.println(resultSetMetaData.getColumnName(i)); 
      } 
       
    } catch (SQLException e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        closeAll(rs, psmt, conn); 
      } catch (SQLException e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
   
  /** 
   * 根據表的名字來獲得表的信息 
   * @param tableName 
   */ 
  public static void getTableInfoByTableName(String tableName) { 
    Connection conn = getConnection(); 
    PreparedStatement psmt = null; 
    ResultSet rs = null; 
    String sql = "select * from " + tableName; 
    try { 
      psmt = conn.prepareStatement(sql); 
      rs = psmt.executeQuery(); 
       
      while(rs.next()) { 
        ResultSetMetaData resultSetMetaData = rs.getMetaData(); 
        for(int i = 1; i<= resultSetMetaData.getColumnCount(); i++) { 
          if(i < resultSetMetaData.getColumnCount()) { 
            System.out.print(rs.getObject(resultSetMetaData.getColumnName(i)) + ", "); 
          } else { 
            System.out.print(rs.getObject(resultSetMetaData.getColumnName(i))); 
          } 
        } 
        System.out.println(); 
      } 
     
    } catch (SQLException e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        closeAll(rs, psmt, conn); 
      } catch (SQLException e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
} 

2:構造一個操作數(shù)據庫的BaseDao類

public class BaseDao { 
   
  /** 
   * 根據一些參數(shù)來保存相應的對象 
   * @param sql 要執(zhí)行的sql語句 
   * @param params 為sql語句中相應的參數(shù)賦值 
   * @return 
   */ 
  protected boolean saveOrUpdate(String sql, Object[] params) { 
    Connection conn = null; 
    PreparedStatement psmt = null; 
    boolean flag = false; 
     
    conn = DBUtil.getConnection(); 
    if(conn != null) { 
      try { 
        psmt = conn.prepareStatement(sql); 
        for(int i = 1; i <= params.length; i++) { 
          psmt.setObject(i, params[i-1]); 
        } 
        if(psmt.executeUpdate() > 0) { 
          flag = true; 
        } 
         
      } catch (SQLException e) { 
        e.printStackTrace(); 
      } finally { 
        try { 
          DBUtil.closeAll(null, psmt, conn); 
        } catch (SQLException e) { 
          e.printStackTrace(); 
        } 
      } 
    }  
    return flag; 
  } 
   
  /** 
   * 根據一定的參數(shù)獲得某個具體的對象 
   * @param sql 要執(zhí)行的sql語句 
   * @param params 為sql語句中相應的參數(shù)賦值 
   * @return 
   */ 
  public Object queryForObject(String sql, Object[] params, RowMapForObject rowMapForObject) { 
    Connection conn = null; 
    PreparedStatement psmt = null; 
     
    conn = DBUtil.getConnection(); 
    Object obj = null; 
    ResultSet rs = null; 
     
    if(conn != null) { 
      try { 
        psmt = conn.prepareStatement(sql); 
        if(params != null && params.length > 0) { 
          for(int i = 1; i <= params.length; i++) { 
             psmt.setObject(i, params[i - 1]); 
          } 
        } 
        rs = psmt.executeQuery(); 
        obj = rowMapForObject.rowMapForObject(rs); 
         
      } catch (SQLException e) { 
        e.printStackTrace(); 
      } finally { 
        try { 
          DBUtil.closeAll(null, psmt, conn); 
        } catch (SQLException e) { 
          e.printStackTrace(); 
        } 
      } 
    } 
     
    return obj; 
  } 
 
   
  /** 
   * 根據相應的參數(shù)獲得查詢的結果集 
   * @param sql 
   * @param params 
   * @return 
   */ 
  public List queryForList(String sql, Object[] params, RowMapForList rowMapForList) { 
    Connection conn = null; 
    PreparedStatement psmt = null; 
     
    conn = DBUtil.getConnection(); 
    List list = null; 
    ResultSet rs = null; 
     
    if(conn != null) { 
      try { 
        psmt = conn.prepareStatement(sql); 
        if(params != null && params.length > 0) { 
          for(int i = 1; i <= params.length; i++) { 
             psmt.setObject(i, params[i - 1]); 
          } 
        } 
        rs = psmt.executeQuery(sql); 
        list = new ArrayList(); 
        list = rowMapForList.rowMapForList(rs); 
         
      } catch (SQLException e) { 
        e.printStackTrace(); 
      } finally { 
        try { 
          DBUtil.closeAll(null, psmt, conn); 
        } catch (SQLException e) { 
          e.printStackTrace(); 
        } 
      } 
    } 
     
    return list; 
  } 
   
} 

3:新建一個StudentDao類,該類繼承自BaseDao,實現(xiàn)對Student的管理

public class StudentDao extends BaseDao { 
 
  /** 
   * 保存一個Student的信息 
   */ 
  public boolean saveStudent(Student student) { 
    String sql = "insert into t_student(name, age) values(?, ?)"; 
    Object[] params = new Object[]{student.getName(), student.getAge()}; 
    return super.saveOrUpdate(sql, params); 
  } 
   
  /** 
   * 根據id獲得一個Student的信息 
   * @param id 
   * @return 
   */ 
  public Student getStudentById(long id) { 
    String sql = "select * from t_student where id=?"; 
    Object[] params = new Object[]{id}; 
    return (Student)super.queryForObject(sql, params, new RowMapForObject() { 
       
      public Object rowMapForObject(ResultSet rs) { 
        Student student = null; 
         try { 
          if(rs != null && rs.next()) { 
             student = new Student(); 
             student.setAge(rs.getInt(Student.AGE)); 
             student.setId(rs.getLong(Student.ID)); 
             student.setName(rs.getString(Student.NAME)); 
           } 
        } catch (SQLException e) { 
          e.printStackTrace(); 
        } 
         return student; 
      } 
    }); 
  } 
 
  /** 
   * 獲得所有Student的信息 
   * @return 
   */ 
  public List getStudentAll() { 
    String sql = "select * from t_student"; 
    List list = super.queryForList(sql, null, new RowMapForList() { 
 
      @Override 
      public List rowMapForList(ResultSet rs) { 
        List list = null; 
        try { 
          if(rs != null) { 
            list = new ArrayList(); 
            while(rs.next()) { 
              Student student = new Student(); 
              student.setId(rs.getLong("id")); 
              student.setAge(rs.getInt("age")); 
              student.setName(rs.getString("name")); 
              list.add(student); 
            } 
          } 
        } catch(SQLException e) { 
          e.printStackTrace(); 
        } 
        return list; 
      } 
    }); 
     
    return list; 
  }   
} 

如有疑問請留言或者到本站社區(qū)交流討論,大家共同進步,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java接口中盡量避免使用數(shù)組

    Java接口中盡量避免使用數(shù)組

    這篇文章主要介紹了Java接口中盡量避免使用數(shù)組的建議,根據實際示例展示了接口中使用數(shù)組而造成的影響程序速度的現(xiàn)象,需要的朋友可以參考下
    2015-07-07
  • 基于自定義校驗注解(controller、method、(groups)分組的使用)

    基于自定義校驗注解(controller、method、(groups)分組的使用)

    這篇文章主要介紹了基于自定義校驗注解(controller、method、(groups)分組的使用),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中文件讀寫操作與常用技巧分享

    Java中文件讀寫操作與常用技巧分享

    在 Java I/O 體系中,F(xiàn)ile 類是唯一代表磁盤文件本身的對象,而File 類定義了一些與平臺無關的方法來操作文件,所以下面我們一起來看看 File 類有哪些操作方法吧
    2023-06-06
  • SpringCloud 搭建企業(yè)級開發(fā)框架之實現(xiàn)多租戶多平臺短信通知服務(微服務實戰(zhàn))

    SpringCloud 搭建企業(yè)級開發(fā)框架之實現(xiàn)多租戶多平臺短信通知服務(微服務實戰(zhàn))

    這篇文章主要介紹了SpringCloud 搭建企業(yè)級開發(fā)框架之實現(xiàn)多租戶多平臺短信通知服務,系統(tǒng)可以支持多家云平臺提供的短信服務。這里以阿里云和騰訊云為例,集成短信通知服務,需要的朋友可以參考下
    2021-11-11
  • Java?超詳細講解十大排序算法面試無憂

    Java?超詳細講解十大排序算法面試無憂

    這篇文章主要介紹了Java常用的排序算法及代碼實現(xiàn),在Java開發(fā)中,對排序的應用需要熟練的掌握,這樣才能夠確保Java學習時候能夠有扎實的基礎能力。那Java有哪些排序算法呢?本文小編就來詳細說說Java常見的排序算法,需要的朋友可以參考一下
    2022-04-04
  • IDEA的Mybatis Log Plugin插件配置和使用詳解

    IDEA的Mybatis Log Plugin插件配置和使用詳解

    這篇文章主要介紹了IDEA的Mybatis Log Plugin插件配置和使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • IDEA如何搭建Struts2項目

    IDEA如何搭建Struts2項目

    這篇文章主要介紹了IDEA如何搭建Struts2項目,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-02-02
  • 如何用Java將數(shù)據庫的數(shù)據生成pdf返回給前端用戶下載

    如何用Java將數(shù)據庫的數(shù)據生成pdf返回給前端用戶下載

    本文詳細介紹了使用SpringBoot、iText庫、MyBatis等技術從數(shù)據庫中選取數(shù)據并生成PDF文件的后端處理流程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • SpringCloud微服務多應用腳手架的搭建與部署方式

    SpringCloud微服務多應用腳手架的搭建與部署方式

    這篇文章主要介紹了SpringCloud微服務多應用腳手架的搭建與部署方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳解spring security四種實現(xiàn)方式

    詳解spring security四種實現(xiàn)方式

    這篇文章主要介紹了詳解spring security四種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論