构建一个高可扩展性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,如需转载请自行联系原作者
相关文章
|
4月前
|
关系型数据库 数据库 RDS
【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】(5.30-6.8)
本周精选聚焦数据库迁移训练营、快速连接云数据库RDS训练营及智能多模态搜索解决方案。为用户提供模拟教程与实战演练,学习RDS MySQL实例连接与数据管理技能,助力企业智能化发展。每周解锁数据库实战新场景,抓紧时间,精彩不容错过!
|
5月前
|
安全 OLAP 数据库
拒绝等待!阿里云瑶池数据库 x Qwen3,构建增强式RAG
阿里云瑶池 Dify on DMS + AnalyticDB 现已支持通义千问 Qwen3 全系列模型的私域部署,并提供独占模型服务,实现高效安全的 GraphRAG 业务应用及大模型应用开发解决方案。
|
6月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
6月前
|
数据库连接 应用服务中间件 PHP
|
5月前
|
安全 Linux 网络安全
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
243 0
|
5月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1127 28
|
5月前
|
Java 数据库
jsp CRM客户管理系统(含数据库脚本以及文档)
jsp CRM客户管理系统(含数据库脚本以及文档)
117 10
|
5月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
287 14

热门文章

最新文章