构建一个高可扩展性javabean和jsp连接数据库操作

简介:

1. 我们先在Tomcat 中创建一个DataSource- jdbc/Panabia,然后再创建一个java“基类”,这个类封装了数据库连接和连接的释放。

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
package  Panabia.db;
 
import  javax.sql.DataSource;
import  javax.naming.*;
import  java.sql.*;
 
public  class  SQLFactory
{
     private  static  DataSource ds =  null ;
     private  static  Object Lock =  new  Object();
     
     // 生成DataSource**
     public  static  DataSource gainDataSource()
     {
         try {
          if (ds== null )
          {
             synchronized (Lock)
             {
                  if (ds== null )
                  {
                     Context ctx= new  InitialContext();
                     ds=(DataSource)ctx.lookup(\"java:comp/env/jdbc/Panabia\");
                  }
             }
           }
          } catch (NamingException e){
              e.printStackTrace();
          }
          return  ds;
     }  
     
     // 生成SQL连接**
     public  static  synchronized  Connection gainConnection()
     {
         Connection con =  null ;
         try {
             if (ds ==  null )
             {
                 gainDataSource();
             }
             con = ds.getConnection();
         } catch  (SQLException e){
             e.printStackTrace();
         }
         return  con;
     }
 
     // 释放SQL连接**
     public  static  void  releaseConnection(ResultSet rs, PreparedStatement ps,
             Statement sql, Connection con)
     {
         try
         {
             if  (rs !=  null )
                 rs.close();
         } catch  (SQLException e) {
             e.printStackTrace();
         }
 
         try
         {
             if  (ps !=  null )
                 ps.close();
         } catch  (SQLException e) {
             e.printStackTrace();
         }
 
         try
         {
             if  (sql !=  null )
                 sql.close();
         } catch (SQLException e) {
             e.printStackTrace();
         }
 
         try  {
             if  (con !=  null  && !con.isClosed())
                 con.close();
         } catch  (SQLException e) {
             e.printStackTrace();
         }
     }
 
}

 大家都应该注意到了,这个类的所有的方法全部是static的,之所以这样,主要是为了方便其它“扩展类”的调用,当然,还有其它好处--- :)

 

2. 然后,这个类就封装完毕了,现在我们就可以针对不同的应用要求单独写javaBean了,比如一个简单的:在JSP中列出verify表中的所有用户名与密码列表。

该怎么做?--使用SQLFactory生成Connection,再生成Statement,再生成ResultSet--然后枚举吗?好象不错,哦,等等......这样做你难道没有一种“非常亲切”的感觉吗?---对了,ASP,PHP中就是如此-Faint~我们怎么又回到“原始社会”了....

有没有更好的方式?答案是肯定的,JAVA的能力是“通天”的强大,只要你能想得到,仔细看看它的API Document,就不难找出解决办法。

答案出来了:

  我们在查询类中返回Iterator到JSP枚举,而不是ResultSet。

好了,我们的UserQuery类就产生了:

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
package  Panabia.operate;
 
import  Panabia.db.SQLFactory;
import  java.util.*;
import  java.sql.*;
 
public  class  UserQuery
{
     private  ArrayList list =  null ;
     private  Connection con =  null ;
     private  Statement sql =  null ;
     private  ResultSet rs =  null ;
 
     public  Iterator getResult()
     {
          try {
          con=SQLFactory.gainConnection();
          sql=con.createStatement();
          rs=sql.executeQuery(\"select * from verify\");
                          //verify表只有两个字段:username,password;
           list= new  ArrayList();
           while (rs.next())
           {
              list.add(rs.getString( 1 ));
              list.add(rs.getString( 2 ));
           }
     } catch (SQLException e){
         e.printStackTrace();
     } finally {
         SQLFactory.releaseConnection(rs, null ,sql,con);
     }
 
       return  list.iterator();
      }
}

3. 在jsp页面进行查询

1
2
3
4
5
Iterator it=UserQuery.getResult();
while (it.hasNext())
{
   out.print((String)it.next());
}<br><br> //尚不完善的地方:虽然情况好了一些,但当使用ArrayList取出体积很大的数据时,会相当耗费系统资源[系统会在内存单独开一块空间存放结果]---相关的优化方法是有的,我在这里就不作陈述了,大家可以参考一下其它的相关资料。
本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3618220.html,如需转载请自行联系原作者
相关文章
|
6天前
|
数据库连接 应用服务中间件 PHP
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
146 25
|
21天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
7天前
|
SQL 关系型数据库 数据库连接
|
1月前
|
关系型数据库 MySQL 数据库连接
Unity连接Mysql数据库 增 删 改 查
在 Unity 中连接 MySQL 数据库,需使用 MySQL Connector/NET 作为数据库连接驱动,通过提供服务器地址、端口、用户名和密码等信息建立 TCP/IP 连接。代码示例展示了如何创建连接对象并执行增删改查操作,确保数据交互的实现。测试代码中,通过 `MySqlConnection` 类连接数据库,并使用 `MySqlCommand` 执行 SQL 语句,实现数据的查询、插入、删除和更新功能。
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
99 2
|
2月前
|
移动开发 监控 关系型数据库
使用云数据库RDS和低代码开发平台“魔笔”,高效构建门户网站,完成任务领智能台灯!
使用云数据库RDS和低代码开发平台“魔笔”,高效构建门户网站,完成任务领智能台灯!
|
5月前
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
122 0
|
7月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上