Java如何利用策略模式操作JDBC数据库的实例分析

这篇文章主要介绍了java 使用策略模式操作JDBC数据库的相关资料,这里提供实例实现对JDBC数据库的操作增删改查的功能,需要的朋友可以参考下

java 使用策略模式操作JDBC数据库

1:构造一个操作数据库的工具类,可以获得连接和释放连接

public class DBUtil {   private static Connection conn = null;   static { //静态初始块       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:构造一个操作数据库的BaseDao类

public class BaseDao {      /**    * 根据一些参数来保存相应的对象    * @param sql 要执行的sql语句    * @param params 为sql语句中相应的参数赋值    * @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;   }      /**    * 根据一定的参数获得某个具体的对象    * @param sql 要执行的sql语句    * @param params 为sql语句中相应的参数赋值    * @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;   }       /**    * 根据相应的参数获得查询的结果集    * @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,实现对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;   }   }

以上就是Java如何利用策略模式操作JDBC数据库的实例分析的详细内容,更多请关注其它相关文章!

旅行,有一种苍凉,“浮云游子意,落日故人情”,

Java如何利用策略模式操作JDBC数据库的实例分析

相关文章:

你感兴趣的文章:

标签云: