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取出体积很大的数据时,会相当耗费系统资源[系统会在内存单独开一块空间存放结果]---相关的优化方法是有的,我在这里就不作陈述了,大家可以参考一下其它的相关资料。

最新文章

  1. iOS 8.1.3 “各路助手挺尸”、“封杀一切助手
  2. Oracle PL/SQL中的循环处理(sql for循环)
  3. wavecom短信猫常用AT命令
  4. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记2 Xcode、Auto Layout及MVC
  5. __isset()检测类内部变量是否设置
  6. apache安装扩展模块
  7. iOS手势之pinch
  8. 承接VR外包|AR外包|Unity3D外包|UE4外包(内附案例演示)
  9. Javascript : require.js 的使用(例子)
  10. 通过Queue方法实现进程间通信
  11. Beginning SDL 2.0(3) SDL介绍及BMP渲染
  12. 用exec调用带有output输出参数的存储过程
  13. sql结合通配符来自定义转义字符
  14. iOS GCD中级篇 - dispatch_group的理解及使用
  15. EasyUi---searchbox 条件查询
  16. js笔记 -- toString() 和String()
  17. JavaScript -- 实现密码加密的几种方案
  18. 页面滚动tab监听
  19. 清北刷题班day3 morning
  20. poj 1273最大流dinic算法模板

热门文章

  1. RabbitMQ介绍及安装部署
  2. box-sizing 盒子模型不改变大小
  3. 【LOJ】#2562. 「SDOI2018」战略游戏
  4. 国内最火的 HTML、CSS、JavaScript 开源项目 Top 榜,你知多少?
  5. jenkins远程执行shell
  6. Bootstrap--响应式显示图片信息列表
  7. hdoj1050 Moving Tables(贪心)
  8. sql中的if()和ifnull() 的用法和区别
  9. 在控制台连接oracle
  10. poj-3268最短路