服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|

服务器之家 - 编程语言 - JAVA教程 - java 使用策略模式操作JDBC数据库

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

2020-12-18 11:57woshisap JAVA教程

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

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

延伸 · 阅读

精彩推荐
  • JAVA教程Java中几个Reference常见的作用详解

    Java中几个Reference常见的作用详解

    这篇文章主要给大家介绍了Java中关于Reference多个作用的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面...

    三斤牛肉2212020-11-18
  • JAVA教程spring boot(一)之入门篇

    spring boot(一)之入门篇

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。接下来通过本文给大家介绍spring boot入门知识,需要...

    纯洁的微笑1472020-09-27
  • JAVA教程Spring实现动态切换多数据源的解决方案

    Spring实现动态切换多数据源的解决方案

    这篇文章主要给大家介绍了Spring实现动态切换多数据源的解决方案,文中给出了详细的介绍和示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,...

    nevergiveupzeng3872020-07-27
  • JAVA教程Java中的泛型详解

    Java中的泛型详解

    这篇文章主要介绍了Java中的泛型详解,本文讲解了泛型类或接口、从泛型类派生子类、伪泛型、类型通配符、通配符的上限、通配符的下限、擦除和转换等...

    junjie2432019-12-16
  • JAVA教程spring boot日志管理配置

    spring boot日志管理配置

    这篇文章主要介绍了spring boot日志管理配置的相关资料,需要的朋友可以参考下...

    牛头人1642020-09-17
  • JAVA教程Java太阳系小游戏分析和源码详解

    Java太阳系小游戏分析和源码详解

    这篇文章主要对Java太阳系小游戏进行深入分析以及对应源码解释,进一步巩固了面向对象的知识,需要的朋友可以参考下 ...

    u0116370694552020-01-03
  • JAVA教程Java的JSON转换类库GSON的基础使用教程

    Java的JSON转换类库GSON的基础使用教程

    GSON是谷歌开源的一款Java对象与JSON对象互相转换的类库,Java的JSON转换类库GSON的基础使用教程,需要的朋友可以参考下 ...

    摆渡者3222020-05-20
  • JAVA教程详解Spring学习总结——Spring实现AOP的多种方式

    详解Spring学习总结——Spring实现AOP的多种方式

    这篇文章主要介绍了详解Spring学习总结——Spring实现AOP的多种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    u0109873794022020-07-22