分享
 
 
 

你如何使用JavaBean操作数据库?

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

你平时是如何使用jsp操作数据库呢?对于jsp+JavaBean模式,想必大家都已经很熟悉了,我们可以将获取数据库连接,查询,更新甚至将其它的功能都封装进javaBean----

好了--下面让我们来好好弄清楚一个问题:**你如何在JSP页中取得DB中的数据?从javaBean中返回ResultSet,然后在JSP中枚举吗?假如是这样的话,那我强烈建议你把这篇文章读完。*^_^*

用javaBean封装数据库操作谁不会?--对啊,大家都会,但是--假如构建一个高扩展性的“结构”?这就要用到java的相关知识了。废话少说,我们先在Tomcat中创建一个DataSource- jdbc/Panabia,然后再创建一个java“基类”,这个类封装了数据库连接和连接的释放:[程式中有相应的注解]

CODE:

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的,之所以这样,主要是为了方便其它“扩展类”的调用,当然,还有其它好处--- :)

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

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

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

答案出来了:

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

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

CODE:

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();

}

}

然后,就是在JSP页中进行数据的枚举:因为发现cnjbb不支持Html标签的显示,所以,只贴出了JSP中的全部java代码片--

........

Iterator it=UserQuery.getResult();

while(it.hasNext()){

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有