构建一个高可扩展性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,如需转载请自行联系原作者
相关文章
|
22天前
|
前端开发 关系型数据库 数据库
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
24 0
|
28天前
|
监控 关系型数据库 MySQL
轻松入门MySQL:主键设计的智慧,构建高效数据库的三种策略解析(5)
轻松入门MySQL:主键设计的智慧,构建高效数据库的三种策略解析(5)
|
1月前
|
SQL Oracle 关系型数据库
项目中经常看到数据库Connection连接与Session这个你好不知道吗?
项目中经常看到数据库Connection连接与Session这个你好不知道吗?
15 1
|
24天前
|
关系型数据库 MySQL 数据库
用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
23 0
|
1天前
|
SQL 关系型数据库 MySQL
【Go语言专栏】使用Go语言连接MySQL数据库
【4月更文挑战第30天】本文介绍了如何使用Go语言连接和操作MySQL数据库,包括选择`go-sql-driver/mysql`驱动、安装导入、建立连接、执行SQL查询、插入/更新/删除操作、事务处理以及性能优化和最佳实践。通过示例代码,展示了连接数据库、使用连接池、事务管理和性能调优的方法,帮助开发者构建高效、稳定的Web应用。
|
2天前
|
SQL DataWorks 网络安全
DataWorks操作报错合集之DataWorks连接Hive数据库时出现连接超时的问题如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
7 1
|
2天前
|
弹性计算 关系型数据库 MySQL
检测MySQL 数据库连接数量
【4月更文挑战第29天】
5 0
|
2天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。
|
3天前
|
弹性计算 关系型数据库 MySQL
检测 MySQL 数据库连接数量
【4月更文挑战第28天】
8 0
|
4天前
|
数据库 UED 索引
构建高效的数据库索引:提升查询性能的关键技巧
本文将深入探讨数据库索引的设计和优化,介绍如何构建高效的数据库索引以提升查询性能。通过学习本文,读者将掌握数据库索引的原理、常见类型以及优化策略,从而在实际应用中提升数据库查询效率。