??xml version="1.0" encoding="utf-8" standalone="yes"?>www.亚洲精品,四虎影院在线域名免费观看,老司机2019福利精品视频导航 http://www.aygfsteel.com/Lanny/category/36204.htmlmemory is foreverzh-cnFri, 21 Aug 2009 09:57:27 GMTFri, 21 Aug 2009 09:57:27 GMT60Apache dblUtils 工具包的使用http://www.aygfsteel.com/Lanny/archive/2009/08/20/291946.htmlLannyLannyThu, 20 Aug 2009 06:26:00 GMThttp://www.aygfsteel.com/Lanny/archive/2009/08/20/291946.htmlhttp://www.aygfsteel.com/Lanny/comments/291946.htmlhttp://www.aygfsteel.com/Lanny/archive/2009/08/20/291946.html#Feedback0http://www.aygfsteel.com/Lanny/comments/commentRss/291946.htmlhttp://www.aygfsteel.com/Lanny/services/trackbacks/291946.html
关键? commons-dbutils 工具包的使用
commons-dbutils ?Apache l织提供的一个开?JDBC 工具cdQ能让我们更单的使用 JDBC ?nbsp;
今天Q在传智播客的课堂上Q我们学?fn)?DBUtils cdQ知道了如何能够更方便地使用 JDBC 。以下是我的学习(fn)ȝ?nbsp;


-------------------------------------------------------------------------------- 
1. API 介绍Q?nbsp;
<1> org.apache.commons.dbutils.DbUtilsQ提供如关闭q接、装?JDBC 驱动E序{常规工作的工具c; 
<2> org.apache.commons.dbutils.QueryRunnerQ该cȝ单化?SQL 查询Q它?ResultSetHandler l合在一起用可以完成大部分的数据库操作Q能够大大减编码量?nbsp;
<3> org.apache.commons.dbutils.ResultSetHandlerQ该接口用于处理 java.sql.ResultSetQ将数据按要求{换ؓ(f)另一UŞ式?nbsp;
-------------------------------------------------------------------------------- 

2. 工具cȝҎ(gu)?qing)示例代码?x) 
<1> DBUtil cȝ主要Ҏ(gu)如下Q?nbsp;
a. public static void close(…) throws java.sql.SQLExceptionQ DbUtilscL供了三个重蝲的关?nbsp;

Ҏ(gu)。这些方法检查所提供的参数是不是 NULL Q如果不是的话,它们关?Connection、Statement ?ResultSet?nbsp;
b. public static void closeQuietly(…): q一cL法不仅能?Connection、Statement 和ResultSet ?NULL 情况下避免关闭,q能隐藏一些在E序中抛出的 SQLEeception?nbsp;
c. public static void commitAndCloseQuietly(Connection conn)Q?用来提交q接Q然后关闭连接,q?nbsp;

且在关闭q接时不抛出 SQL 异常?nbsp;
d. public static boolean loadDriver(java.lang.String driverClassName)Q这一方装载ƈ注册 JDBC 驱动E序Q如果成功就q回 true 。用该Ҏ(gu)Q你不需要捕捉这个异?ClassNotFoundException?nbsp;


-------------------------------------------------------------------------------- 
<2> QueryRunner cȝ构造方法及(qing)主要Ҏ(gu)Q?nbsp;
a. 默认的构造方? 
public QueryRunner(){} 
b. 需要一?javax.sql.DataSource 来作参数的构造方? 
public QueryRunner(DataSource ds) { 
this.ds = ds; 

QueryRunnercȝ主要Ҏ(gu)Q?nbsp;
c. public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) 
throws SQLExceptionQ执行一个查询操作,在这个查询中Q对象数l中的每个元素D用来作ؓ(f)查询语句的置换参数。该Ҏ(gu)?x)自行处?PreparedStatement ?ResultSet 的创建和关闭。更重要的是参数 ResultSetHandler ?x)把?ResultSet 中获得的数据转换成程序需要的数据格式?nbsp;
d. public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLExceptionQ几乎与W一U方法一P唯一的不同在于它不将数据库连接提供给Ҏ(gu)Qƈ且它是从提供l构造方法的数据?DataSource) 或用的setDataSource Ҏ(gu)中重新获?Connection?nbsp;
e. public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException Q执行一个不需要置换参数的查询操作?nbsp;
f. public int update(Connection conn, String sql, Object[] params) throws SQLExceptionQ用来执行一个更斎ͼ插入、更新或删除Q操作?nbsp;
g. public int update(Connection conn, String sql) throws SQLExceptionQ用来执行一个不需要置?nbsp;

参数的更新操作?nbsp;


-------------------------------------------------------------------------------- 
<3> ResultSetHandler接口 
ResultSetHandler 接口提供了一个单独的Ҏ(gu)Q?nbsp;
Object handle (java.sql.ResultSet .rs)?nbsp;
-------------------------------------------------------------------------------- 
<4> ResultSetHandler 接口的实现类 
a. ArrayHandlerQ把l果集中的第一行数据{成对象数l?nbsp;
b. ArrayListHandlerQ把l果集中的每一行数据都转成一个对象数l,再存攑ֈ List 中?nbsp;
c. BeanHandlerQ将l果集中的第一行数据封装到一个对应的 JavaBean 实例中?nbsp;
d. BeanListHandlerQ将l果集中的每一行数据都装C个对应的 JavaBean 实例中,存放?List里?nbsp;
e. ColumnListHandlerQ将l果集中某一列的数据存放?List 中?nbsp;
f. KeyedHandlerQ将l果集中的每一行数据都装C?Map 里,然后再根据指定的key把每?Map 再存攑ֈ一?Map 里?nbsp;
g. MapHandlerQ将l果集中的第一行数据封装到一?Map 里,key 是列名,value 是对应的倹{?nbsp;
h. MapListHandlerQ将l果集中的每一行数据都装C?Map 里,然后再存攑ֈ List?nbsp;
i. ScalarHandlerQ将l果集中某一条记录的其中某一列的数据存成 Object?nbsp;
-------------------------------------------------------------------------------- 
<5> 下面是简单对q几个工L(fng)的测试代码:(x) 
QueryRunner runner = null; 
runner = new QueryRunner();// 获得QueryRunnercȝ实例对象 
Connection conn = null; 
Class.forName("com.mysql.jdbc.Driver");//加蝲数据库驱?nbsp;
conn = DriverManager.getConnection("jdbc:mysql://localhost:3309/bookstore", 
"root", "1230");// 与数据库建立q接 
String sql = "SELECT id, name, title, price, yr, description, saleAmount FROM books 

WHERE id = ?";// 准备 sql 语句 
List<Book> list = (List) runner.query(conn, sql, new Object[]{"201"}, new 

BeanListHandler(Book.class));// q用 QueryRunner 的方法执?sql 语句Qƈ获取l果集,从这里可 

//以看?commons-dbutils cd的方便之处,避免了创?ResultSet 对象来设|参数的ȝ(ch)?nbsp;
System.out.println(books.size()); //输出 books 的元素个?nbsp;


-------------------------------------------------------------------------------- 
<6> 其它cd接口Q?nbsp;
a. org.apache.commons.dbutils.QueryLoaderc:(x)属性文件加载器Q主要用于加载属性文件中?SQL 到内存中?nbsp;
b. org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSetc:(x)该类是用来对sql语句执行完成 

之后的的数D行null的替换?nbsp;
c. org.apache.commons.dbutils.wrappers.StringTrimmedResultSetc:(x)去除ResultSet中字D늚左右I格?nbsp;
d. org.apache.commons.dbutils.RowProcessor接口Q提供了把结果集的行数据转换成其它格式的功能。它的实现类是org.apache.commons.dbutils.BasicRowProcessorcR?nbsp;


Lanny 2009-08-20 14:26 发表评论
]]>
XFire配置步骤http://www.aygfsteel.com/Lanny/archive/2008/12/10/245469.htmlLannyLannyWed, 10 Dec 2008 04:57:00 GMThttp://www.aygfsteel.com/Lanny/archive/2008/12/10/245469.htmlhttp://www.aygfsteel.com/Lanny/comments/245469.htmlhttp://www.aygfsteel.com/Lanny/archive/2008/12/10/245469.html#Feedback1http://www.aygfsteel.com/Lanny/comments/commentRss/245469.htmlhttp://www.aygfsteel.com/Lanny/services/trackbacks/245469.html

Lanny 2008-12-10 12:57 发表评论
]]>
E序设计模式?----单实例模?/title><link>http://www.aygfsteel.com/Lanny/archive/2008/11/25/242482.html</link><dc:creator>Lanny</dc:creator><author>Lanny</author><pubDate>Tue, 25 Nov 2008 03:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/Lanny/archive/2008/11/25/242482.html</guid><wfw:comment>http://www.aygfsteel.com/Lanny/comments/242482.html</wfw:comment><comments>http://www.aygfsteel.com/Lanny/archive/2008/11/25/242482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Lanny/comments/commentRss/242482.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Lanny/services/trackbacks/242482.html</trackback:ping><description><![CDATA[ <img src ="http://www.aygfsteel.com/Lanny/aggbug/242482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Lanny/" target="_blank">Lanny</a> 2008-11-25 11:19 <a href="http://www.aygfsteel.com/Lanny/archive/2008/11/25/242482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>E序设计模式?---Observer模式http://www.aygfsteel.com/Lanny/archive/2008/11/25/242478.htmlLannyLannyTue, 25 Nov 2008 03:02:00 GMThttp://www.aygfsteel.com/Lanny/archive/2008/11/25/242478.htmlhttp://www.aygfsteel.com/Lanny/comments/242478.htmlhttp://www.aygfsteel.com/Lanny/archive/2008/11/25/242478.html#Feedback0http://www.aygfsteel.com/Lanny/comments/commentRss/242478.htmlhttp://www.aygfsteel.com/Lanny/services/trackbacks/242478.htmlObserver模式也称察者模式,

观察者模式是java已经实现的模?我们只要利用java.util.Obserablecdjava.util.Observer接口可以实现观察者模?/span>

实现q程:

被观察者必ȝ承Observable,一旦事件被触发,调用notifyObservers通知观察?/span>

观察者必d现Observer接口,实现updateҎ(gu),完成事g处理

举个l典的例?...猫叫,老鼠?人惊?...

代码:

 1package javamodel.observer;
 2
 3import java.util.Observable;
 4import java.util.Observer;
 5
 6/**
 7* 猫叫Q老鼠跑,Mh被惊?用代码实现这个连锁反?nbsp;?br />  8@author Administrator
 9*
10*/

11
12public class TestObserver {
13
14public static void main(String[] args){
15   Cat c=new Cat();
16   Observer o1=new Mouse();
17   Observer o2=new Man();
18   c.addObserver(o1);
19   Mouse oo1=(Mouse)o1;//向下转型
20   oo1.addObserver(o2);
21   c.CatSay();
22}

23
24}

25
26class Cat extends Observable{//猫被老鼠观察Q猫是被观察?/span>
27
28public void CatSay(){
29   System.out.println("猫叫?/span>");
30   this.setChanged();
31   this.notifyObservers();
32}

33}

34
35class Mouse extends Observable implements Observer{//老鼠观察猫,猫是观察?对于?老鼠是被观察?/span>
36
37public void update(Observable arg0, Object arg1) {
38   // TODO Auto-generated method stub
39   System.out.println("猫叫了,老鼠跑了");
40   this.setChanged();
41   this.notifyObservers();
42}

43
44}

45
46class Man implements Observer{//察老鼠,人是观察?/span>
47
48public void update(Observable arg0, Object arg1) {
49   // TODO Auto-generated method stub
50   System.out.println("老鼠跑了,人惊醒了");
51}

52}

53
54


ȝQ?观察者模式的应用场景Q?/span>

1?nbsp;对一个对象状态的更新Q需要其他对象同步更斎ͼ而且其他对象的数量动态可变?/span>

2?nbsp;对象仅需要将自己的更新通知l其他对象而不需要知道其他对象的l节?/span>

观察者模式的优点Q?/span>

1?nbsp;Subject?/span>Observer之间是松偶合的,分别可以各自独立改变?/span>

2?nbsp;Subject在发送广播通知的时候,无须指定具体?/span>ObserverQ?/span>Observer可以自己军_是否要订?/span>Subject的通知?/span>

3?nbsp;遵守大部?/span>GRASP原则和常用设计原则,高内聚、低偶合?/span>

观察者模式的~陷Q?/span>

1?nbsp;村ց合导致代码关pM明显Q有时可能难以理解?/span>(废话)

2?nbsp;如果一?/span>Subject被大?/span>Observer订阅的话Q在q播通知的时候可能会(x)有效率问题。(毕竟只是单的遍历Q?/span>




Lanny 2008-11-25 11:02 发表评论
]]>
վ֩ģ壺 | ̳| Ž| ǰ| ½| | | | ɽ| ƽ| ɽ| | | ¹| | Ȫ| | ϵ| | | | | | ̨ʡ| Ȫ| | | | | ˮ| ˮ| ͭ| | | | | º| | Ԫ| ڰ| ߶|