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

时间:2022-01-19 18:01:20

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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的管理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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;
  }  
}

如有疑问请留言或者到本站社区交流讨论,大家共同进步,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/woshisap/article/details/7192822