﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小阁飞空 一池碧映垂杨路 绛云深处 听尽潇潇雨-文章分类-Database</title><link>http://www.blogjava.net/xiaoxiaoyupku/category/4855.html</link><description>At times , people will simply not come through for you in the way you need.Forgive them and move on.</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:37:14 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:37:14 GMT</pubDate><ttl>60</ttl><item><title>触发器与存储过程</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/88670.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Tue, 19 Dec 2006 00:57:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/88670.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/88670.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/88670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/88670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/88670.html</trackback:ping><description><![CDATA[
		<strong>
				<em>--触发器如何调用存储过程</em>
		</strong>
		<br />create trigger test on table<br />for insert<br />as<br />exec 存储过程名<br />go 
<table style="MARGIN: 10px 7px 3px 0px" cellspacing="0" cellpadding="0" align="right" border="0"><tbody><tr><td><span id="ad_qqread_mid_big"></span></td></tr></tbody></table><p>--存储过程如何调用触发器 <br />create proc test<br />as<br />update table set ...<br />insert table select ...<br />delete table ...<br /><br /></p><table cellspacing="0" cellpadding="0" width="575" border="0"><tbody><tr><td height="3"></td></tr><tr><td valign="bottom" align="right"><font color="#ff0000"></font></td></tr><tr><td class="height170"><font class="f14" id="zoom"><span id="text999"><p>--我们有一个table如下，需要跟踪修改对该表的insert/update/delete操作：<br /><br />create table testMonitor(c1 int, c2 char(10))<br /><br /><br />--创建的辅助表如下：<br /><br />create table tempLog_testMonitor(<br />rowID bigint identity(1,1),<br />hostname nchar(128),<br />program_name nchar(128),<br />nt_domain nchar(128),<br />nt_username nchar(128),<br />net_address nchar(12),<br />loginame nchar(128),<br />login_time datetime,<br />EventType nvarchar(30), <br />parameters int, <br />EventInfo nvarchar(255)<br />)<br /><br />--创建的trigger如下：<br /><br />create trigger trg_testMonitor<br />on testMonitor<br />for insert,update,delete<br />as<br />begin<br /><br />            declare @hostname nchar(128)<br />            declare @program_name nchar(128) <br />            declare @nt_domain nchar(128) <br />            declare @nt_username nchar(128) <br />            declare @net_address nchar(12)<br />            declare @loginame nchar(128)<br />            declare @login_time datetime<br />            declare @rowID bigint<br /><br />            <br />            insert into tempLog_testMonitor(EventType,parameters,EventInfo)<br />            exec ('dbcc inputbuffer(@@spid)')<br />            select @rowID = scope_identity()                  <br />            select  @hostname = hostname,<br />                        @program_name = program_name,<br />                        @nt_domain = nt_domain,<br />                        @nt_username = nt_username,<br />                        @net_address = net_address,<br />                        @loginame = loginame,<br />                        @login_time = login_time<br />            from master..sysprocesses where spid = @@spid<br /><br />            update tempLog_testMonitor set <br />            hostname = @hostname,<br />            program_name = @program_name,<br />            nt_domain = @nt_domain,<br />            nt_username = @nt_username,<br />            net_address = @net_address,<br />            loginame = @loginame,<br />            login_time = @login_time<br />            where rowID = @rowID<br />end<br /><br />--如果我们执行如下的语句：<br /><br />insert into testmonitor values(1,'aaa')<br />update testmonitor set c2 = 'bbb'<br />delete from testmonitor<br /><br />--您再查询辅助表，就能看到对表修改的相关信息：<br /><br />select * from tempLog_testMonitor</p></span></font></td></tr></tbody></table><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/88670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-12-19 08:57 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/88670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Troubleshooting Problems With the Informix Database</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/82422.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 20 Nov 2006 19:18:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/82422.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/82422.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/82422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/82422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/82422.html</trackback:ping><description><![CDATA[
		<h2>
				<a name="MARKER-9-22">
				</a>Troubleshooting Problems With the <a name="MARKER-2-23"></a>Informix Database</h2>
		<p>Problems with the <a name="MARKER-2-24"></a>database usually result in messages being written to the Informix message log, which is stored in <i>/usr/sgi/informix/online.log</i>. You should monitor this file periodically. In addition, if problems with the database occur, view this message log for relevant information. 
</p>
		<p>
		</p>
		<p>This section describes how to troubleshoot problems with the Informix database. The following topics are discussed: 
</p>
		<p>
		</p>
		<ul>
				<p>
				</p>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#MARKER-9-25">"Running Out of Space"</a>
						<p>
						</p>
				</li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#MARKER-9-26">"Running Out of Locks"</a>
						<p>
						</p>
				</li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#MARKER-9-30">"Shared Memory Creation Error"</a>
						<p>
						</p>
				</li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#MARKER-9-33">"posuser Error Message"</a>
						<p>
						</p>
				</li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#MARKER-9-36">"Cannot Connect Error Message"</a>
				</li>
		</ul>
		<p>You can find additional information about Informix in these sections: 
</p>
		<p>
		</p>
		<ul>
				<p>
				</p>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-52.html#MARKER-9-91">"About the Informix Message Log"</a>. 
<p></p></li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-134.html#MARKER-9-12">"Informix Configuration for MediaBase"</a>. 
<p></p></li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-29.html#MARKER-9-76">"Starting and Stopping Services on the WebFORCE MediaBase Server"</a>. 
<p></p></li>
				<li>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-96.html#MARKER-9-360">"Backing Up and Recovering the Informix Database"</a>. </li>
		</ul>
		<a name="HEADING62-13">
		</a>
		<h3>
				<a name="MARKER-9-25">
				</a>Running Out of Space</h3>
		<p>If the Informix database runs out of space, you will see a message in the Informix log (<i>/usr/sgi/informix/online.log</i>) that is similar to the following: 
</p>
		<p>
		</p>
		<pre>SQLSTATE IX000: ISAM error: no free disk space
</pre>
		<p>By default, the Informix database information is stored in <i>/usr/sgi/informix/data/root_chunk</i>. To add more space to the database without bringing down MediaBase or the Informix server: 
</p>
		<p>
		</p>
		<ol>
				<p>
				</p>
				<li>Log into the host as informix by entering the following: 
<p><code># <code><b>su - informix</b></code></code></p><p></p></li>
				<li>Make sure there is enough space on the filesystem where the extension to <i>root_chunk</i> will be located. (In this procedure, the name of the space that will be added is called <i>extend_root_chunk</i>.) 
<p></p></li>
				<li>Touch the file <i>extend_root_chunk</i> by entering the following: 
<p><code># <code><b>touch extend_root_chunk</b></code></code></p><p></p></li>
				<li>Make sure the file is owned by informix by entering the following: 
<p><code># <code><b>chown informix.informix extend_root_chunk</b></code></code></p><p></p></li>
				<li>Allow the <i>extend_root_chunk</i> file to be read and written to by Informix, by entering the following: 
<p><code># <code><b>chmod 660 extend_root_chunk</b></code></code></p><p></p></li>
				<li>Add a 200 megabyte extension named <i>extend_root_chunk</i> to the database by entering the following: 
<p><code># <code><b>setenv INFORMIXSERVER odlshm</b></code></code></p><p><code># <code><b>setenv INFORMIXDIR /usr/sgi/informix</b></code></code></p><p><code># <code><b>cd /usr/sgi/informix/bin</b></code></code></p><p><code># <code><b>onspaces -a rootdbs -p <i>absolutePath -o 0 -s 200000</i></b></code></code></p><p><i>absolutePath</i> is the absolute pathname of the location of <i>extend_root_chunk</i>, for example, <i>/usr/sgi/informix/data/extend_root_chunk</i>. 
</p><p></p><p>Wait until you see messages similar to the following: 
</p><p></p><p><code>Adding chunk...</code></p><p><code>Successfully Added chunk...</code></p><p><code>#</code></p><p>When you see these messages, the Informix server knows it has the additional space and will use it automatically. 
</p><p></p></li>
		</ol>
		<a name="HEADING62-38">
		</a>
		<h3>
				<a name="MARKER-9-26">
				</a>Running Out of Locks</h3>
		<p>If the Informix database runs out of locks, you will see many messages in the Informix log (<i>/usr/sgi/informix/online.log</i>) similar to the following: 
</p>
		<p>
		</p>
		<pre>19:58:09  Lock table overflow - user id 55555, session id 1691
</pre>
		<p>
				<b>Note: </b>One or a few messages like this in the log are normal. A problem exists only if you see this message many times. 
</p>
		<p>To recover from this problem: 
</p>
		<p>
		</p>
		<ol>
				<p>
				</p>
				<li>Log into the server host as root, or become the superuser by entering the <i>su</i> command. 
<p></p></li>
				<li>Stop MediaBase and Informix by entering the following: 
<p><code># <code><b>/etc/init.d/mediabase stop</b></code></code></p><p><code># <code><b>/etc/init.d/informix stop</b></code></code></p><p>If Informix does not stop, you can stop it by entering the following: 
</p><p></p><p><code># <code><b>killall oninit</b></code></code></p><p></p></li>
				<li>
						<a name="MARKER-9-27">
						</a>Determine whether any shared memory segments exist by entering the following: 
<p><code># <code><b>ipcs -ma</b></code></code></p><p>If any <a name="MARKER-2-32"></a>shared memory segments belong to Informix, you will see output that looks similar to the following: 
</p><p></p><p><code>IPC status from /dev/kmem as of Tue Jul 23 21:21:04 1996</code></p><p><code>T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME </code></p><p><code>Shared Memory:</code></p><p><code>m 1202 0x52564801 --rw-rw---- root informix root informix 12 5054464 16912 19696 21:21:00 21:21:01 20:23:00</code></p><p><code>m 1203 0x52564802 --rw-rw---- root informix root informix 12 8192000 16912 19696 21:21:00 21:21:01 20:23:00</code></p><p><code>m 1204 0x52564803 --rw-rw-rw- root informix root informix 14 622592 16912 19696 21:21:00 21:21:01 20:23:10</code></p><p><code>m 1206 0x52564804 --rw-rw---- root informix root informix 12 8388608 16912 19696 21:21:00 21:21:01 20:41:38</code></p><p></p></li>
				<li>If any segments belong to Informix, as seen in step <a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#MARKER-9-27">3</a>, remove all the segments, one at a time, by entering the following for each segment: 
<p><code># <code><b>ipcrm -m <i>SHARED_MEMORY_SEGMENT_ID</i></b></code></code></p><p>For example, the following removes the segment whose shared memory ID is 1202: 
</p><p></p><p><code># <code><b>ipcrm -m 1202</b></code></code></p><p></p></li>
				<li>Start Informix by entering the following command: 
<p><code># <code><b>/etc/init.d/informix start</b></code></code></p><p></p></li>
				<li>
						<a name="MARKER-9-29">
						</a>Start MediaBase by entering the following command: 
<p><code>#<code><b> /etc/init.d/mediabase start</b></code></code></p></li>
		</ol>
		<a name="HEADING62-68">
		</a>
		<h3>
				<a name="MARKER-9-30">
				</a>Shared Memory Creation Error</h3>
		<p>You may see the following message when initializing the database: 
</p>
		<p>
		</p>
		<pre>oninit: Fatal error in <a name="MARKER-2-31"></a>shared memory creation
</pre>
		<p>Two conditions can cause this error: 
</p>
		<p>
		</p>
		<ul>
				<p>
				</p>
				<li>Informix is already running when you try to initialize the database or start the Informix server. If this is the case you can ignore the message. 
<p></p></li>
				<li>Memory segments were not cleaned up after an Informix crash or other failure. If this is the case, you must clean up the shared memory segments. </li>
		</ul>
		<p>To recover from the error condition: 
</p>
		<p>
		</p>
		<ol>
				<p>
				</p>
				<li>Use one of the following commands to check if Informix is running: 
<ul><p></p><li><code><b># ps -ef | grep oninit</b></code><p>If Informix is running, you will see many processes. 
</p><p></p><p></p></li><li><code><b>/usr/mbase/sbin/chkserveron</b></code><p>If Informix is running, you will see the message <code>ODL server ready</code>. 
</p><p></p></li></ul><p></p></li>
				<li>If the server is not running: 
<ul><p></p><li>Determine whether any shared memory segments exist by entering the following: 
<p><code># <code><b>ipcs -ma</b></code></code></p><p>If any <a name="MARKER-2-32"></a>shared memory segments belong to Informix, you see output that looks similar to the following: 
</p><p></p><p><code>IPC status from /dev/kmem as of Tue Jul 23 21:21:04 1996</code></p><p><code>T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME </code></p><p><code>Shared Memory:</code></p><p><code>m 1202 0x52564801 --rw-rw---- root informix root informix 12 5054464 16912 19696 21:21:00 21:21:01 20:23:00</code></p><p><code>m 1203 0x52564802 --rw-rw---- root informix root informix 12 8192000 16912 19696 21:21:00 21:21:01 20:23:00</code></p><p><code>m 1204 0x52564803 --rw-rw-rw- root informix root informix 14 622592 16912 19696 21:21:00 21:21:01 20:23:10</code></p><p><code>m 1206 0x52564804 --rw-rw---- root informix root informix 12 8388608 16912 19696 21:21:00 21:21:01 20:41:38</code></p><p></p></li><li>If any segments belong to Informix, as seen above, remove all the segments, one at a time, by entering the following for each segment: 
<p><code># <code><b>ipcrm -m <i>SHARED_MEMORY_SEGMENT_ID</i></b></code></code></p><p>For example, the following removes the segment whose shared memory ID is 1202: 
</p><p></p><p><code># <code><b>ipcrm -m 1202</b></code></code></p></li></ul><p></p></li>
				<li>Restart or reinitialize the database. </li>
		</ol>
		<a name="HEADING62-96">
		</a>
		<h3>
				<a name="MARKER-9-33">
				</a>posuser Error Message</h3>
		<p>If you see a message that <code>posuser</code> is not found, the MediaBase system is probably using a shadow password file. To fix this, use the IRIX <i>pwconv</i> utility to install and update <i>/etc/shadow</i> with the information <a name="MARKER-2-34"></a>in <i>/etc/passwd</i>.<a name="MARKER-2-35"></a></p>
		<p>
				<a name="HEADING62-98">
				</a>
		</p>
		<h3>
				<a name="MARKER-9-36">
				</a>Cannot Connect Error Message</h3>
		<p>If you see a message such as <code>cannot open</code> or <code>cannot connect</code>, suspect: 
</p>
		<p>
		</p>
		<ul>
				<p>
				</p>
				<li>the database is not correctly configured or set up 
<p></p></li>
				<li>a corrupt database file </li>
		</ul>
		<p>Make sure to configure the event logging threshold to debug. 
</p>
		<p>
		</p>
		<hr />
		<dl>
				<dt>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#HEADING62-13">
								<b>
								</b>Running Out of Space</a>
				</dt>
				<dd>
				</dd>
				<dt>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#HEADING62-38">
								<b>
								</b>Running Out of Locks</a>
				</dt>
				<dd>
				</dd>
				<dt>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#HEADING62-68">
								<b>
								</b>Shared Memory Creation Error</a>
				</dt>
				<dd>
				</dd>
				<dt>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#HEADING62-96">
								<b>
								</b>posuser Error Message</a>
				</dt>
				<dd>
				</dd>
				<dt>
						<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-62.html#HEADING62-98">
								<b>
								</b>Cannot Connect Error Message</a>
				</dt>
				<dd>
				</dd>
		</dl>
		<hr />
		<a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-63.html">Next</a> | <a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-61.html">Prev</a> | <a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-59.html">Up</a> | <a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-1.html">Top</a> | <a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-3.html">Contents</a> | <a href="http://acvideo.haifa.ac.il/mbase/documentation/MBase_AG/MBase_AG-136.html">Index</a><br /><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/82422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-11-21 03:18 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/82422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>one solution of informix shared memory error  == but I am not sure about this</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/81893.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Fri, 17 Nov 2006 23:38:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/81893.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/81893.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/81893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/81893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/81893.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<table>
				<tbody>
						<tr>
								<td class="tgml" nd="3">I'm a programmer, but I need to install <a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.tek-tips.com/viewthread.cfm?qid=875593#" target="_blank" itxtdid="2862730">IDS</a> 7.31<br /><br />I have one <a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.tek-tips.com/viewthread.cfm?qid=875593#" target="_blank" itxtdid="2934523">server</a> compaq (<a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.tek-tips.com/viewthread.cfm?qid=875593#" target="_blank" itxtdid="2623064">intel pentium</a>) with Unixware 7.1.1<br /><br />I read the documentation but my problem continues.<br /><br />When I start the <a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.tek-tips.com/viewthread.cfm?qid=875593#" target="_blank" itxtdid="2934766">Database server</a> with the 'oninit -i' instruction, I see the next error:<br /><br />"oninit: Fatal error in shared memory creation"<br /><br />Somebody help me, please¡<br /><br />Sorry for my english.</td>
						</tr>
				</tbody>
		</table>
		<b>
				<font color="red" nd="4">
				</font>
		</b>
		<p>
		</p>
		<table class="post">
				<tbody>
						<tr bgcolor="#dedeff">
								<td>
										<table cellspacing="3" cellpadding="3">
												<tbody>
														<tr>
																<td class="handle" style="PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px" nd="5">
																		<img alt="Helpful Member!" src="http://www.tek-tips.com/images/star.gif" />
																		<a href="http://www.tek-tips.com/userinfo.cfm?member=appi">appi</a> (IS/IT--Management)</td>
																<td class="date" style="PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px">
																		<div title="Current Server Time: 17 Nov 06 18:32" nd="6">8 Jul 04 4:00 </div>
																</td>
														</tr>
												</tbody>
										</table>
										<table>
												<tbody>
														<tr>
																<td class="tgml" nd="7">Hi,<br /><br />take a look in the ONCONFIG which logfile you've specified.<br />In that logfile maybe an error during startup is reported.<br />Paramater in Onconfig is MSGPATH<br />Pls report the error over there and we may help you</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<table class="post">
				<tbody>
						<tr bgcolor="#f6f6f6">
								<td>
										<table cellspacing="3" cellpadding="3">
												<tbody>
														<tr>
																<td class="handle" style="PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px" nd="8">
																		<a href="http://www.tek-tips.com/userinfo.cfm?member=coquito65">coquito65</a> (Programmer)</td>
																<td class="date" style="PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px">
																		<div title="Current Server Time: 17 Nov 06 18:32" nd="9">8 Jul 04 12:58 </div>
																</td>
														</tr>
												</tbody>
										</table>
										<table>
												<tbody>
														<tr>
																<td class="tgml" nd="10">OK.<br /><br />This is the error message:<br /><br />11:50:11  shmget: [EEXIST][17]: key 52574801: shared memory already exists<br />11:50:11  mt_shm_init: can't create resident segment<br /><br />Thanks appi ¡</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<table class="post">
				<tbody>
						<tr bgcolor="#dedeff">
								<td>
										<table cellspacing="3" cellpadding="3">
												<tbody>
														<tr>
																<td class="handle" style="PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px" nd="11">
																		<a href="http://www.tek-tips.com/userinfo.cfm?member=ids2000">ids2000</a> (TechnicalUser)</td>
																<td class="date" style="PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px">
																		<div title="Current Server Time: 17 Nov 06 18:32" nd="12">3 Aug 04 10:26 </div>
																</td>
														</tr>
												</tbody>
										</table>
										<table>
												<tbody>
														<tr>
																<td class="tgml" nd="13">The problem is that probably you have tried to bring the engine up too many times, and so has locked some<br />shared memory segments on your OS.<br />Try this:<br /><br />ipcs -m|grep informix<br /><br />See if there is any memory segments there, if so, try this:<br /><br />ipcrm -m &lt;shmid&gt;<br />where &lt;shmid&gt; is the number on the second column.<br /><br />After that, cut and paste the output from onstat - 
<p nd="14">FFO<br />"The only way of knowing is to understand"</p></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/81893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-11-18 07:38 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/81893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>how to set right ownship and permissions for files in informix ?  ----- need to be answered</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/81891.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Fri, 17 Nov 2006 21:20:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/81891.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/81891.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/81891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/81891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/81891.html</trackback:ping><description><![CDATA[
		<p>for now, I only know there are two users in informix, namely root and informix. root is more powerful than informix. when you install your IDS you need to use root account, and all the files like onconfig file, sqlhosts file, dbspaces trunk files, data bakup file, logic log bakup file, alarm program and so on, all these files need to have informix group and informix user ownship, and should have no more nor less 660 permission. but I am now still confusing about when should access using root account and when should use informix account, and how to set up group and users if no use ISA?</p>
<img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/81891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-11-18 05:20 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/81891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句插入的数据中含有单引号怎么办？</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/45078.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 08 May 2006 12:27:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/45078.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/45078.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/45078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/45078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/45078.html</trackback:ping><description><![CDATA[   sql中，insert into yourTable(f1,f2) values(100,'abc')字符串数据是用单引号包在外面的，如果插入的数据中包含单引号，就需要处理，你可以将单引号替换成两个单引号，在sql中连续两个单引号就表示一个单引号字符，例如insert into yourTable(f1,f2) values(100,'ab''c')表示插入新记录f2字段为ab'c 使用函数replace可以实现这个功能： replace(yourStr,"'","''")　 <img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/45078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-05-08 20:27 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/45078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[数据库]oracle 日期类型字段的操作(转载自http://blogger.org.cn/blog/more.asp?name=dashee&amp;id=6452)</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/42800.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 24 Apr 2006 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/42800.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/42800.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/42800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/42800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/42800.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="1" cellpadding="3" width="98%" bgcolor="#cccccc" border="0">
				<tbody>
						<tr bgcolor="#f8f8f8">
								<td>
										<p>
												<a href="http://blogger.org.cn/blog/blog.asp?name=dashee" target="_blank">ideation</a> 发表于 2005-6-8 16:26:22 </p>
								</td>
						</tr>
						<tr bgcolor="#ffffff">
								<td height="0">
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<p>在java对oracle的操作中，日期字段是很头疼的事情，其实仔细研究一下也并不难掌握。</p>
																		<p>举个例子来说明：</p>
																		<p>表 book  中有name varchar2(20)//书籍名称,buydate Date //购买日期 两个字段。</p>
																		<p>已经创建了数据库连接Connection conn;</p>
																		<p>方法一、使用java.sql.Date实现比较简单的yyyy-mm-dd格式日期。</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">java.sql.Date不支持时间格式。切记不要使用new java.sql.Date(int year,int month,int date),因为还要处理时间差问题。</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,?)");</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">java.sql.Date buydate=java.sql.Date.valueOf("2005-06-08");<br />pstmt.setString(1, "Java编程思想");<br />pstmt.setDate(2,buydate );<br />pstmt.execute();</p>
																		<p>方法二、使用java.sql.Timestamp,同上不使用new Timestamp(....)</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,?)");</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">java.sql.Timestamp buydate=java.sql.Timestamp.valueOf("2004-06-08 05:33:99");<br />pstmt.setString(1, "Java编程思想");<br />pstmt.setTimestamp(2,buydate );<br />pstmt.execute();</p>
																		<p>方法三、使用oracle 的to_date内置函数</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,to_date(?, 'yyyy-mm-dd hh24:mi:ss')");</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">String buydate="2004-06-08 05:33:99";<br />pstmt.setString(1, "Java编程思想");<br />pstmt.setString(2,buydate );<br />pstmt.execute();</p>
																		<p dir="ltr" style="MARGIN-RIGHT: 0px">附:oracle日期格式参数 含义说明  <br />d: 一周中的星期几  <br />day: 天的名字，使用空格填充到9个字符  <br />dd: 月中的第几天  <br />ddd: 年中的第几天  <br />dy: 天的简写名  <br />iw: ISO标准的年中的第几周  <br />iyyy: ISO标准的四位年份  <br />yyyy: 四位年份  <br />yyy,yy,y: 年份的最后三位，两位，一位  <br />hh: 小时，按12小时计  <br />hh24: 小时，按24小时计  <br />mi: 分  <br />ss: 秒  <br />mm: 月  <br />mon: 月份的简写  <br />month: 月份的全名  <br />w: 该月的第几个星期  <br />ww: 年中的第几个星期<br /><br />到此刻，你应该烦恼已消，轻松了很多吧。</p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/42800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-04-24 11:20 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/42800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle与java中date类型（汇总）待续</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/42736.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Sun, 23 Apr 2006 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/42736.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/42736.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/42736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/42736.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/42736.html</trackback:ping><description><![CDATA[Oracle的解惑一二to_date()与24小时制表示法及mm分钟的显示：<br />一、在使用Oracle的to_date函数来做日期转换时，很多Java程序员也许会和我一样，直觉的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换，但是在Oracle中会引起错误：“ORA 01810 格式代码出现两次”。<br />如：select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;<br />原因是SQL中不区分大小写，MM和mm被认为是相同的格式代码，所以Oracle的SQL采用了mi代替分钟。<br />select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;<br /><br />二、另要以24小时的形式显示出来要用HH24<br />select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟<br />select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份<img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/42736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2006-04-23 23:26 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/42736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql备份</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/24614.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 19 Dec 2005 04:31:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/24614.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/24614.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/24614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/24614.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/24614.html</trackback:ping><description><![CDATA[<DIV>delete from data_dmd_data;<BR>delete from data_dmd_data_simple;<BR>delete from data_meta_info;<BR>delete from index_maintable;<BR>delete from index_metaid_mapping;<BR>delete from rep_item_navg_index;</DIV>
<DIV>&nbsp;</DIV>
<DIV> </DIV>
<DIV>
<DIV>select count(*) from data_dmd_data;<BR>select count(*) from data_dmd_data_simple;<BR>select count(*) from data_meta_info;<BR>select count(*) from index_maintable;<BR>select count(*) from index_metaid_mapping;<BR>select count(*) from rep_item_navg_index;</DIV>
<DIV>&nbsp;</DIV>
<DIV>76697&nbsp; 101843</DIV></DIV><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/24614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-12-19 12:31 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/24614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过JDBC连接oracle数据库的十大技巧 </title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/20756.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 21 Nov 2005 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/20756.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/20756.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/20756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/20756.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/20756.html</trackback:ping><description><![CDATA[<HR>
&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Java数据库连接（JDBC）API是一系列能够让Java编程人员访问数据库的接口，各个开发商的接口并不完全相同。在使用多年的Oracle公司的JDBC后，我积累了许多技巧，这些技巧能够使我们更好地发挥系统的性能和实现更多的功能。 <BR><BR>　　1、在客户端软件开发中使用Thin驱动程序 <BR><BR>　　在开发Java软件方面，Oracle的数据库提供了四种类型的驱动程序，二种用于应用软件、applets、servlets等客户端软件，另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中，我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口（JNI），通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序，它直接与数据库进行通讯。为了获得最高的性能，Oracle建议在客户端软件的开发中使用OCI驱动程序，这似乎是正确的。但我建议使用Thin驱动程序，因为通过多次测试发现，在通常情况下，Thin驱动程序的性能都超过了OCI驱动程序。 <BR><BR>　　2、关闭自动提交功能，提高系统性能 <BR><BR>　　在第一次建立与数据库的连接时，在缺省情况下，连接是在自动提交模式下的。为了获得更好的性能，可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能，如下所示： <BR><BR>　　conn.setAutoCommit(false); <BR><BR>　　值得注意的是，一旦关闭了自动提交功能，我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。 <BR><BR>　　3、在动态SQL或有时间限制的命令中使用Statement对象 <BR><BR>　　在执行SQL命令时，我们有二种选择：可以使用PreparedStatement对象，也可以使用Statement对象。无论多少次地使用同一个SQL命令，PreparedStatement都只对它解析和编译一次。当使用Statement对象时，每次执行一个SQL命令时，都会对它进行解析和编译。这可能会使你认为，使用PreparedStatement对象比使用Statement对象的速度更快。然而，我进行的测试表明，在客户端软件中，情况并非如此。因此，在有时间限制的SQL操作中，除非成批地处理SQL命令，我们应当考虑使用Statement对象。 <BR><BR>　　此外，使用Statement对象也使得编写动态SQL命令更加简单，因为我们可以将字符串连接在一起，建立一个有效的SQL命令。因此，我认为，Statement对象可以使动态SQL命令的创建和执行变得更加简单。 <BR><BR>　　4、利用helper函数对动态SQL命令进行格式化 <BR><BR>　　在创建使用Statement对象执行的动态SQL命令时，我们需要处理一些格式化方面的问题。例如，如果我们想创建一个将名字O'Reilly插入表中的SQL命令，则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法，然后在连接字符串心服用公式表达一个SQL命令时，使用创建的helper方法。与此类似的是，我们可以让helper方法接受一个Date型的值，然后让它输出基于Oracle的to_date()函数的字符串表达式。 <BR><BR>　　5、利用PreparedStatement对象提高数据库的总体效率 <BR><BR>　　在使用PreparedStatement对象执行SQL命令时，命令被数据库进行解析和编译，然后被放到命令缓冲区。然后，每当执行同一个PreparedStatement对象时，它就会被再解析一次，但不会被再次编译。在缓冲区中可以发现预编译的命令，并且可以重新使用。在有大量用户的企业级应用软件中，经常会重复执行相同的SQL命令，使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务，我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。 <BR><BR>　　6、在成批处理重复的插入或更新操作中使用PreparedStatement对象 <BR><BR>　　如果成批地处理插入和更新操作，就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理，只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理，或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制，可以以如下所示的方式调用setExecuteBatch()： <BR><BR>PreparedStatement pstmt3D null; <BR>try { <BR>((OraclePreparedStatement) <BR>pstmt).setExecuteBatch(30); <BR>... <BR>pstmt.executeUpdate(); <BR>} <BR><BR>　　调用setExecuteBatch()时指定的值是一个上限，当达到该值时，就会自动地引发SQL命令执行，标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。 <BR><BR>　　7、使用Oracle locator方法插入、更新大对象（LOB） <BR><BR>　　Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理，尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值，也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB，但需要使用locator才能获取LOB的值。由于存在这二个问题，因此，我建议使用locator的方法来插入、更新或获取LOB的值。 <BR><BR>　　8、使用SQL92语法调用存储过程 <BR><BR>　　在调用存储过程时，我们可以使用SQL92或Oracle PL/SQL，由于使用Oracle PL/SQL并没有什么实际的好处，而且会给以后维护你的应用程序的开发人员带来麻烦，因此，我建议在调用存储过程时使用SQL92。 <BR><BR>　　9、使用Object SQL将对象模式转移到数据库中 <BR><BR>　　既然可以将Oracle的数据库作为一种面向对象的数据库来使用，就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象，将它们的属性映射到关系表中，然后在这些bean中添加方法。尽管这样作在Java中没有什么问题，但由于操作都是在数据库之外进行的，因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术，可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作，然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式，不但Java应用程序可以使用应用软件的对象模式，其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。 <BR><BR>　　10、利用SQL完成数据库内的操作 <BR><BR>　　我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求，而不是使用Java等过程化的编程语言。 <BR><BR>　　如果编程人员要在一个表中查找许多行，结果中的每个行都会查找其他表中的数据，最后，编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务，何必要让数据在网上流来流去的？我建议用户认真学习如何最大限度地发挥SQL的功能。<BR><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/20756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-11-21 13:46 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/20756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过JDBC操纵Oracle数据库LOB字段的几种情况分析</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/20062.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Wed, 16 Nov 2005 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/20062.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/20062.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/20062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/20062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/20062.html</trackback:ping><description><![CDATA[<FONT color=#008000>&nbsp;&nbsp;&nbsp; 在Oracle中，LOB（Large Object，大型对象）类型的字段现在用得越来越多了。因为这种类型的字段，容量大（最多能容纳4GB的数据），且一个表中可以有多个这种类型的字段，很灵活，适用于数据量非常大的业务领域（如图象、档案等）。而LONG、LONG RAW等类型的字段，虽然存储容量也不小（可达2GB），但由于一个表中只能有一个这样类型的字段的限制，现在已很少使用了。 <BR>&nbsp;&nbsp;&nbsp; LOB类型分为BLOB和CLOB两种：BLOB即二进制大型对象（Binary Large Object），适用于存贮非文本的字节流数据（如程序、图象、影音等）。而CLOB，即字符型大型对象（Character Large Object），则与字符集相关，适于存贮文本型的数据（如历史档案、大部头著作等）。<BR>&nbsp;&nbsp;&nbsp; 下面以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况。<BR>&nbsp;&nbsp;&nbsp; 先建立如下两个测试用的数据库表，Power Designer PD模型如下：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG src="http://www.jcwcn.com/news/UploadFiles_5180/200509/20050922154245343.jpg" onload="javascript:if(this.width>screen.width-300)this.width=screen.width-300" border=0><BR><BR>建表SQL语句为：<BR>CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)<BR>CREATE TABLE TEST_BLOB ( ID NUMBER(3), BLOBCOL BLOB)<BR><BR></FONT><FONT color=#008000><STRONG>一、 CLOB对象的存取<BR></STRONG><BR></FONT><FONT color=#008000><STRONG>1、往数据库中插入一个新的CLOB对象<BR></STRONG>public static void clobInsert(String infile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 插入一个空的CLOB对象 */<BR>stmt.executeUpdate("INSERT INTO TEST_CLOB valueS ('111', EMPTY_CLOB())");<BR>/* 查询此CLOB对象并锁定 */<BR>ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");<BR>while (rs.next()) {<BR>/* 取出此CLOB对象 */<BR>oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<BR>/* 向CLOB对象中写入数据 */<BR>BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());<BR>BufferedReader in = new BufferedReader(new FileReader(infile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR><STRONG>2、修改CLOB对象（是在原CLOB对象基础上进行覆盖式的修改）</STRONG><BR>public static void clobModify(String infile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 查询CLOB对象并锁定 */<BR>ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");<BR>while (rs.next()) {<BR>/* 获取此CLOB对象 */<BR>oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<BR>/* 进行覆盖式修改 */<BR>BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());<BR>BufferedReader in = new BufferedReader(new FileReader(infile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>} <BR><BR><STRONG>3、替换CLOB对象（将原CLOB对象清除，换成一个全新的CLOB对象）</STRONG><BR>public static void clobReplace(String infile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 清空原CLOB对象 */<BR>stmt.executeUpdate("UPDATE TEST_CLOB SET CLOBCOL=EMPTY_CLOB() WHERE ID='111'");<BR>/* 查询CLOB对象并锁定 */<BR>ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");<BR>while (rs.next()) {<BR>/* 获取此CLOB对象 */<BR>oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<BR>/* 更新数据 */<BR>BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());<BR>BufferedReader in = new BufferedReader(new FileReader(infile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR><STRONG>4、CLOB对象读取</STRONG><BR>public static void clobRead(String outfile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 查询CLOB对象 */<BR>ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_CLOB WHERE ID='111'");<BR>while (rs.next()) {<BR>/* 获取CLOB对象 */<BR>oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");<BR>/* 以字符形式输出 */<BR>BufferedReader in = new BufferedReader(clob.getCharacterStream());<BR>BufferedWriter out = new BufferedWriter(new FileWriter(outfile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>out.close();<BR>in.close();<BR>}<BR>} catch (Exception ex) {<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR><STRONG>二、 BLOB对象的存取</STRONG><BR><BR></FONT><FONT color=#008000><STRONG>1、 向数据库中插入一个新的BLOB对象<BR></STRONG>public static void blobInsert(String infile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 插入一个空的BLOB对象 */<BR>stmt.executeUpdate("INSERT INTO TEST_BLOB valueS ('222', EMPTY_BLOB())");<BR>/* 查询此BLOB对象并锁定 */<BR>ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");<BR>while (rs.next()) {<BR>/* 取出此BLOB对象 */<BR>oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<BR>/* 向BLOB对象中写入数据 */<BR>BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());<BR>BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR><STRONG>2、修改BLOB对象（是在原BLOB对象基础上进行覆盖式的修改）</STRONG><BR>public static void blobModify(String infile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 查询BLOB对象并锁定 */<BR>ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");<BR>while (rs.next()) {<BR>/* 取出此BLOB对象 */<BR>oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<BR>/* 向BLOB对象中写入数据 */<BR>BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());<BR>BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR><STRONG>3、替换BLOB对象（将原BLOB对象清除，换成一个全新的BLOB对象）</STRONG><BR>public static void blobReplace(String infile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 清空原BLOB对象 */<BR>stmt.executeUpdate("UPDATE TEST_BLOB SET BLOBCOL=EMPTY_BLOB() WHERE ID='222'");<BR>/* 查询此BLOB对象并锁定 */<BR>ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");<BR>while (rs.next()) {<BR>/* 取出此BLOB对象 */<BR>oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<BR>/* 向BLOB对象中写入数据 */<BR>BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());<BR>BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR></FONT><FONT color=#008000><STRONG>4、BLOB对象读取<BR></STRONG>public static void blobRead(String outfile) throws Exception<BR>{<BR>/* 设定不自动提交 */<BR>boolean defaultCommit = conn.getAutoCommit();<BR>conn.setAutoCommit(false);<BR>try {<BR>/* 查询BLOB对象 */<BR>ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222'");<BR>while (rs.next()) {<BR>/* 取出此BLOB对象 */<BR>oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");<BR>/* 以二进制形式输出 */<BR>BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile));<BR>BufferedInputStream in = new BufferedInputStream(blob.getBinaryStream());<BR>int c;<BR>while ((c=in.read())!=-1) {<BR>out.write(c);<BR>}<BR>in.close();<BR>out.close();<BR>}<BR>/* 正式提交 */<BR>conn.commit();<BR>} catch (Exception ex) {<BR><BR>/* 出错回滚 */<BR>conn.rollback();<BR>throw ex;<BR>}<BR><BR>/* 恢复原提交状态 */<BR>conn.setAutoCommit(defaultCommit);<BR>}<BR><BR>&nbsp;&nbsp;&nbsp; 观察上述程序对LOB类型字段的存取，我们可以看出，较之其它类型字段，有下面几个显著不同的特点：<BR><BR><STRONG>一是必须取消自动提交。</STRONG><BR><BR>&nbsp;&nbsp;&nbsp; 存取操作开始前，必须用setAutoCommit(false)取消自动提交。其它类型字段则无此特殊要求。这是因为存取LOB类型字段时，通常要进行多次操作可以完成。不这样的话，Oracle将抛出“读取违反顺序”的错误。<BR><BR></FONT><FONT color=#008000><STRONG>二是插入方式不同。<BR></STRONG><BR>&nbsp;&nbsp;&nbsp; LOB数据不能象其它类型数据一样直接插入（INSERT）。插入前必须先插入一个空的LOB对象，CLOB类型的空对象为EMPTY_CLOB()，BLOB类型的空对象为EMPTY_BLOB()。之后通过SELECT命令查询得到先前插入的记录并锁定，继而将空对象修改为所要插入的LOB对象。<BR><BR><STRONG>三是修改方式不同。</STRONG><BR><BR>&nbsp;&nbsp;&nbsp; 其它类型的字段修改时，用UPDATE … SET…命令即可。而LOB类型字段，则只能用SELECT … FOR UPDATE命令将记录查询出来并锁定，然后才能修改。且修改也有两种改法：一是在原数据基础上的修改（即覆盖式修改），执行SELECT … FOR UPDATE后再改数据；二是替换（先将原数据清掉，再修改），先执行UPDATE命令将LOB字段之值设为空的LOB对象，然后进行第一种改法。建议使用替换的方法，以实现与其它字段UPDATE操作后一样的效果。<BR><BR><STRONG>四是存取时应使用由数据库JDBC驱动程序提供的LOB操作类。</STRONG><BR><BR>&nbsp;&nbsp;&nbsp; 对于Oracle数据库，应使用oracle.sql.CLOB和oracle.sql.BLOB。不使用由数据库JDBC驱动程序提供的LOB类时，程序运行时易于出现“抽象方法调用”的错误，这是因为JDBC所定义的java.sql.Clob与java.sql.Blob接口，其中的一些方法并未在数据库厂家提供的驱动程序中真正实现。<BR><BR><STRONG>五是存取手段与文件操作相仿。</STRONG><BR><BR>&nbsp;&nbsp;&nbsp; 对于BLOB类型，应用InputStream/OutputStream类，此类不进行编码转换，逐个字节存取。oracle.sql.BLOB类相应提供了getBinaryStream()和getBinaryOutputStream()两个方法，前一个方法用于读取Oracle的BLOB字段，后一个方法用于将数据写入Oracle的BLOB字段。<BR>&nbsp;&nbsp;&nbsp; 对于CLOB类型，应用Reader/Writer类，此类进行编码转换。oracle.sql.CLOB类相应提供了getCharacterStream()和getCharacterOutputStream()两个方法，前一个方法用于读取Oracle的CLOB字段，后一个方法用于将数据写入Oracle的CLOB字段。<BR>&nbsp;&nbsp;&nbsp; 需要说明的是，为了大幅提高程序执行效率，对BLOB/CLOB字段的读写操作，应该使用缓冲操作类（带Buffered前缀），即：BufferedInputStream，BufferedOutputStream，BufferedReader，BufferedWriter。例程中全部使用了缓冲操作类。<BR><BR><STRONG>&nbsp;&nbsp;&nbsp; 小结：通过JDBC操纵Oracle数据库的LOB字段，不外乎插入、修改、替换、读取四种方式，掌握起来并不难。在实际操作中要注意上面所说的几点，结合阅读例程源程序，用户会很快明白LOB类型字段的使用的，也必将领悟到这种类型字段的妙处！</STRONG></FONT><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/20062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-11-16 15:04 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/20062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle数据库中CLOB字段的处理问题 </title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/20053.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Wed, 16 Nov 2005 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/20053.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/20053.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/20053.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/20053.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/20053.html</trackback:ping><description><![CDATA[在Oracle中，LOB（Large Object，大型对象）类型的字段现在用得越来越多了。因为这种类型的字段，容量大（最多能容纳4GB的数据），且一个表中可以有多个这种类型的字段，很灵活，适用于数据量非常大的业务领域（如图象、档案等）。而LONG、LONG RAW等类型的字段，虽然存储容量也不小（可达2GB），但由于一个表中只能有一个这样类型的字段的限制，现在已很少使用了。 <BR><BR>LOB类型分为BLOB和CLOB两种：BLOB即二进制大型对象（Binary Large Object），适用于存贮非文本的字节流数据（如程序、图象、影音等）。而CLOB，即字符型大型对象（Character Large Object），则与字符集相关，适于存贮文本型的数据（如历史档案、大部头著作等）。<BR><BR>对于一般的java应用程序，clob类型的数据用对象形式插入即可，连接方式采用Oracle Thin JDBC Driver<BR>注意：存取操作开始前，必须用setAutoCommit(false)取消自动提交，否则Oracle将抛出“读取违反顺序”的错误。<BR><BR>取： ...<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con.setAutoCommit(false);<BR>....<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(rss.next())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clob clob = rss.getClob(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(clob!=null)<BR>&nbsp;&nbsp; //直接转换为String返回，也可使用getCharacterOutputStream()或getAsciiOutputStream() <BR>&nbsp;&nbsp; //<BR>&nbsp;&nbsp; String str=clob.getSubString((long) 1, (int) clob.length());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>写：LOB类型字段，则只能用SELECT … FOR UPDATE命令将记录查询出来并锁定，然后才能修改<BR>import oracle.sql.CLOB;<BR>OracleResultSet rss=(OracleResultSet)stmt.executeQuery("select my_clob from test where id=1 for update");&nbsp; <BR>if(rss.next())<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLOB clob=(CLOB)rss.getClob(1);<BR>//content为大于4k 的String,当然也可使用流形式写入<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clob.putString(1,content);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OraclePreparedStatement pstmt=(OraclePreparedStatement)con.prepareStatement("update test set my_clob=?");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt.setClob(1,(Clob)clob);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt.executeUpdate();<BR>...<BR>}<BR><BR><BR>但同样的方法在BEA WLS 8.1SP2上取数据没有问题，写CLOB会有问题的，会报一种这样的错误:java.lang.ClassCastException<BR>对此bea 是这样解释并解决的：<BR>For most extensions that Oracle provides, you can use the standard technique as described in Using Vendor Extensions to JDBC Interfaces. However, the Oracle Thin driver does not provide public interfaces for its extension methods in the following classes:<BR><BR>oracle.sql.ARRAY <BR>oracle.sql.STRUCT <BR>oracle.sql.REF <BR>oracle.sql.BLOB <BR>oracle.sql.CLOB <BR>WebLogic Server provides its own interfaces to access the extension methods for those classes:<BR><BR>weblogic.jdbc.vendor.oracle.OracleArray <BR>weblogic.jdbc.vendor.oracle.OracleStruct <BR>weblogic.jdbc.vendor.oracle.OracleRef <BR>weblogic.jdbc.vendor.oracle.OracleThinBlob <BR>weblogic.jdbc.vendor.oracle.OracleThinClob <BR><BR>意思即是采用weblogic.jdbc.vendor.oracle.OracleThinClob 替代oracle.sql.CLOB <BR><BR>修改后的写CLOB字段，只用修改一句,其他不变。<BR>weblogic.jdbc.vendor.oracle.OracleThinClob&nbsp; clob=(OracleThinClob)rss.getClob(1);<img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/20053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-11-16 14:35 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/20053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server数据库备份和恢复措施 </title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/20039.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Wed, 16 Nov 2005 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/20039.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/20039.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/20039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/20039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/20039.html</trackback:ping><description><![CDATA[<P><STRONG>一、备份数据库</STRONG> </P>
<P>1、打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server<BR>2、SQL Server组--&gt;双击打开你的服务器--&gt;双击打开数据库目录<BR>3、选择你的数据库名称（如论坛数据库Forum）--&gt;然后点上面菜单中的工具--&gt;选择备份数据库<BR>4、备份选项选择完全备份，目的中的备份到如果原来有路径和名称则选中名称点删除，然后点添加，如果原来没有路径和名称则直接选择添加，接着指定路径和文件名，指定后点确定返回备份窗口，接着点确定进行备份 </P>
<P><B>二、还原数据库</B></P>
<P>1、打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server<BR>2、SQL Server组--&gt;双击打开你的服务器--&gt;点图标栏的新建数据库图标，新建数据库的名字自行取<BR>3、点击新建好的数据库名称（如论坛数据库Forum）--&gt;然后点上面菜单中的工具--&gt;选择恢复数据库<BR>4、在弹出来的窗口中的还原选项中选择从设备--&gt;点选择设备--&gt;点添加--&gt;然后选择你的备份文件名--&gt;添加后点确定返回，这时候设备栏应该出现您刚才选择的数据库备份文件名，备份号默认为1（如果您对同一个文件做过多次备份，可以点击备份号旁边的查看内容，在复选框中选择最新的一次备份后点确定）--&gt;然后点击上方常规旁边的选项按钮<BR>5、在出现的窗口中选择在现有数据库上强制还原，以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置（也可以指定自己的目录），逻辑文件名不需要改动，移至物理文件名要根据你所恢复的机器情况做改动，如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data，那么就按照您恢复机器的目录进行相关改动改动，并且最后的文件名最好改成您当前的数据库名（如原来是bbs_data.mdf，现在的数据库是forum，就改成forum_data.mdf），日志和数据文件都要按照这样的方式做相关的改动（日志的文件名是*_log.ldf结尾的），这里的恢复目录您可以自由设置，前提是该目录必须存在（如您可以指定d:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldf），否则恢复将报错<BR>6、修改完成后，点击下面的确定进行恢复，这时会出现一个进度条，提示恢复的进度，恢复完成后系统会自动提示成功，如中间提示报错，请记录下相关的错误内容并询问对SQL操作比较熟悉的人员，一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误，数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作，如果还提示正在使用的错误可以将SQL服务停止然后重起看看，至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复<BR></P>
<P><B>三、收缩数据库</B></P>
<P>&nbsp;&nbsp;&nbsp; 一般情况下，SQL数据库的收缩并不能很大程度上减小数据库大小，其主要作用是收缩日志大小，应当定期进行此操作以免数据库日志过大</P>
<P>1、设置数据库模式为简单模式：打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器--&gt;双击打开数据库目录--&gt;选择你的数据库名称（如论坛数据库Forum）--&gt;然后点击右键选择属性--&gt;选择选项--&gt;在故障还原的模式中选择“简单”，然后按确定保存<BR>2、在当前数据库上点右键，看所有任务中的收缩数据库，一般里面的默认设置不用调整，直接点确定<BR>3、<STRONG>收缩数据库完成后，建议将您的数据库属性重新设置为标准模式，操作方法同第一点，因为日志在一些异常情况下往往是恢复数据库的重要依据 </STRONG></P>
<P><B>四、设定每日自动备份数据库</B></P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 强烈建议有条件的用户进行此操作！</STRONG></P>
<P>1、打开企业管理器，在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器<BR>2、然后点上面菜单中的工具--&gt;选择数据库维护计划器<BR>3、下一步选择要进行自动备份的数据--&gt;下一步更新数据优化信息，这里一般不用做选择--&gt;下一步检查数据完整性，也一般不选择<BR>4、下一步指定数据库维护计划，默认的是1周备份一次，点击更改选择每天备份后点确定<BR>5、下一步指定备份的磁盘目录，选择指定目录，如您可以在D盘新建一个目录如：d:\databak，然后在这里选择使用此目录，如果您的数据库比较多最好选择为每个数据库建立子目录，然后选择删除早于多少天前的备份，一般设定4－7天，这看您的具体备份要求，备份文件扩展名一般都是bak就用默认的<BR>6、下一步指定事务日志备份计划，看您的需要做选择--&gt;下一步要生成的报表，一般不做选择--&gt;下一步维护计划历史记录，最好用默认的选项--&gt;下一步完成<BR>7、完成后系统很可能会提示Sql Server Agent服务未启动，先点确定完成计划设定，然后找到桌面最右边状态栏中的SQL绿色图标，双击点开，在服务中选择Sql Server Agent，然后点击运行箭头，选上下方的当启动OS时自动启动服务<BR>8、这个时候数据库计划已经成功的运行了，他将按照您上面的设置进行自动备份 </P>
<P><STRONG>修改计划：</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 打开企业管理器，在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器--&gt;管理--&gt;数据库维护计划--&gt;打开后可看到你设定的计划，可以进行修改或者删除操作 </P>
<P><B>五、数据的转移（新建数据库或转移服务器）</B></P>
<P>&nbsp;&nbsp;&nbsp; 一般情况下，最好使用备份和还原操作来进行转移数据，在特殊情况下，可以用导入导出的方式进行转移，这里介绍的就是导入导出方式，导入导出方式转移数据一个作用就是可以在收缩数据库无效的情况下用来减小（收缩）数据库的大小，本操作默认为您对SQL的操作有一定的了解，如果对其中的部分操作不理解，可以咨询动网相关人员或者查询网上资料</P>
<P>1、将原数据库的所有表、存储过程导出成一个SQL文件，导出的时候注意在选项中选择编写索引脚本和编写主键、外键、默认值和检查约束脚本选项<BR>2、新建数据库，对新建数据库执行第一步中所建立的SQL文件<BR>3、用SQL的导入导出方式，对新数据库导入原数据库中的所有表内容&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出处：<A href="http://www.blueidea.com/">蓝色理想</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 责任编辑：<A href="http://www.blueidea.com/common/contact.asp?type=编辑&amp;username=冰点的冰蓝色" target=_blank>冰点的冰蓝色</A></P><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/20039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-11-16 12:50 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/20039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈jdbc连接sql server2000数据库(转)</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/19762.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 14 Nov 2005 12:45:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/19762.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/19762.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/19762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/19762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/19762.html</trackback:ping><description><![CDATA[<P><FONT face=Arial>前提：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.sql&nbsp;server&nbsp;2000&nbsp;任意版本&nbsp;&nbsp;&nbsp;&nbsp;//本人用的是个人版<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.sql&nbsp;server&nbsp;2000&nbsp;sp3升级包<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你可以在这里下载</FONT><A href="http://www.bossed.com.cn/download/detailcp.asp?id=74"><FONT face=Arial>http://www.bossed.com.cn/download/detailcp.asp?id=74</FONT></A><BR><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.sql&nbsp;server&nbsp;2000&nbsp;jdbc&nbsp;驱动&nbsp;&nbsp;//这个就需要自己找了!<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.jdk1.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以下的例子是该版本<BR>在以上条件满足的情况下,作以下事情<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.建立新数据库名为：TESTDB&nbsp;,并在其中建立一个名为test_student的表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;包括以下几列（Sno，Sname，Sage，Ssex，Sclass）&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.开始编写你自己的连接数据库的类（我这里是借鉴他人的版权不归我所有），你也可以用自己的方法&nbsp;<BR>class&nbsp;Testj{<BR>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[])<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;RL&nbsp;=&nbsp;"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=TESTDB";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;user&nbsp;="king";//这里替换成你自已的数据库用户名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;=&nbsp;"sql";//这里替换成你自已的数据库用户密码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sqlStr&nbsp;=&nbsp;"select&nbsp;*&nbsp;from&nbsp;test_student";<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{&nbsp;&nbsp;&nbsp;&nbsp;//这里的异常处理语句是必需的.否则不能通过编译!&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;"类实例化成功!"&nbsp;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("slkdjf");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con&nbsp;=&nbsp;DriverManager.getConnection(RL,user,password);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;"创建连接对像成功!"&nbsp;);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;st&nbsp;=&nbsp;con.createStatement();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;"创建Statement成功!"&nbsp;);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;st.executeQuery(&nbsp;sqlStr&nbsp;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;"操作数据表成功!"&nbsp;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;"----------------!"&nbsp;);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(rs.next())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getInt("Sno")&nbsp;+&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getString("Sname")&nbsp;+&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getInt("Sage")&nbsp;+&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getString("Ssex")&nbsp;+&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("Sclass"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(Exception&nbsp;err){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err.printStackTrace(System.out);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>下面进行调试：<BR>&nbsp;&nbsp;javac&nbsp;Testj.java<BR>&nbsp;&nbsp;java&nbsp;Testj<BR>&nbsp;&nbsp;如果正确输出应该是：<BR>&nbsp;&nbsp;类实例化成功!<BR>slkdjf<BR>创建连接对像成功!<BR>创建Statement成功!<BR>操作数据表成功!<BR>----------------!<BR>2000&nbsp;&nbsp;&nbsp;&nbsp;小刚&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;男&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>2001&nbsp;&nbsp;&nbsp;&nbsp;小黄&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>2002&nbsp;&nbsp;&nbsp;&nbsp;李娜&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>2003&nbsp;&nbsp;&nbsp;&nbsp;王芳&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;&nbsp;null<BR>2004&nbsp;&nbsp;&nbsp;&nbsp;黄明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;男&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>2005&nbsp;&nbsp;&nbsp;&nbsp;梅兰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>2006&nbsp;&nbsp;&nbsp;&nbsp;李玉&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>2007&nbsp;&nbsp;&nbsp;&nbsp;李平&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>注意：这里有几点要说明<BR>1.路径问题：<BR>&nbsp;&nbsp;你必须配置你的classpath路径否则他在编译时会抱错<BR>&nbsp;&nbsp;java.lang.ClassNotFoundException:&nbsp;com.microsoft.jdbc.sqlserver.SQLServerDriver<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URLClassLoader$1.run(URLClassLoader.java:199)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.security.AccessController.doPrivileged(Native&nbsp;Method)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URLClassLoader.findClass(URLClassLoader.java:187)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.loadClass(ClassLoader.java:289)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.loadClass(ClassLoader.java:235)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Class.forName0(Native&nbsp;Method)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Class.forName(Class.java:141)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;Test.main(Test.java:11)&nbsp;<BR>你的路径应该是这样配置：你可以在在安装jdbc驱动后看那里的帮助文档（是英文的）；<BR>//这里指在xp系统下<BR>&nbsp;classpath&nbsp;=&nbsp;,;C:\Program&nbsp;Files\Microsoft&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;Driver&nbsp;for&nbsp;JDBC\lib\msbase.jar;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\Program&nbsp;Files\Microsoft&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;Driver&nbsp;for&nbsp;JDBC\lib\mssqlserver.jar;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\Program&nbsp;Files\Microsoft&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;Driver&nbsp;for&nbsp;JDBC\lib\msutil.jar;<BR>&nbsp;&nbsp;可千万不要写错哟！<BR>&nbsp;2.sp3补丁包问题：<BR>&nbsp;&nbsp;&nbsp;&nbsp;如果你在编译时出现下列问题&nbsp;那么你需要下载并安装sp3补丁包<BR>&nbsp;&nbsp;&nbsp;java.sql.SQLException:&nbsp;[Microsoft][SQLServer&nbsp;2000&nbsp;Driver&nbsp;for&nbsp;JDBC]Error&nbsp;establis<BR>hing&nbsp;socket.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseExceptions.createException(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseExceptions.getException(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseExceptions.getException(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.tds.TDSConnection.&lt;init&gt;(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseConnection.open(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseDriver.connect(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.sql.DriverManager.getConnection(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.sql.DriverManager.getConnection(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;Test.main(Test.java:14)&nbsp;<BR>3.权限问题&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;如果你出现类似这样的问题<BR>&nbsp;&nbsp;&nbsp;类实例化成功!<BR>slkdjf<BR>java.sql.SQLException:&nbsp;[Microsoft][SQLServer&nbsp;2000&nbsp;Driver&nbsp;for&nbsp;JDBC][SQLServer]用户&nbsp;'king'&nbsp;登录失败。<BR>原因:&nbsp;未与信任&nbsp;SQL&nbsp;Server&nbsp;连接相关联。<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseExceptions.createException(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseExceptions.getException(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.tds.TDSLoginRequest.processReplyToken(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseConnection.open(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.microsoft.jdbc.base.BaseDriver.connect(Unknown&nbsp;Source)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.sql.DriverManager.getConnection(DriverManager.java:512)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.sql.DriverManager.getConnection(DriverManager.java:171)<BR>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;Testj.main(Testj.java:14)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>原困是未设置SQL&nbsp;SERVER登录认证模式为混合认证模式，因为SQL&nbsp;SERVER默认安装后认证模式为WINDOWS认证模式，从而导致出错。<BR>解决方法：启动SQLSERVER企业管理器，选择要进行认证模式设置的服务器。右击该服务器，在弹出菜单中选择属性，SQL&nbsp;SERVER将<BR>弹出属性对话框在属性对话框中选择安全性选项，在身份验证处选择“SQL&nbsp;Server和Windows”，然后确定。</FONT></P><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/19762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-11-14 20:45 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/19762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中tomcat的SQL Server2000数据库连接池的配置</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/19757.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 14 Nov 2005 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/19757.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/19757.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/19757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/19757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/19757.html</trackback:ping><description><![CDATA[转载：转载请保留本信息，本文来自<A href="http://www.matrix.org.cn/resource/article/1/1357.html">http://www.matrix.org.cn/resource/article/1/1357.html</A> 
<DIV id=divarticlecontent>环境：<BR>1. 数据库：Microsoft SQL Server 2000<BR>2. 数据库驱动程序：net.sourceforge.jtds.jdbc.Driver<BR><BR>JNDI（Java Naming and Directory Interface）概述：<BR>Tomcat4（5）提供了一个与Java Enterprise Edition应用服务相兼容的JNDI--InitialContext实现实例。它的初始数据设置在$CATALINA_HOME/conf/server.xml文件里，并可能在网页应用环境描述（/WEB-INF/web.xml）里被下列元素引用：<BR>1) &lt;env-entry&gt;--环境入口，设置应用程序如何操作。<BR>2) &lt;resource-ref&gt;--资源参数，一般是数据库驱动程序、JavaMail Session、自定义类工厂等。<BR>3) &lt;resource-env-ref&gt;--在Servlet 2.4里用来简化设置不需认证信息的资源资源如环境参数、resource-ref变量。<BR><BR>InitialContext在网页应用程序初始化时被设置，用来支持网页应用程序组件。所有的入口和资源都放在JNDI命名空间里的java:comp/env段里。点击下列网址以获取更多信息：<BR>1) Java命名和目录接口（Java Naming and Directory Interface）<BR>2) J2EE平台说明（J2EE Platform Specification）<BR><BR>设置JNDI资源<BR>设置JNDI资源要在$CATALINA_HOME/conf/server.xml文件里使用下列标志符：<BR>1) &lt;Environment&gt;--设置域个可变的JNDI InitialContext入口的名字和值（同上面说的&lt;env-entry&gt;等价）。<BR>2) &lt;Resource&gt;--设置应用程序可用的资源的名字和类型（同上面说的&lt;resource-ref&gt;等价）。<BR>3) &lt;ResourceParams&gt;--设置Java资源类工厂的名称或将用的JavaBean属性。<BR>4) &lt;ResourceLink&gt;--给全局JNDI环境（JNDI Context）添加一个链接。<BR>上述这些标志符必须放在&lt;Context&gt;和&lt;/Context&gt;之间（针对专门的网页应用程序）或&lt;DefaultContext&gt;和&lt;/DefaultContext&gt;之间。<BR>此外，设在网页应用环境描述（Web Application Descriptor）（/WEB-INF/web.xml）里的名字和值也在初始环境（Initial Context）里被设置，当被&lt;Environemt&gt;元素值允许时将被重设初始值。<BR>全局变量能在&lt;Server&gt;子元素的&lt;GlobalNamingResources&gt;里设置。<BR><BR>数据库连接池概述：<BR>数据库连接是一种关键的有限的昂贵的资源，这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性，影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。<BR>数据库连接池负责分配、管理和释放数据库连接，它允许应用程序重复使用一个现有的数据库连接，而再不是重新建立一个；释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。<BR>数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中，这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用，连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数，当应用程序向连接池请求的连接数超过最大连接数量时，这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素：<BR>1) 最小连接数是连接池一直保持的数据库连接，所以如果应用程序对数据库连接的使用量不大，将会有大量的数据库连接资源被浪费；<BR>2) 最大连接数是连接池能申请的最大连接数，如果数据库连接请求超过此数，后面的数据库连接请求将被加入到等待队列中，这会影响之后的数据库操作。<BR>3) 如果最小连接数与最大连接数相差太大，那么最先的连接请求将会获利，之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过，这些大于最小连接数的数据库连接在使用完不会马上被释放，它将被放到连接池中等待重复使用或是空闲超时后被释放。<BR><BR>配置Tomcat数据库连接池的前提：<BR>1. 必须装有Java运行环境；<BR>2. 必须有SQL Server2000数据库服务器（可以不在本地）；<BR>3. 必须有jtds.jar，并将它放在$CATALINA_HOME/common/lib目录下（只能是这里）。使用它是因为Microsoft公司的Java SQL Server驱动程序不支持二次查询，可到网上搜到。目前使用的是jtds-0.6.jar。<BR><BR>在$CATALINA_HOME/conf/server.xml里设置数据库连接池：<BR>下面是配置的代码，必须放在&lt;Host&gt;和&lt;/Host&gt;之间。<BR><PRE class=overflow title="pre code">&lt;Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true"&gt;<BR>&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/&gt;<BR>&lt;Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/&gt;<BR>&lt;ResourceParams name="jdbc/connectDB"&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;maxActive&lt;/name&gt;<BR>&nbsp; &lt;!-- Maximum number of DB connections in pool.Set to 0 for no limit. --&gt;<BR>&nbsp; &lt;value&gt;100&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;maxIdle&lt;/name&gt;<BR>&nbsp; &lt;!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. --&gt;<BR>&nbsp; &lt;value&gt;30&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;maxWait&lt;/name&gt;<BR>&nbsp; &lt;!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. --&gt;<BR>&nbsp; &lt;value&gt;10000&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;removeAbandoned&lt;/name&gt;<BR>&nbsp; &lt;!-- Abandoned DB connections are removed and recycled --&gt;<BR>&nbsp; &lt;value&gt;true&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;removeAbandonedTimeout&lt;/name&gt;<BR>&nbsp; &lt;!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.&nbsp; --&gt;<BR>&nbsp; &lt;value&gt;60&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;logAbandoned&lt;/name&gt;<BR>&nbsp; &lt;!-- Log a stack trace of the code which abandoned --&gt;<BR>&nbsp; &lt;value&gt;false&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;factory&lt;/name&gt;<BR>&nbsp; &lt;!-DBCP Basic Datasource Factory --&gt;<BR>&nbsp; &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;username&lt;/name&gt;<BR>&nbsp; &lt;!-- Database User Name --&gt;<BR>&nbsp; &lt;value&gt;Iorishinier&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;password&lt;/name&gt;<BR>&nbsp; &lt;!-- User Password --&gt;<BR>&nbsp; &lt;value&gt;mypasswd&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;driverClassName&lt;/name&gt;<BR>&nbsp; &lt;!-- Database Driver Class Name --&gt;<BR>&nbsp; &lt;value&gt;net.sourceforge.jtds.jdbc.Driver&lt;/value&gt;<BR> &lt;/parameter&gt;<BR> &lt;parameter&gt;<BR>&nbsp; &lt;name&gt;url&lt;/name&gt;<BR>&nbsp; &lt;!-- Database Address --&gt;<BR>&nbsp; &lt;value&gt;jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind&lt;/value&gt;<BR> &lt;/parameter&gt;<BR>&lt;/ResourceParams&gt;<BR>&lt;/Context&gt;</PRE><BR>下面是一些参数的说明：<BR>&lt;Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true"&gt;<BR>其中：<BR>1) path 指定路径，这里设定的是$CATALINA_HOME/webapps下的quality目录；<BR>2) docBase 文件根目录。<BR>3) reloader 当网页被更新时是否重新编译。<BR>4) maxActive 连接池的最大数据库连接数。设为0表示无限制。<BR>5) maxIdle 数据库连接的最大空闲时间。超过此空闲时间，数据库连接将被标记为不可用，然后被释放。设为0表示无限制。<BR>6) maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为－1表示无限制。<BR>7) removeAbandoned 回收被遗弃的（一般是忘了释放的）数据库连接到连接池中。<BR>8) removeAbandonedTimeout 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。<BR>9) logAbandoned 将被遗弃的数据库连接的回收记入日志。<BR>10) driverClassName JDBC驱动程序。<BR>11) url 数据库连接字符串<BR><BR>在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源：<BR>下面是配置代码，必须放在&lt;web-app&gt;和&lt;/web-app&gt;里。<BR><PRE class=overflow title="pre code">&lt;!-- Database Config start --&gt;<BR>&lt;resource-ref&gt;<BR>&lt;description&gt;connectDB test&lt;/description&gt;<BR>&lt;res-ref-name&gt;jdbc/connectDB&lt;/res-ref-name&gt;<BR>&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<BR>&lt;res-auth&gt;Container&lt;/res-auth&gt;<BR>&lt;/resource-ref&gt;<BR>&lt;!-- Database Config end --&gt;</PRE><BR><BR>下面是一下参数的必要说明：<BR>1) description 对被引用的资源的描述。<BR>2) res-ref-name 资源名称。见上面的&lt;ResourceParams name="jdbc/connectDB"&gt;<BR>3) res-type 资源类型。见上面的&lt;Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/&gt;<BR><BR>在JSP中使用资源：<BR>这是在$CATALINA_HOME/webapps/quality下的某级子目录里的jsp网页文件部分代码：<BR><PRE class=overflow title="pre code">&lt;%@ page contentType="text/html;charset=GBK"%&gt;<BR>&lt;%@ page errorPage="error.jsp"%&gt;<BR>&lt;%@ page import="javax.naming.*"%&gt;<BR>&lt;%@ page import="javax.sql.*"%&gt;<BR>&lt;%@ page import="java.sql.*"%&gt;<BR>&lt;html&gt;<BR> &lt;head&gt;<BR> &lt;/head&gt;<BR> &lt;body&gt;<BR>&nbsp; &lt;%<BR><BR>&nbsp; &nbsp;………………<BR>&nbsp; &nbsp;………………<BR><BR>&nbsp; &nbsp;// 数据库操作<BR>&nbsp; &nbsp;Context ctx=null;<BR>&nbsp; &nbsp;Connection cnn=null;<BR>&nbsp; &nbsp;Statement stmt=null;<BR>&nbsp; &nbsp;ResultSet rs=null;<BR>&nbsp; &nbsp;try<BR>&nbsp; &nbsp;{<BR>&nbsp; &nbsp; ctx=new InitialContext();<BR>&nbsp; &nbsp; if(ctx==null)<BR>&nbsp; &nbsp; &nbsp;throw new Exception("没有匹配的环境");<BR>&nbsp; &nbsp; DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");<BR>&nbsp; &nbsp; if(ds==null)<BR>&nbsp; &nbsp; &nbsp;throw new Exception("没有匹配数据库");<BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; cnn=ds.getConnection();<BR>&nbsp; &nbsp; stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);<BR>&nbsp; &nbsp; rs=stmt.executeQuery("select * from table1");<BR><BR>&nbsp; &nbsp; ………………<BR>&nbsp; &nbsp; ………………<BR><BR>&nbsp; &nbsp;}<BR>&nbsp; &nbsp;finally<BR>&nbsp; &nbsp;{<BR>&nbsp; &nbsp; if(rs!=null)<BR>&nbsp; &nbsp; &nbsp;rs.close();<BR>&nbsp; &nbsp; if(stmt!=null)<BR>&nbsp; &nbsp; &nbsp;stmt.close();<BR>&nbsp; &nbsp; if(cnn!=null)<BR>&nbsp; &nbsp; &nbsp;cnn.close();<BR>&nbsp; &nbsp; if(ctx!=null)<BR>&nbsp; &nbsp; &nbsp;ctx.close();<BR>&nbsp; &nbsp;}<BR>&nbsp; &nbsp; %&gt;<BR> &lt;/body&gt;<BR>&lt;/html&gt;</PRE><BR><BR>代码说明：<BR>DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");<BR>上面这句应用了刚才设的资源。<BR>资源使用完要释放，尤其是Context资源，见try-catch-finally部分的finally代码段，这是一种好的习惯。资源释放时如果释放了上级资源，下级资源将先被释放。如：释放了ctx，那么资源释放顺序将是rs，stmt，cnn，ctx。换句话说，如果释放了ctx，那么rs，stmt和cnn都将不可用了。<BR>这里的释放资源只是将数据库连接返回连接池中，并不是把资源真正释放掉，见数据库连接池概述。<BR></DIV><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/19757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-11-14 19:34 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/19757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>