JAVA拓展新的数据库_构建一个高可扩展性javabean和jsp连接数据库操作

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

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类就产生了:

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页面进行查询

Iterator it=UserQuery.getResult();

while(it.hasNext())

{

out.print((String)it.next());

}

//尚不完善的地方:虽然情况好了一些,但当使用ArrayList取出体积很大的数据时,会相当耗费系统资源[系统会在内存单独开一块空间存放结果]---相关的优化方法是有的,我在这里就不作陈述了,大家可以参考一下其它的相关资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值