<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alex's Blog &#187; Java</title>
	<atom:link href="http://www.hialex.net/tags/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hialex.net</link>
	<description>记录生活与工作中的点点滴滴</description>
	<lastBuildDate>Sat, 09 Jan 2010 12:37:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Log4j学习笔记(B)</title>
		<link>http://www.hialex.net/2008/04/log4j-note-b.html</link>
		<comments>http://www.hialex.net/2008/04/log4j-note-b.html#comments</comments>
		<pubDate>Mon, 21 Apr 2008 08:13:38 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[appender]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/04/log4j-note-b.html</guid>
		<description><![CDATA[三、Appender组件 

Appender组件决定将日志信息输出到什么地方。支持以下目的地：

控制台(Console); 
文件(File); 
GUI组件(GUI component); 
套接口服务器(Remote socket server); 
NT的事件记录器(NT Event Logger); 
UNIX Syslog守护进程(Remote UNIX Syslog daemon);


一个Logger可同时对应多个Appender，示例：myLogger配置二个Appender: 一个file, 一个是console：

log4j.logger.myAppender=WARN,file,console 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=log.txt 
log4j.apender.console=org.apache.log4j.ConsoleAppender



四、Layout组件 

Layout组件决定日志输出格式，有以下几种类型：

org.apache.log4j.HTMLLayout(以HTML表格形式布局); 
org.apache.log4j.PatternLayout(可以灵活地指定布局模式); 
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串); 
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);


为名称为console的Appender配置SimpleLayout，代码如下：

log4j.appender.console.layout=org.apache.log4j.SimpleLayout


输出日志格式如下：

WARN &#8211; This is a log message from the myLogger


为名称为file的Appender配置PatternLayout，代码如下：

log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%t %p &#8211; %m%n


输出日志格式如下：

THREAD-1 WARN &#8211; This is a log message from the myLogger


PatternLayout让开发者依照ConversionPattern定义输出格式。ConversionPattern中一些指定日志内容和格式的预定义符号说明如下：



符号
描述


%r 
自程序开始后消耗的毫秒数


%t
表示日志记录请求生成的线程


%p
表示日专语句的优先级


%r
与日志请求相关的类别名称


%c 
日志信息所在的类名


%m%n
表示日志信息的内容





五、Log4J的基本用法 

定义配置文件

Log4J支持二种配置文件格式：XML和Java属性文件(采用&#8220;键=值&#8221;形式)。以下为Java属性文件格式配置文件 
配置Logger组件

配置root Logger语法为：log4j.rootLogger=[priority],appenderName,appenderName,&#8230; 
配置自定义Logger组件语法为：log4j.logger.loggerName=[priority],appenderName,appenderName,&#8230; 
其中：priority为日志级别，可选值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL； [...]]]></description>
			<content:encoded><![CDATA[<p>三、Appender组件 </p>
<ul>
<li>Appender组件决定将日志信息输出到什么地方。支持以下目的地：
<ul>
<li>控制台(Console); </li>
<li>文件(File); </li>
<li>GUI组件(GUI component); </li>
<li>套接口服务器(Remote socket server); </li>
<li>NT的事件记录器(NT Event Logger); </li>
<li>UNIX Syslog守护进程(Remote UNIX Syslog daemon);</li>
</ul>
</li>
<li>一个Logger可同时对应多个Appender，示例：myLogger配置二个Appender: 一个file, 一个是console：
<ul>
<li>log4j.logger.myAppender=WARN,file,console </li>
<li>log4j.appender.file=org.apache.log4j.RollingFileAppender </li>
<li>log4j.appender.file.File=log.txt </li>
<li>log4j.apender.console=org.apache.log4j.ConsoleAppender</li>
</ul>
</li>
</ul>
<p>四、Layout组件 </p>
<ul>
<li>Layout组件决定日志输出格式，有以下几种类型：
<ul>
<li>org.apache.log4j.HTMLLayout(以HTML表格形式布局); </li>
<li>org.apache.log4j.PatternLayout(可以灵活地指定布局模式); </li>
<li>org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串); </li>
<li>org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);</li>
</ul>
</li>
<li>为名称为console的Appender配置SimpleLayout，代码如下：
<ul>
<li>log4j.appender.console.layout=org.apache.log4j.SimpleLayout</li>
</ul>
</li>
<li>输出日志格式如下：
<ul>
<li>WARN &#8211; This is a log message from the myLogger</li>
</ul>
</li>
<li>为名称为file的Appender配置PatternLayout，代码如下：
<ul>
<li>log4j.appender.file.layout=org.apache.log4j.PatternLayout </li>
<li>log4j.appender.file.layout.ConversionPattern=%t %p &#8211; %m%n</li>
</ul>
</li>
<li>输出日志格式如下：
<ul>
<li>THREAD-1 WARN &#8211; This is a log message from the myLogger</li>
</ul>
</li>
<li>PatternLayout让开发者依照ConversionPattern定义输出格式。ConversionPattern中一些指定日志内容和格式的预定义符号说明如下：<br />
<table cellspacing="0" cellpadding="2" width="356" border="1">
<tbody>
<tr>
<td valign="top" width="106">符号</td>
<td valign="top" width="248">描述</td>
</tr>
<tr>
<td valign="top" width="109">%r </td>
<td valign="top" width="248">自程序开始后消耗的毫秒数</td>
</tr>
<tr>
<td valign="top" width="111">%t</td>
<td valign="top" width="248">表示日志记录请求生成的线程</td>
</tr>
<tr>
<td valign="top" width="112">%p</td>
<td valign="top" width="248">表示日专语句的优先级</td>
</tr>
<tr>
<td valign="top" width="113">%r</td>
<td valign="top" width="248">与日志请求相关的类别名称</td>
</tr>
<tr>
<td valign="top" width="114">%c </td>
<td valign="top" width="248">日志信息所在的类名</td>
</tr>
<tr>
<td valign="top" width="114">%m%n</td>
<td valign="top" width="248">表示日志信息的内容</td>
</tr>
</tbody>
</table>
</li>
</ul>
<p>五、Log4J的基本用法 </p>
<ol>
<li>定义配置文件
<ul>
<li>Log4J支持二种配置文件格式：XML和Java属性文件(采用&#8220;键=值&#8221;形式)。以下为Java属性文件格式配置文件 </li>
<li>配置Logger组件
<ul>
<li>配置root Logger语法为：log4j.rootLogger=[priority],appenderName,appenderName,&#8230; </li>
<li>配置自定义Logger组件语法为：log4j.logger.loggerName=[priority],appenderName,appenderName,&#8230; </li>
<li>其中：priority为日志级别，可选值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL； </li>
<li>appenderName指定Appender组件，可指定多个;</li>
</ul>
</li>
</ul>
<ol>
<li>配置Appender组件
<ul>
<li>配置日志信息输出目的地Appender, 语法为： log4j.appender.appenderName=fully.ualified.name.of.appender.class </li>
<li>log4j.appender.appenderName.option1=value1
<ul>
<p>&#8230; </p>
<p>log4j.appender.appenderName.optionN=valueN </p>
</p>
</ul>
</li>
<li>Log4J提供的Appender有以下几种：
<ul>
<li>org.apache.log4j.ConsoleAppender(控制台); </li>
<li>org.apache.log4j.FileAppender(文件); </li>
<li>org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件); </li>
<li>org.apache.log4j.RollingFileAppender(文件大小到指定尺寸产生一个新的文件); </li>
<li>org.apache.log4j.WriteAppender(将日志信息以流格式发送到任意指定地方);</li>
</ul>
</li>
</ul>
</li>
<li>配置Layout组件
<ul>
<li>配置Layout组件语法为： </li>
<li>log4j.appender.appenderName.layout=fully.ualified.name.of.appender.class </li>
<li>log4j.appender.appenderName.layout.option1=value1
<p>&#8230; </p>
<p>log4j.appender.appenderName.layout.optionN=valueN</p>
</li>
</ul>
</li>
</ol>
</li>
<li>程序中使用Log4j</li>
</ol>
<ul>
<li>获得日志记录器：
<ul>
<li>获得rootLogger：Logger rootLogger=Logger.getRootLogger(); </li>
<li>获得自定义Logger：Logger myLogger = Logger.getLogger(&quot;log4j.logger.myLogger&quot;);</li>
</ul>
</li>
<li>读取日志记录器，配置Log4J环境;
<ol>
<li>BasicConfigurator.configure(): 自动快速地使用默认Log4J环境; </li>
<li>Property.configurator.configure(String configFilename): 读取使用Java属性格式的配置文件并配置Log4J环境； </li>
<li>DOMConfigurator.configure(String filename): 读取XML形式的配置文件并配置LOG4J环境;</li>
</ol>
</li>
<li>输出日志信息;
<ul>
<li>在程序代码中需要生成日志的地方，调用Logger的各种输出日志方法输出不同级别的日志，例如：
<ul>
<li>myLogger.debug(&quot;Thie is a log message from the &quot; + myLogger.getName());</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F04%2Flog4j-note-b.html&title=Log4j%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%28B%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-04-20 -- <a href="http://www.hialex.net/2008/04/log4j-note-a.html" title="Log4j学习笔记(A)">Log4j学习笔记(A)</a> (0)</li><li>2009-03-08 -- <a href="http://www.hialex.net/2009/03/mysql-notes-3.html" title="MySQL读书笔记(3)">MySQL读书笔记(3)</a> (0)</li><li>2009-03-03 -- <a href="http://www.hialex.net/2009/03/mysql-notes-2.html" title="MySQL读书笔记(2)">MySQL读书笔记(2)</a> (0)</li><li>2009-03-02 -- <a href="http://www.hialex.net/2009/03/mysql-notes-1.html" title="MySQL读书笔记(1)">MySQL读书笔记(1)</a> (0)</li><li>2008-04-02 -- <a href="http://www.hialex.net/2008/04/servlet-note.html" title="Servlet程序设计">Servlet程序设计</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/04/log4j-note-b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log4j学习笔记(A)</title>
		<link>http://www.hialex.net/2008/04/log4j-note-a.html</link>
		<comments>http://www.hialex.net/2008/04/log4j-note-a.html#comments</comments>
		<pubDate>Sun, 20 Apr 2008 08:29:54 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/04/log4j-note-a.html</guid>
		<description><![CDATA[一、LOG4J组成
LOG4J主要由三大组件组成：

Logger: 决定什么日志信息应该被输出、什么日志信息应该被忽略；
l Appender: 指定日志信息应该输出到什么地方, 这些地方可以是控制台、文件、网络设备；
l Layout: 指定日志信息的输出格式；

一个Logger可以有多个Appender，也就是说日志信息可以同时输出到多个设备上，每个Appender对应
二、Logger组件

Logger组件提供的方法：

Logger组件是LOG4J的核心组件，它代表了Log4J的日志记录器，它能够对日志信息进行分类筛选。它由org.apache.log4j.Logger类实现，提供了如下方法：

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
package org.apache.log4j;
&#160;
public class Logger &#123;
&#160;
// Creation &#38;amp; retrieval methods:
&#160;
public static Logger getRootLogger&#40;&#41;;
&#160;
public static Logger getLogger&#40;String name&#41;;
&#160;
// printing methods:
&#160;
public void debug&#40;Object message&#41;;
&#160;
public void info&#40;Object message&#41;;
&#160;
public void warn&#40;Object message&#41;;
&#160;
public void error&#40;Object message&#41;;
&#160;
public void fatal&#40;Object message&#41;;
&#160;
// generic printing method:
&#160;
public void log&#40;Priority p, Object message&#41;;
&#160;
&#125;




在配置文件中配置Logger组件

可在Log4J配置文件中配置自己的Logger组件，示例：log4j.logger.myLogger=WARN
以上代码定义了一个Logger组件，名称为myLogger，日志级别为WARN。


日志级别种类：

一共有五种，级别由高到低依次是：fatal、error、warn、info、debug。获得Logger实例后，我们可调用以下方法之一输出日志信息：



public void debug(Object message); //输出debug级别的日志信息；
public void info(Object message); //输出info级别的日志信息；
public [...]]]></description>
			<content:encoded><![CDATA[<p>一、LOG4J组成</p>
<p>LOG4J主要由三大组件组成：</p>
<ul>
<li>Logger: 决定什么日志信息应该被输出、什么日志信息应该被忽略；</li>
<li>l Appender: 指定日志信息应该输出到什么地方, 这些地方可以是控制台、文件、网络设备；</li>
<li>l Layout: 指定日志信息的输出格式；</li>
</ul>
<p>一个Logger可以有多个Appender，也就是说日志信息可以同时输出到多个设备上，每个Appender对应</p>
<p>二、Logger组件</p>
<ol>
<li>Logger组件提供的方法：
<ul>
<li>Logger组件是LOG4J的核心组件，它代表了Log4J的日志记录器，它能够对日志信息进行分类筛选。它由org.apache.log4j.Logger类实现，提供了如下方法：

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">org.apache.log4j</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Logger <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Creation &amp;amp; retrieval methods:</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Logger getRootLogger<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Logger getLogger<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// printing methods:</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> debug<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> info<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> warn<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> error<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> fatal<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// generic printing method:</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> log<span style="color: #009900;">&#40;</span>Priority p, <span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</li>
</ul>
</li>
<li>在配置文件中配置Logger组件
<ul>
<li>可在Log4J配置文件中配置自己的Logger组件，示例：log4j.logger.myLogger=WARN</li>
<li>以上代码定义了一个Logger组件，名称为myLogger，日志级别为WARN。</li>
</ul>
</li>
<li>日志级别种类：
<ul>
<li>一共有五种，级别由高到低依次是：fatal、error、warn、info、debug。获得Logger实例后，我们可调用以下方法之一输出日志信息：<br />
<table border="1" cellspacing="0" cellpadding="2" width="509">
<tbody>
<tr>
<td width="507" valign="top">public void debug(Object message); //输出debug级别的日志信息；</p>
<p>public void info(Object message); //输出info级别的日志信息；</p>
<p>public void warn(Object message); //输出warn级别的日志信息；</p>
<p>public void error(Object message); //输出error级别的日志信息；</p>
<p>public void fatal(Object message); //输出fatal级别的日志信息；</p>
<p>public void log(Priority p, Object message);//输出参数Priority指定级别的日志信息；</td>
</tr>
</tbody>
</table>
</li>
<li>以上方法只有当它的级别大于或等于Logger组件配置的日志级别时才调用。以前面我们配置的myLogger为例，它的日志级别为WARN, 那么在程序中，它的warn()、error()、fatal()方法会被执行。对于log()方法，只有当它的参数Priority指定的日志级别大于或等于WARN时，它才会被执行。</li>
</ul>
</li>
<li>为什么需要对日志进行分级？
<ul>
<li>在写程序的时候，为了调试程序，我们会在很多出错的地方输出大量的日志信息。当程序调试完，不需要这些信息时，将程序中这些输出日志信息代码删除吗？这样费时费力，对于大型程序几乎不可行。通过对日志分级，假如不想输出WARN级别的日志信息，则Logger组件的级别调高即可，省时省心。</li>
</ul>
</li>
<li>Logger组件的继承性
<ul>
<li>Log4J提供了一个root Logger，它是所有Logger组件的“祖先”,它永远存在，且不能通过名字检索或引用，通过Logger.getRootLogger()方法取得它。配置root Logger代码：log4j.rootLogger=INFO,console</li>
<li>可在配置文件中方便地配置存在继承关系的Logger组件，凡是在符号“.”后面的组件都会成为在符号&#8221;.&#8221;前面的Logger组件的子类。例
<ul>
<li>log4j.apache.myLogger=WARN</li>
<li>log4j.apache.myLogger.mySonLogger=,file</li>
<li>以上代码中, mySonLogger是myLogger的子类Logger组件。Logger组件的继承关系：</li>
</ul>
</li>
<li>如果子类Logger组件没有定义日志级别，则将继承父类的日志级别;</li>
<li>如果子类Logger组件定义了日志级别，就不会继承父类的日志级别;</li>
<li>黙认情况下，子类Logger组件会继承父类所有的Appender，把它们加入到自己的Appener;</li>
<li>如果把子类Logger组件的additivity标志设为false，那么它就不会继承父类Appender。additivity标志 默认值为false；</li>
<li>以上配置的三个Logger继承关系示例如图：</li>
<li>这三个Logger组件实际日志级别和Appender如下表：<br />
<table border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="133" valign="top">Logger组件</td>
<td width="133" valign="top">日志级别</td>
<td width="133" valign="top">Appender清单</td>
</tr>
<tr>
<td width="133" valign="top">root Logger</td>
<td width="133" valign="top">INFO</td>
<td width="133" valign="top">console</td>
</tr>
<tr>
<td width="133" valign="top">myLogger</td>
<td width="133" valign="top">WARN</td>
<td width="133" valign="top">console(继承)</td>
</tr>
<tr>
<td width="133" valign="top">mySonLogger</td>
<td width="133" valign="top">WARN(继承)</td>
<td width="133" valign="top">file，console(继承)</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F04%2Flog4j-note-a.html&title=Log4j%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%28A%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-04-21 -- <a href="http://www.hialex.net/2008/04/log4j-note-b.html" title="Log4j学习笔记(B)">Log4j学习笔记(B)</a> (0)</li><li>2009-03-08 -- <a href="http://www.hialex.net/2009/03/mysql-notes-3.html" title="MySQL读书笔记(3)">MySQL读书笔记(3)</a> (0)</li><li>2009-03-03 -- <a href="http://www.hialex.net/2009/03/mysql-notes-2.html" title="MySQL读书笔记(2)">MySQL读书笔记(2)</a> (0)</li><li>2009-03-02 -- <a href="http://www.hialex.net/2009/03/mysql-notes-1.html" title="MySQL读书笔记(1)">MySQL读书笔记(1)</a> (0)</li><li>2008-04-02 -- <a href="http://www.hialex.net/2008/04/servlet-note.html" title="Servlet程序设计">Servlet程序设计</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/04/log4j-note-a.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet程序设计</title>
		<link>http://www.hialex.net/2008/04/servlet-note.html</link>
		<comments>http://www.hialex.net/2008/04/servlet-note.html#comments</comments>
		<pubDate>Wed, 02 Apr 2008 08:46:24 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[classpath]]></category>
		<category><![CDATA[get]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[语法]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/04/servlet-note.html</guid>
		<description><![CDATA[Java Servlet是一种使用Java编写的CGI程序

CGI：通用网关接口
与传统的CGI不同，Servlet是一种多线程处理模式&#8211;性能较高
在Servlet中可以控制输出HTML代码，则所有的HTML代码必须使用out.println()一行一行输出

Servlet的生命周期

初始化（1次）

public void init(ServletiConfig config) throws ServletException
Servlet初始化有两种方式

init()：当不需要传递初始化参数时使用
init(ServletConfig config) ：如果使用这种初始化方法，则上面的无参初始化方法无效，这种方式适用于需要传递初始化参数




服务（多次）

doGet();表单和地址输入都为GET请求
doPost(); 只有表单输入为POST请求


销毁（1次）

服务器关闭
此Servlet长时间不使用



简单Servlet编写

Servlet直接继承直HttpServlet
在doPost（doGet）方法中写入相应的程序代码
配置WEB.XML文件

JSP程序的功能与Servlet一致，意味着Servlet程序同样可以被外部所访问，就必须有一个地址，这只能通过WEB映射解决 

修改web.xml文件可以配置映射地址
//表示要使用一个Servlet

&#60;servlet&#62;  
      //在web.xml文件内部起作用的名字  
      &#60;servlet-name&#62;Simple&#60;/servlet-name&#62;  
      //servlet程序所在包.类名称  
      &#60;servlet-class&#62;net.hialex.Servlet.SimpleServlet&#60;/servlet-class&#62;       
&#60;/servlet&#62;      [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Java Servlet是一种使用Java编写的CGI程序</strong></p>
<ul>
<li><strong>CGI：通用网关接口</strong></li>
<li>与传统的CGI不同，<strong>Servlet是一种多线程处理模式</strong>&#8211;性能较高</li>
<li>在Servlet中可以控制输出HTML代码，则所有的HTML代码必须使用out.println()一行一行输出</li>
</ul>
<p>Servlet的生命周期</p>
<ol>
<li><strong>初始化（1次）</strong>
<ul>
<li>public void <strong>init(ServletiConfig config)</strong> throws ServletException<br />
Servlet初始化有两种方式</p>
<ul>
<li>init()：当不需要传递初始化参数时使用</li>
<li>init(ServletConfig config) ：<strong>如果使用这种初始化方法，则上面的无参初始化方法无效</strong>，这种方式适用于需要传递初始化参数</li>
</ul>
</li>
</ul>
</li>
<li><strong>服务（多次）</strong>
<ul>
<li>doGet();表单和地址输入都为GET请求</li>
<li>doPost(); 只有表单输入为POST请求</li>
</ul>
</li>
<li><strong>销毁（1次）</strong>
<ul>
<li>服务器关闭</li>
<li>此Servlet长时间不使用</li>
</ul>
</li>
</ol>
<p>简单Servlet编写</p>
<ol>
<li>Servlet直接继承直HttpServlet</li>
<li>在doPost（doGet）方法中写入相应的程序代码</li>
<li>配置WEB.XML文件
<ul>
<li><strong>JSP程序的功能与Servlet一致，意味着Servlet程序同样可以被外部所访问，就必须有一个地址，这只能通过WEB映射解决 </strong>
<ul>
<li>修改web.xml文件可以配置映射地址<br />
//表示要使用一个Servlet</li>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>  
      //在web.xml文件内部起作用的名字  
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Simple<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>  
      //servlet程序所在包.类名称  
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>net.hialex.Servlet.SimpleServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>               
//servlet映射地址               
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>  
     //在web.xml文件内部起作用的名字，与上面的名字一致  
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Simple<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>  
     //具体映射路径，前面必须要有一个/  
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/demo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

</ul>
</li>
</ul>
</li>
<li>注意：
<ul>
<li>在编译servlet时可能会遇到找不到servlet包的问题，这是因为servlet为JDK的扩展包，所以在使用时需要指定classpath</li>
<li><strong>若不指定classpath可以将servlet.jar文件拷贝到JSK安装路径下的jre\lib\ext下</strong></li>
</ul>
</li>
<li>结论：<strong>在Tomcat中，存在servlet的全部库文件（%Tomcat_HOME%\lib\servlet-api.jar）</strong></li>
</ol>
<p>HttpServlet类</p>
<ul>
<li>继承自GenericServlet类并增加了doGet()、doPost()等七个方法</li>
<li><strong>doGet()方法：当客户端发送get请求时就调用doGet()方法，HTTP缺省的就是Get</strong></li>
<li><strong>doPost()方法：当客户端发送HTTP请求调用POST方法调用doPost()方法</strong></li>
</ul>
<p>对于一个基本的Servlet程序必须注意以下几点：</p>
<ol>
<li><strong>首先一定要符合Servlet程序的开发框架</strong></li>
<li><strong>配置web.xml文件</strong></li>
<li><strong>Servlet的缺点是不适合输出大量的HTML代码</strong></li>
</ol>
<p><span id="more-62"></span></p>
<p>多个名称映射同一Servlet：</p>
<ul>
<li>&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;simple&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/demo&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</li>
<li>&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;simple&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/demo.simple&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</li>
<li>&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;simple&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/demo/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</li>
<li>只要保持&lt;servlet-name&gt;一致，就可以有多个&lt;servlet-mapping&gt;<br />
只要映射名称为*，就可以任意匹配</li>
<li>在servlet中解决路径问题的唯一原则：在地址栏中拼凑出完整路径</li>
</ul>
<p>Servlet接口与JSP对象比较：</p>
<blockquote>
<table border="1" cellspacing="0" cellpadding="2" width="516">
<tbody>
<tr>
<td width="192" valign="top">Servlet接口</td>
<td width="322" valign="top">JSP内置对象</td>
</tr>
<tr>
<td width="192" valign="top">HttpServletRequest</td>
<td width="322" valign="top">request</td>
</tr>
<tr>
<td width="192" valign="top">HttpServletResponse</td>
<td width="322" valign="top">response</td>
</tr>
<tr>
<td width="192" valign="top">ServletConfig</td>
<td width="322" valign="top">config</td>
</tr>
<tr>
<td width="192" valign="top">HttpSession</td>
<td width="322" valign="top">Session，通过request.getSession()取得</td>
</tr>
<tr>
<td width="192" valign="top">ServletContext</td>
<td width="322" valign="top">application<br />
取得两种方式（对应两种初始化方法）<br />
1.无参数初始化方法<br />
2.如果针对有参构造[init(ServletConfig)]则必须通过Config对象取得</td>
</tr>
</tbody>
</table>
</blockquote>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F04%2Fservlet-note.html&title=Servlet%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-02-13 -- <a href="http://www.hialex.net/2008/02/jsp-syntax-g.html" title="(八)JSP基本语法G&#8211;其他对象">(八)JSP基本语法G&#8211;其他对象</a> (0)</li><li>2008-03-15 -- <a href="http://www.hialex.net/2008/03/javabean-syntax-b.html" title="JavaBean语法(下)">JavaBean语法(下)</a> (0)</li><li>2008-03-01 -- <a href="http://www.hialex.net/2008/03/usage-of-jdbc.html" title="(九)JDBC操作技术">(九)JDBC操作技术</a> (0)</li><li>2008-03-01 -- <a href="http://www.hialex.net/2008/03/javabean-syntax-a.html" title="JavaBean语法(上)">JavaBean语法(上)</a> (0)</li><li>2008-02-02 -- <a href="http://www.hialex.net/2008/02/jsp-syntax-f.html" title="(七)JSP基本语法&#8211;session对象">(七)JSP基本语法&#8211;session对象</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/04/servlet-note.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaBean语法(下)</title>
		<link>http://www.hialex.net/2008/03/javabean-syntax-b.html</link>
		<comments>http://www.hialex.net/2008/03/javabean-syntax-b.html#comments</comments>
		<pubDate>Sat, 15 Mar 2008 08:44:56 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[bean]]></category>
		<category><![CDATA[javabean]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[范围]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/03/javabean-syntax-b.html</guid>
		<description><![CDATA[为什么能通过property=&#34;*&#34;的方式，将内容设置到Bean中，其根本原因是使用了Java的反射机制，根据传递参数的名称找到相应的方法，比如，参数名称为name，则自动找到setName方法。

原则：使用JavaBean自动设置内容时，一定要让参数名称与Bean中的属性名称一致，这样通过Java的命名规范，可以达到统一 
当需要指定某个属性内容时候，可以在property中指定参数

&#60;jsp:setProperty name=&#34;sb&#34; property=&#34;*&#34;/&#62; ：自动匹配，开发中常采用这种做法 
&#60;jsp:setProperty name=&#34;sb&#34; property=&#34;name&#34;/&#62;：可以根据自己的需要设置需要的属性值 
&#60;jsp:setProperty name=&#34;sb&#34; property=&#34;name&#34; param=&#34;password&#34;/&#62;：可以根据自己的需要，任意选择传递参数 
&#60;jsp:setProperty name=&#34;sb&#34; property=&#34;name&#34; value=&#34;password&#34;/&#62;：根据用户的需要自己设置参数的值

如果输入的值是一个变量，则需要表达式输出 





JavaBean取得属性的方法：

&#60;jsp:getProperty name=&#34;sb&#34; property=&#34;name&#34;/&#62;取得属性没有自动匹配 

使用JavaBean的setProperty方法可以自动将传递过来的只有数字的字符串变为整形，之后将内容赋值给具体的属性&#160; &#8211;&#62;智能
JavaBean的属性范围：

page范围：属性只在当前页有效，如果跳转其他页面，则需要重新实例化

适用于：JSP页面操作资源时使用 


request范围：属性只保存在一次服务器跳转中，前提是使用&#60;jsp:forward&#62;跳转才行 
session范围：属性保存在一次会话中，可以任意方式连接其他页面，则此对象只实例化一次 
application范围：属性公有，此对象在整个服务器上只实例化一次。尽量少用因为application会占用资源 

Related Posts2008-03-01 -- JavaBean语法(上) (0)2008-01-16 -- JSP基本语法C&#8211;JSP内置对象 (0)2008-04-02 -- Servlet程序设计 (0)2008-03-01 -- (九)JDBC操作技术 (0)2008-02-13 -- (八)JSP基本语法G&#8211;其他对象 (0)]]></description>
			<content:encoded><![CDATA[<p><strong>为什么能通过property=&quot;*&quot;的方式，将内容设置到Bean中，其根本原因是使用了Java的反射机制，根据传递参数的名称找到相应的方法</strong>，比如，参数名称为name，则自动找到setName方法。</p>
<ul>
<li>原则：<strong>使用JavaBean自动设置内容时，一定要让参数名称与Bean中的属性名称一致，这样通过Java的命名规范，可以达到统一</strong> </li>
<li>当需要指定某个属性内容时候，可以在property中指定参数
<ul>
<li><strong>&lt;jsp:setProperty name=&quot;sb&quot; property=&quot;*&quot;/&gt;</strong> <strong>：</strong>自动匹配，开发中常采用这种做法 </li>
<li>&lt;<strong>jsp:setProperty name=&quot;sb&quot; property=&quot;name&quot;/&gt;：</strong>可以根据自己的需要设置需要的属性值 </li>
<li><strong>&lt;jsp:setProperty name=&quot;sb&quot; property=&quot;name&quot; param=&quot;password&quot;/&gt;：</strong>可以根据自己的需要，任意选择传递参数 </li>
<li><strong>&lt;jsp:setProperty name=&quot;sb&quot; property=&quot;name&quot; value=&quot;password&quot;/&gt;：</strong>根据用户的需要自己设置参数的值
<ul>
<li><strong>如果输入的值是一个变量，则需要表达式输出</strong> </li>
</ul>
</li>
</ul>
</li>
</ul>
<p>JavaBean取得属性的方法：</p>
<ul>
<li><strong>&lt;jsp:getProperty name=&quot;sb&quot; property=&quot;name&quot;/&gt;取得属性没有自动匹配</strong> </li>
</ul>
<p><strong>使用JavaBean的setProperty方法可以自动将传递过来的只有数字的字符串变为整形，之后将内容赋值给具体的属性&#160; &#8211;&gt;智能</strong></p>
<p>JavaBean的属性范围：</p>
<ul>
<li><strong>page范围：属性只在当前页有效，如果跳转其他页面，则需要重新实例化</strong>
<ul>
<li><strong>适用于：JSP页面操作资源时使用</strong> </li>
</ul>
</li>
<li>request范围：属性只保存在一次服务器跳转中，前提是使用&lt;jsp:forward&gt;跳转才行 </li>
<li><strong>session范围：属性保存在一次会话中，可以任意方式连接其他页面，则此对象只实例化一次</strong> </li>
<li>application范围：属性公有，此对象在整个服务器上只实例化一次。尽量少用因为application会占用资源 </li>
</ul>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F03%2Fjavabean-syntax-b.html&title=JavaBean%E8%AF%AD%E6%B3%95%28%E4%B8%8B%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-03-01 -- <a href="http://www.hialex.net/2008/03/javabean-syntax-a.html" title="JavaBean语法(上)">JavaBean语法(上)</a> (0)</li><li>2008-01-16 -- <a href="http://www.hialex.net/2008/01/jsp-syntax-c.html" title="JSP基本语法C&#8211;JSP内置对象">JSP基本语法C&#8211;JSP内置对象</a> (0)</li><li>2008-04-02 -- <a href="http://www.hialex.net/2008/04/servlet-note.html" title="Servlet程序设计">Servlet程序设计</a> (0)</li><li>2008-03-01 -- <a href="http://www.hialex.net/2008/03/usage-of-jdbc.html" title="(九)JDBC操作技术">(九)JDBC操作技术</a> (0)</li><li>2008-02-13 -- <a href="http://www.hialex.net/2008/02/jsp-syntax-g.html" title="(八)JSP基本语法G&#8211;其他对象">(八)JSP基本语法G&#8211;其他对象</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/03/javabean-syntax-b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(九)JDBC操作技术</title>
		<link>http://www.hialex.net/2008/03/usage-of-jdbc.html</link>
		<comments>http://www.hialex.net/2008/03/usage-of-jdbc.html#comments</comments>
		<pubDate>Sat, 01 Mar 2008 08:42:57 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[odbc]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/03/usage-of-jdbc.html</guid>
		<description><![CDATA[动态WEB的最大特点：可以操作数据库

JSP是通过JDBC(Java DataBase Connectivity)技术操作数据库的 
使用数据库之后可以发现，对数据的处理由数据库管理系统(DBMS)去完成，而程序只是将需要的数据进行显示 

JDBC本身是JAVA连接数据库的一个标准，是JAVA操作数据库的方法，是SUN提供的，而微软操作数据库的方法是ODBC
JDBC 1.0：

分类：

JDBC-ODBC Bridge(JDBC-ODBC桥接方式)：因为性能较差,在开发中不采用 
JDBC-native Driver Bridge：驱动有个数据库生产厂家提供 
JDBC-network Bridge 


JDBC-ODBC：

JDBC-ODBC是在JDK中由SUN本身开发出来的一套数据访问操作，在JDBC-ODBC桥接中它的各种操作API都是最新的，但是性能不高 
ODBC的基本原理

通过一个数据源名称&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#62;&#160; 数据库 
为数据库起了一个别名&#160;&#160;&#160;&#160; &#8212;&#62;&#160; 程序通过别名访问数据库 
即：程序只认别名不认具体的数据库 




常用接口：

使用java.sql包 
常用接口：&#8211;DriverManager&#160;&#160;&#160; &#8211;Connection&#160;&#160; &#8211;Statement&#160;&#160; &#8211;PreparedStatement&#160;&#160;&#160;&#160; &#8211;ResultSet 


**利用JDBC开发WEB数据库应用框架 

装入JDBC驱动程序 
创建与数据库的连接 
创建语句对象 
利用语句对象执行SQL语句得到结果 
处理结果 
JDBC应用结束，关闭各项操作 

 
**JDBC具体使用&#8211;各条对应上面框架各条 

通过Class.forName(&#34;XX&#34;);&#160; eg.Class.forName（&#34;sun.jdbc.odbc.JdbcOdbcDriver&#34;); 
Connection conn = DriverManager.getConnection(DBURL,USER,PASSWORD); 
创建对象

使用statement对象：Statement stmt = conn.createStatement(); 
使用PreparedStatement对象：PreparedStatement pstmt = conn.PrepareStatement(); 


执行SQL语句返回ResultSet实例化对象

查询数据库：stmt.ececuteQuery(sql); 

包括SELECT 


更新数据库：stmt.ececuteUpdate(sql); 

包括DELETE、INSERT、UPDATE 




结果集ResultSet的处理 

使用getXXX();方法可以得到不同类型的结果值(参数可以是字段或编号) [...]]]></description>
			<content:encoded><![CDATA[<p><strong>动态WEB的最大特点：可以操作数据库</strong></p>
<ul>
<li><strong>JSP是通过JDBC(Java DataBase Connectivity)技术操作数据库的</strong> </li>
<li>使用数据库之后可以发现，对数据的处理由数据库管理系统(DBMS)去完成，而程序只是将需要的数据进行显示 </li>
</ul>
<p><strong>JDBC本身是JAVA连接数据库的一个标准</strong>，是JAVA操作数据库的方法，是SUN提供的，而微软操作数据库的方法是ODBC</p>
<p>JDBC 1.0：</p>
<ul>
<li>分类：
<ol>
<li><strong>JDBC-ODBC Bridge(JDBC-ODBC桥接方式)：因为性能较差,在开发中不采用 </strong></li>
<li><strong>JDBC-native Driver Bridge：驱动有个数据库生产厂家提供 </strong></li>
<li><strong>JDBC-network Bridge</strong> </li>
</ol>
</li>
<li>JDBC-ODBC：
<ul>
<li>JDBC-ODBC是在JDK中由SUN本身开发出来的一套数据访问操作，在JDBC-ODBC桥接中它的各种操作API都是最新的，但是性能不高 </li>
<li><strong>ODBC的基本原理</strong>
<ul>
<li><strong>通过一个数据源名称&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&gt;&#160; 数据库 </strong></li>
<li><strong>为数据库起了一个别名&#160;&#160;&#160;&#160; &#8212;&gt;&#160; 程序通过别名访问数据库 </strong></li>
<li><strong>即：程序只认别名不认具体的数据库</strong> </li>
</ul>
</li>
</ul>
</li>
<li>常用接口：
<ol>
<li><strong>使用java.sql包</strong> </li>
<li>常用接口：&#8211;DriverManager&#160;&#160;&#160; &#8211;Connection&#160;&#160; &#8211;Statement&#160;&#160; &#8211;PreparedStatement&#160;&#160;&#160;&#160; &#8211;ResultSet </li>
</ol>
</li>
<li><strong>**利用JDBC开发WEB数据库应用框架 </strong>
<ol>
<li><strong>装入JDBC驱动程序 </strong></li>
<li><strong>创建与数据库的连接 </strong></li>
<li><strong>创建语句对象 </strong></li>
<li><strong>利用语句对象执行SQL语句得到结果 </strong></li>
<li><strong>处理结果 </strong></li>
<li><strong>JDBC应用结束，关闭各项操作 </strong></li>
</ol>
<p> <span id="more-57"></span></li>
<li><strong>**JDBC具体使用&#8211;各条对应上面框架各条 </strong>
<ol>
<li><strong>通过Class.forName(&quot;XX&quot;);</strong>&#160; eg.Class.forName（&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;); </li>
<li><strong>Connection conn = DriverManager.getConnection(DBURL,USER,PASSWORD); </strong></li>
<li><strong>创建对象</strong>
<ul>
<li><strong>使用statement对象：</strong>Statement stmt = conn.createStatement(); </li>
<li><strong>使用PreparedStatement对象：</strong>PreparedStatement pstmt = conn.PrepareStatement(); </li>
</ul>
</li>
<li><strong>执行SQL语句返回ResultSet实例化对象</strong>
<ul>
<li><strong>查询数据库：stmt.ececuteQuery(sql); </strong>
<ul>
<li>包括SELECT </li>
</ul>
</li>
<li><strong>更新数据库：stmt.ececuteUpdate(sql); </strong>
<ul>
<li>包括DELETE、INSERT、UPDATE </li>
</ul>
</li>
</ul>
</li>
<li><strong>结果集ResultSet的处理 </strong>
<ul>
<li>使用getXXX();方法可以得到不同类型的结果值(参数可以是字段或编号) </li>
<li>next()方法可以使游标移动到下一条记录 </li>
</ul>
</li>
<li><strong>数据库在每次使用之后都必要关闭，关闭数据库操作的顺序与打开数据库操作的顺序相反 </strong></li>
</ol>
</li>
<li>PreparedStatement&#8211;Statement的子接口
<ul>
<li>引入原因：当Statement所需要的SQL语句中包含&#8220;<strong>&#8216;</strong>&#8221;，会造成数据输入的不正确 </li>
<li>建议：<strong>在开发中尽量不去使用Statement对象，而去使用PreparedStatement操作数据库 </strong></li>
</ul>
</li>
</ul>
<p>JDBC 2.0新功能：</p>
<ol>
<li><strong>ResultSet对象中的光标可以自由上下滚动</strong>
<ul>
<li>TYPE_FORWORD_ONLY:与JDBC1.0没有区别 </li>
<li>TYPE_SCROLL_SENSITIVE:可以上下滚动，不能取得结果集改变的值 </li>
<li>TYPE_SCROLL_INSENSITIVE:可以上下滚动，能够取得结果集改变的值 </li>
</ul>
</li>
<li><strong>直接使用结果集操作</strong>
<ol>
<li>更新数据：rs.updateRow(); </li>
<li>删除数据：rs.deleteRow(); </li>
</ol>
</li>
<li><strong>批处理（Batch）</strong>
<ol>
<li>JDBC2.0提供批处理操作，可以让一个Statement同时执行多个SQL语句，以提高性能 </li>
<li><strong>事务处理</strong>
<ul>
<li><strong>事务：在数据库批处理操作时，要么全部执行成功，要么全部失败</strong> </li>
<li><strong>这样做可以保证数据的完整性</strong><a href="http://www.hialex.net/images/post/JDBC_E9EC/20080219001649853.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="20080219001649853" src="http://www.hialex.net/images/post/JDBC_E9EC/20080219001649853_thumb.jpg" width="454" border="0" /></a> </li>
</ul>
</li>
</ol>
</li>
</ol>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F03%2Fusage-of-jdbc.html&title=%28%E4%B9%9D%29JDBC%E6%93%8D%E4%BD%9C%E6%8A%80%E6%9C%AF" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-04-02 -- <a href="http://www.hialex.net/2008/04/servlet-note.html" title="Servlet程序设计">Servlet程序设计</a> (0)</li><li>2008-03-15 -- <a href="http://www.hialex.net/2008/03/javabean-syntax-b.html" title="JavaBean语法(下)">JavaBean语法(下)</a> (0)</li><li>2008-03-01 -- <a href="http://www.hialex.net/2008/03/javabean-syntax-a.html" title="JavaBean语法(上)">JavaBean语法(上)</a> (0)</li><li>2008-02-19 -- <a href="http://www.hialex.net/2008/02/jdbc-link-to-mysql.html" title="JDBC连接Mysql数据库">JDBC连接Mysql数据库</a> (0)</li><li>2008-02-13 -- <a href="http://www.hialex.net/2008/02/jsp-syntax-g.html" title="(八)JSP基本语法G&#8211;其他对象">(八)JSP基本语法G&#8211;其他对象</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/03/usage-of-jdbc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
