<?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>A18制造 &#187; Java</title>
	<atom:link href="http://a18zhizao.com/ycategory/works/java/feed" rel="self" type="application/rss+xml" />
	<link>http://a18zhizao.com</link>
	<description>梦想的种子飞入了大地，所需要的只有时间。</description>
	<lastBuildDate>Sun, 22 Apr 2012 13:46:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>使用PreparedStatement向数据库插入数据</title>
		<link>http://a18zhizao.com/y2010/1365_insert-data-to-the-database-using-preparedstatement.html</link>
		<comments>http://a18zhizao.com/y2010/1365_insert-data-to-the-database-using-preparedstatement.html#comments</comments>
		<pubDate>Wed, 31 Mar 2010 02:01:57 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[preparedstatement]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://a18zhizao.com/y2010/1365_insert-data-to-the-database-using-preparedstatement.html</guid>
		<description><![CDATA[使用PreparedStatement进行数据保存，主要我用这个对HTML代码保存进数据库 进行操作。 这个是对CLOB类型进行操作。 还有一种方法，是首先插入时使用EMPTY_CLOB() 之后再UPDATE 这个段 使用数据流更新数据。]]></description>
			<content:encoded><![CDATA[<p>使用PreparedStatement进行数据保存，主要我用这个对HTML代码保存进数据库 进行操作。<br />
这个是对CLOB类型进行操作。<br />
还有一种方法，是首先插入时使用EMPTY_CLOB() 之后再UPDATE 这个段 使用数据流更新数据。<br />
<span id="more-1365"></span></p>
<pre class="brush: java; title: ; notranslate">
package net.java2000.sql;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;

/**
 * 使用PreparedStatement向数据库插入数据。
 *
 * @author 赵学庆，Java世纪网(java2000.net)
 *
 */
public class DBInsertPreparedStatement {

  public static void main(String[] args) {
    Connection connection = null; // 从其它地方获取链接
    try {
      // INSERT语句
      String sql = &quot;INSERT INTO my_table (col_string) VALUES(?)&quot;;
      // 构造PerparedStatement
      PreparedStatement pstmt = connection.prepareStatement(sql);

      // 循环插入10行数据
      for (int i = 0; i &lt; 10; i++) {
        // 设置参数的值
        pstmt.setString(1, &quot;row &quot; + i);

        // 插入数据
        pstmt.executeUpdate();
      }
    } catch (SQLException e) {
    }

    // 演示各种参数的设置方法。
    try {
      // Prepare a statement to insert a record
      String sql = &quot;INSERT INTO mysql_all_table(&quot;
        + &quot;col_boolean,&quot;
        + &quot;col_byte,&quot;
        + &quot;col_short,&quot;
        + &quot;col_int,&quot;
        + &quot;col_long,&quot;
        + &quot;col_float,&quot;
        + &quot;col_double,&quot;
        + &quot;col_bigdecimal,&quot;
        + &quot;col_string,&quot;
        + &quot;col_date,&quot;
        + &quot;col_time,&quot;
        + &quot;col_timestamp,&quot;
        + &quot;col_asciistream,&quot;
        + &quot;col_binarystream,&quot;
        + &quot;col_blob) &quot;
        + &quot;VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)&quot;;

      PreparedStatement pstmt = connection.prepareStatement(sql);

      // Set the values
      pstmt.setBoolean(1, true);
      pstmt.setByte(2, (byte) 123);
      pstmt.setShort(3, (short) 123);
      pstmt.setInt(4, 123);
      pstmt.setLong(5, 123L);
      pstmt.setFloat(6, 1.23F);
      pstmt.setDouble(7, 1.23D);
      pstmt.setBigDecimal(8, new BigDecimal(1.23));
      pstmt.setString(9, &quot;a string&quot;);
      pstmt.setDate(10, new java.sql.Date(System.currentTimeMillis()));
      pstmt.setTime(11, new Time(System.currentTimeMillis()));
      pstmt.setTimestamp(12, new Timestamp(System.currentTimeMillis()));

      // 设置字符流
      File file = new File(&quot;infilename1&quot;);
      FileInputStream is = new FileInputStream(file);
      pstmt.setAsciiStream(13, is, (int) file.length());

      // 设置二进制字节流
      file = new File(&quot;infilename2&quot;);
      is = new FileInputStream(file);
      pstmt.setBinaryStream(14, is, (int) file.length());

      // 设置blob
      file = new File(&quot;infilename3&quot;);
      is = new FileInputStream(file);
      pstmt.setBinaryStream(15, is, (int) file.length());

      // 插入数据
      pstmt.executeUpdate();
    } catch (SQLException e) {
    } catch (FileNotFoundException e) {
    }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2010/1365_insert-data-to-the-database-using-preparedstatement.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java关于路径获取的问题</title>
		<link>http://a18zhizao.com/y2010/1307_java-on-the-path-to-get-the-issue.html</link>
		<comments>http://a18zhizao.com/y2010/1307_java-on-the-path-to-get-the-issue.html#comments</comments>
		<pubDate>Fri, 05 Mar 2010 07:35:58 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[路径]]></category>

		<guid isPermaLink="false">http://a18zhizao.com/?p=1307</guid>
		<description><![CDATA[痛苦的一下午。今天把我做的系统进行移植。不过出毛病了。由于不在IDE下。我也不知道出错信息是什么。这时候才发现LOG是多么重要的了。马上补加LOG类。可是到生成文件的地方卡住了。如何才能在网站的根目录LOGS下生成日志呢。求助G大神。在这里总结下（毛病找到了。忘记装ORACLE的DBA驱动了。。汗） 关于路径问题的API 第一 JSP的路径问题 1.1 JSP中获得当前应用的相对路径和绝对路径 　　根目录所对应的绝对路径:request.getRequestURI() 　　文件的绝对路径 　:application.getRealPath(request.getRequestURI()); 　　当前web应用的绝对路径 :application.getRealPath("/"); 　　取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent() 1.2 Servlet中获得当前应用的相对路径和绝对路径 　　根目录所对应的绝对路径:request.getServletPath(); 　　文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI()) 　　当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/"); 1.3 ServletContext对象获得几种方式：javax.servlet.http.HttpSession.getServletContext() 　　javax.servlet.jsp.PageContext.getServletContext() 　　javax.servlet.ServletConfig.getServletContext() 第二 java 的Class中获得相对路径，绝对路径的方法 2.1单独的Java类中获得绝对路径 　　根据java.io.File的Doc文挡，可知: 　　默认情况下new File("/")代表的目录为：System.getProperty("user.dir")。 　　以下程序获得执行类的当前路径 2.2服务器中的Java类获得当前路径 　　(1).Weblogic 　　WebApplication的系统文件根目录是你的weblogic安装所在根目录。例如：如果你的weblogic安装在c:\bea \weblogic700.....那么，你的文件根路径就是c:\.所以，有两种方式能够让你访问你的服务器端的文件：a.使用绝对路径：比如将你的参数文件放在c:\yourconfig\yourconf.properties，直接使用 new FileInputStream("yourconfig/yourconf.properties");b.使用相对路径：相对路径的根目录就是你的 webapplication的根路径，即WEB-INF的上一级目录，将你的参数文件放在yourwebapp\yourconfig \yourconf.properties，这样使用：new FileInputStream("./yourconfig/yourconf.properties");这两种方式均可，自己选择。 　　(2).Tomcat 　　在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin 　　(3).Resin 　　不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET的路径为根.比如用新建文件法测试File f = new File("a.htm");这个a.htm在resin的安装目录下 　　(4).如何读相对路径哪? 　　在Java文件中getResource或getResourceAsStream均可 　　例：getClass().getResourceAsStream(filePath);//filePath可以是" /filename",这里的/代表web发布根路径下WEB-INF/classes默认使用该方法的路径是：WEB-INF/classes。已经在 Tomcat中测试。 　　总结： [...]]]></description>
			<content:encoded><![CDATA[<p>   痛苦的一下午。今天把我做的系统进行移植。不过出毛病了。由于不在IDE下。我也不知道出错信息是什么。这时候才发现LOG是多么重要的了。马上补加LOG类。可是到生成文件的地方卡住了。如何才能在网站的根目录LOGS下生成日志呢。求助G大神。在这里总结下（毛病找到了。忘记装ORACLE的DBA驱动了。。汗）<br />
关于路径问题的API<br />
<strong>第一 JSP的路径问题</strong><br />
1.1 JSP中获得当前应用的相对路径和绝对路径<br />
　　根目录所对应的绝对路径:request.getRequestURI()<br />
　　文件的绝对路径 　:application.getRealPath(request.getRequestURI());<br />
　　当前web应用的绝对路径 :application.getRealPath("/");<br />
　　取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()<br />
1.2 Servlet中获得当前应用的相对路径和绝对路径<br />
　　根目录所对应的绝对路径:request.getServletPath();<br />
　　文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI())<br />
　　当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");<br />
1.3 ServletContext对象获得几种方式：javax.servlet.http.HttpSession.getServletContext()<br />
　　javax.servlet.jsp.PageContext.getServletContext()<br />
　　javax.servlet.ServletConfig.getServletContext()<br />
<span id="more-1307"></span><br />
<strong>第二 java 的Class中获得相对路径，绝对路径的方法</strong><br />
2.1单独的Java类中获得绝对路径<br />
　　根据java.io.File的Doc文挡，可知:<br />
　　默认情况下new File("/")代表的目录为：System.getProperty("user.dir")。<br />
　　以下程序获得执行类的当前路径</p>
<pre class="brush: java; title: ; notranslate"> 　　
package org.zhizao.file;
　　import java.io.File;
　　public class FileTest {
　　public static void main(String[] args) throws Exception {
　　System.out.println(Thread.currentThread().getContextClassLoader().getResource(&quot;&quot;));
　　System.out.println(FileTest.class.getClassLoader().getResource(&quot;&quot;));
　　System.out.println(ClassLoader.getSystemResource(&quot;&quot;));
　　System.out.println(FileTest.class.getResource(&quot;&quot;));
　　System.out.println(FileTest.class.getResource(&quot;/&quot;)); //Class文件所在路径
　　System.out.println(new File(&quot;/&quot;).getAbsolutePath());
　　System.out.println(System.getProperty(&quot;user.dir&quot;));
　　}
}
</pre>
<p>2.2服务器中的Java类获得当前路径<br />
　　(1).Weblogic<br />
　　WebApplication的系统文件根目录是你的weblogic安装所在根目录。例如：如果你的weblogic安装在c:\bea \weblogic700.....那么，你的文件根路径就是c:\.所以，有两种方式能够让你访问你的服务器端的文件：a.使用绝对路径：比如将你的参数文件放在c:\yourconfig\yourconf.properties，直接使用 new FileInputStream("yourconfig/yourconf.properties");b.使用相对路径：相对路径的根目录就是你的 webapplication的根路径，即WEB-INF的上一级目录，将你的参数文件放在yourwebapp\yourconfig \yourconf.properties，这样使用：new FileInputStream("./yourconfig/yourconf.properties");这两种方式均可，自己选择。<br />
　　(2).Tomcat<br />
　　在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin<br />
　　(3).Resin<br />
　　不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET的路径为根.比如用新建文件法测试File f = new File("a.htm");这个a.htm在resin的安装目录下<br />
　　(4).如何读相对路径哪?<br />
　　在Java文件中getResource或getResourceAsStream均可<br />
　　例：getClass().getResourceAsStream(filePath);//filePath可以是" /filename",这里的/代表web发布根路径下WEB-INF/classes默认使用该方法的路径是：WEB-INF/classes。已经在 Tomcat中测试。<br />
　　总结：<br />
　　通过上面内容的使用，可以解决在Web应用服务器端，移动文件，查找文件，复制删除文件等操作，同时对服务器的相对地址，绝对地址概念更加清晰。建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻对其他方面的理解可以更加深入和透彻。</p>
<p>关于路径问题的类<br />
一种方式：要创建一个新对象才能获取</p>
<pre class="brush: java; title: ; notranslate">
package org.zhizao.test;
/**
*
* java类获取web应用的根目录
*
*/
public class PathUtil {

/**
   * @param args
   */
public static void main(String[] args)throws Exception {
   PathUtil p = new PathUtil();
   System.out.println(p.getWebClassesPath());
   System.out.println(p.getWebInfPath());
   System.out.println(p.getWebRoot());
}

public String getWebClassesPath() {
   String path = getClass().getProtectionDomain().getCodeSource()
     .getLocation().getPath();
   return path;

}

public String getWebInfPath() throws IllegalAccessException{
   String path = getWebClassesPath();
   if (path.indexOf(&quot;WEB-INF&quot;) &gt; 0) {
    path = path.substring(0, path.indexOf(&quot;WEB-INF&quot;)+8);
   } else {
    throw new IllegalAccessException(&quot;路径获取错误&quot;);
   }
   return path;
}

public String getWebRoot() throws IllegalAccessException{
   String path = getWebClassesPath();
   if (path.indexOf(&quot;WEB-INF&quot;) &gt; 0) {
    path = path.substring(0, path.indexOf(&quot;WEB-INF/classes&quot;));
   } else {
    throw new IllegalAccessException(&quot;路径获取错误&quot;);
   }
   return path;
}
}
</pre>
<p>第二种方式：写在在静态方法里，无需new一个对象</p>
<pre class="brush: java; title: ; notranslate">
package org.zhizao.util;
/**
* 路径工具
* 2009-10-10
* @author IXR
* @version 1.0
*/
public class PathUtil {
/**
* 获取程序根目录磁盘路径(Java EE版)
* 注:如果是WEB项目在会返回WebRoot的根路径../
*    而不是../WEB-INF/classes/
* @return 根目录磁盘路径
*/
public static String getRootPath(){
String path = null;
try {
   path = PathUtil.class.getResource(&quot;/&quot;).toURI().getPath();
   path = path.substring(1, path.length()-1);
   String str = &quot;WEB-INF/classes&quot;;
   int i = path.indexOf(str);
   if(i &gt; 0){
    path = path.substring(0, i);
   }
} catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}
return path;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2010/1307_java-on-the-path-to-get-the-issue.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle导出数据</title>
		<link>http://a18zhizao.com/y2010/1300_oracle-export-data.html</link>
		<comments>http://a18zhizao.com/y2010/1300_oracle-export-data.html#comments</comments>
		<pubDate>Wed, 03 Mar 2010 01:48:43 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[exp]]></category>
		<category><![CDATA[imp]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://a18zhizao.com/?p=1300</guid>
		<description><![CDATA[导出数据两种方式： 一、以OMS的方式（最后失败了。使用的命令行方式）： 1、  以OMS的方式登录数据库。默认用户名为sysman，密码为oem_temp，如果没有改密码登录成功后会弹会一个更改口令的对话框。输入你的新密码和确认密码，然后确定。 注：如果忘记了新密码，也可以恢复到默认密码状态下：在%home_path%\oracle90\sysman\admin目录中有一个vduResetSysman.sql文件，执行，就能恢复到默认密码。 2、  选择“配置”&#124;“首选项”，打开“编辑 管理员首选项”对话框，切换到“首选身份证明”页  3、  选中所连接到的节点即机器名，输入此机器的登录名称和密码。选中导出的数据库，输入具有用户名、口令、确认口令以及角色。然后确认。 4、  在导出数据之前，我们需确保在第三步中指定的节点登录用户具有批处理作业登录的权利，所以打开指定节点机器的“控制面板”&#124;“管理工具”&#124;“本地安全策略”，如下图所示。 5、  在左窗口中选择“本地策略”&#124;“用户权利指派”，在右窗口中选择“作为批处理作业登录”，双击，在弹出的对话框中选择要第三步中指定的用户，然后确定。 6、  展开OEMC中的“数据库”，然后连接要导出数据的数据库，在此数据库上点击右键，选择“数据管理”&#124;“导出”，打开导出向导。 7、  一直“下一步”直到选择导出类型页面。如下图所示。 8、  对于不同的数据库用户，这个界面是不同的。如上图为具有DBA权限的用户的选择界面。选择要导出的类型，这里选择的是数据库。然后选择“完成”（我们在这里省去了中间的一些步骤）。 9、  在“作业”里可以查看操作是否成功。如果失败还可以查看失败的原因。 二、以命令行方式 Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件，imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库，一个用来测试，一个用来正式使用。 执行环境：可以在SQLPLUS.EXE或者DOS（命令行）中执行， DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径， 该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。 oracle用java编写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。 SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。 下面介绍的是导入导出的实例。 数据导出： 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 exp system/manager@TEST file=d:\daochu.dmp full=y 2 将数据库中system用户与sys用户的表导出 exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) 3 将数据库中的表inner_notify、notify_staff_relat导出 exp aichannel/aichannel@TESTDB2 file= [...]]]></description>
			<content:encoded><![CDATA[<p>导出数据两种方式：<br />
<strong>一、以OMS的方式（最后失败了。使用的命令行方式）：</strong><br />
1、  以OMS的方式登录数据库。默认用户名为sysman，密码为oem_temp，如果没有改密码登录成功后会弹会一个更改口令的对话框。输入你的新密码和确认密码，然后确定。</p>
<p>注：如果忘记了新密码，也可以恢复到默认密码状态下：在%home_path%\oracle90\sysman\admin目录中有一个vduResetSysman.sql文件，执行，就能恢复到默认密码。<br />
<span id="more-1300"></span><br />
2、  选择“配置”|“首选项”，打开“编辑 管理员首选项”对话框，切换到“首选身份证明”页</p>
<p><img src="http://pic.yupoo.com/a18ccms/646858f134b0/zajv6786.gif" alt="" /></p>
<p> 3、  选中所连接到的节点即机器名，输入此机器的登录名称和密码。选中导出的数据库，输入具有用户名、口令、确认口令以及角色。然后确认。</p>
<p>4、  在导出数据之前，我们需确保在第三步中指定的节点登录用户具有批处理作业登录的权利，所以打开指定节点机器的“控制面板”|“管理工具”|“本地安全策略”，如下图所示。</p>
<p><img src="http://pic.yupoo.com/a18ccms/964038f134b0/h7oet9lg.gif" alt="" /></p>
<p>5、  在左窗口中选择“本地策略”|“用户权利指派”，在右窗口中选择“作为批处理作业登录”，双击，在弹出的对话框中选择要第三步中指定的用户，然后确定。</p>
<p>6、  展开OEMC中的“数据库”，然后连接要导出数据的数据库，在此数据库上点击右键，选择“数据管理”|“导出”，打开导出向导。</p>
<p>7、  一直“下一步”直到选择导出类型页面。如下图所示。</p>
<p><img src="http://pic.yupoo.com/a18ccms/045368f134b1/ybe8ruqm.gif" alt="" /></p>
<p>8、  对于不同的数据库用户，这个界面是不同的。如上图为具有DBA权限的用户的选择界面。选择要导出的类型，这里选择的是数据库。然后选择“完成”（我们在这里省去了中间的一些步骤）。</p>
<p>9、  在“作业”里可以查看操作是否成功。如果失败还可以查看失败的原因。</p>
<p><strong>二、以命令行方式</strong><br />
    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件，imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库，一个用来测试，一个用来正式使用。</p>
<p>执行环境：可以在SQLPLUS.EXE或者DOS（命令行）中执行，<br />
 DOS中可以执行时由于 在oracle 8i 中  安装目录\ora81\BIN被设置为全局路径，<br />
 该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。<br />
 oracle用java编写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。<br />
 SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。</p>
<p>下面介绍的是导入导出的实例。<br />
数据导出：<br />
 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<br />
   exp system/manager@TEST file=d:\daochu.dmp full=y<br />
 2 将数据库中system用户与sys用户的表导出<br />
   exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)<br />
 3 将数据库中的表inner_notify、notify_staff_relat导出<br />
    exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) </p>
<p> 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />
   exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"</p>
<p>  上面是常用的导出，对于压缩，既用winzip把dmp文件可以很好的压缩。<br />
  也可以在上面命令后面 加上 compress=y 来实现。</p>
<p>数据的导入<br />
 1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<br />
   imp system/manager@TEST  file=d:\daochu.dmp<br />
   imp aichannel/aichannel@HUST full=y  file=file= d:\data\newsmgnt.dmp ignore=y<br />
   上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<br />
   在后面加上 ignore=y 就可以了。<br />
 2 将d:\daochu.dmp中的表table1 导入<br />
 imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) </p>
<p> 基本上上面的导入导出够用了。不少情况要先是将表彻底删除，然后导入。</p>
<p>注意：<br />
 操作者要有足够的权限，权限不够它会提示。<br />
 数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。</p>
<p>附录一：<br />
 给用户增加导入数据权限的操作<br />
第一,启动sql*puls<br />
第二，以system/manager登陆<br />
第三，create user 用户名 IDENTIFIED BY 密码 （如果已经创建过用户，这步可以省略）<br />
第四，GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,<br />
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,<br />
   DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字<br />
第五, 运行-cmd-进入dmp文件所在的目录,<br />
   imp userid=system/manager full=y file=*.dmp<br />
   或者 imp userid=system/manager full=y file=filename.dmp</p>
<p> 执行示例:<br />
 F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp</p>
<p>屏幕显示<br />
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2010<br />
(c) Copyright 2000 Oracle Corporation.  All rights reserved.</p>
<p>连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production<br />
With the Partitioning option<br />
JServer Release 8.1.7.0.0 - Production</p>
<p>经由常规路径导出由EXPORT:V08.01.07创建的文件<br />
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<br />
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)<br />
. 正在将AICHANNEL的对象导入到 AICHANNEL<br />
. . 正在导入表                  "INNER_NOTIFY"          4行被导入<br />
准备启用约束条件...<br />
成功终止导入，但出现警告。</p>
<p>附录二：<br />
 Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.<br />
  先建立import9.par,<br />
  然后，使用时命令如下：imp parfile=/filepath/import9.par<br />
  例 import9.par 内容如下：<br />
      FROMUSER=TGPMS<br />
        TOUSER=TGPMS2     （注：把表的拥有者由FROMUSER改为TOUSER，FROMUSER和TOUSER的用户可以不同）<br />
      ROWS=Y<br />
        INDEXES=Y<br />
        GRANTS=Y<br />
        CONSTRAINTS=Y<br />
        BUFFER=409600<br />
        file==/backup/ctgpc_20030623.dmp<br />
        log==/backup/import_20030623.log</p>
<p>Oracle数据库导出(exp)导入(imp)说明<br />
<strong>exp</strong><br />
将数据库内的各对象以二进制方式下载成dmp文件，方便数据迁移。<br />
buffer：下载数据缓冲区，以字节为单位，缺省依赖操作系统<br />
consistent：下载期间所涉及的数据保持read only，缺省为n<br />
direct：使用直通方式 ，缺省为n<br />
feeback：显示处理记录条数，缺省为0，即不显示<br />
file：输出文件，缺省为expdat.dmp<br />
filesize：输出文件大小，缺省为操作系统最大值<br />
indexes：是否下载索引，缺省为n，这是指索引的定义而非数据，exp不下载索引数据<br />
log：log文件，缺省为无，在标准输出显示<br />
owner：指明下载的用户名<br />
query：选择记录的一个子集<br />
rows：是否下载表记录<br />
tables：输出的表名列表<br />
导出整个实例<br />
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y<br />
user应具有dba权限<br />
导出某个用户所有对象<br />
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000<br />
导出一张或几张表<br />
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000<br />
导出某张表的部分数据<br />
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\’…\’ and col2 \<…\”<br />
不可用于嵌套表<br />
以多个固定大小文件方式导出某张表<br />
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000<br />
这种做法通常用在：表数据量较大，单个dump文件可能会超出文件系统的限制<br />
直通路径方式<br />
direct=y，取代buffer选项，query选项不可用<br />
有利于提高下载速度<br />
consistent选项<br />
自export启动后，consistent=y冻结来自其它会话的对export操作的数据对象的更新，这样可以保证dump结果的一致性。但这个过程不能太长，以免回滚段和联机日志消耗完<br />
<strong>imp </strong><br />
将exp下载的dmp文件上载到数据库内。<br />
buffer：上载数据缓冲区，以字节为单位，缺省依赖操作系统<br />
commit：上载数据缓冲区中的记录上载后是否执行提交<br />
feeback：显示处理记录条数，缺省为0，即不显示<br />
file：输入文件，缺省为expdat.dmp<br />
filesize：输入文件大小，缺省为操作系统最大值<br />
fromuser：指明来源用户方<br />
ignore：是否忽略对象创建错误，缺省为n，在上载前对象已被建立往往是一个正常现象，所以此选项建议设为y<br />
indexes：是否上载索引，缺省为n，这是指索引的定义而非数据，如果上载时索引已建立，此选项即使为n也无效，imp自动更新索引数据<br />
log：log文件，缺省为无，在标准输出显示<br />
rows：是否上载表记录<br />
tables：输入的表名列表<br />
touser：指明目的用户方<br />
导入整个实例<br />
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000<br />
导入某个用户所有对象<br />
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000<br />
导入一张或几张表<br />
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000<br />
以多个固定大小文件方式导入某张表<br />
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000 </p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2010/1300_oracle-export-data.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jsp标签jsp:setProperty用法</title>
		<link>http://a18zhizao.com/y2009/1139_jsp-tag-jsp-setproperty-usage.html</link>
		<comments>http://a18zhizao.com/y2009/1139_jsp-tag-jsp-setproperty-usage.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 03:07:49 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[setproperty]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/y2009/1139_jsp-tag-jsp-setproperty-usage.html</guid>
		<description><![CDATA[用来设置已经实例化的Bean对象的属性 第一种形式： 该形式是设置Bean 属性的快捷方式.在Bean 中属性的名字，类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的，Jsp内在机制会把这些参数转化成Bean属性对应的类型。 property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。 第二种形式: 使用request对象中的一个参数值来指定Bean中的一个属性值。在这个语法中，property指定Bean 的属性名，而且Bean 属性和request参数的名字应相同。也就是说，如果在Bean 中有setUserName(String userName)方法，那么，propertyName的值就是"userName".这种形式灵活性较强,可以有选择的对Bean中的属性赋值 第三种形式: value用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如，boolean和Boolean类型的属性值（比如“true”）通过Boolean.valueOf转换，int和Integer类型的属性值（比如“42”）通过Integer.valueOf转换。 第四种形式: param指定用哪个请求参数作为Bean属性的值。Bean 属性和request参数的名字可以不同。如果当前请求没有参数，则什么事情也不做，系统不会把null传递给Bean属性的set方法。因此，你可以让Bean自己提供默认属性值，只有当请求参数明确指定了新值时才修改默认属性值。 例如，下面的代码片断表示：如果存在numItems请求参数的话，把numberOfItems属性的值设置为请求参数numItems的值；否则什么也不做。 下面是一个简单的例子:]]></description>
			<content:encoded><![CDATA[<p><jsp:setProperty>用来设置已经实例化的Bean对象的属性<br />
第一种形式：<br />
<jps:setProperty name = "JavaBean实例名"  property = "*"/><br />
该形式是设置Bean 属性的快捷方式.在Bean 中属性的名字，类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的，Jsp内在机制会把这些参数转化成Bean属性对应的类型。<br />
property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。<br />
第二种形式:<br />
<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" /><br />
使用request对象中的一个参数值来指定Bean中的一个属性值。在这个语法中，property指定Bean 的属性名，而且Bean 属性和request参数的名字应相同。也就是说，如果在Bean 中有setUserName(String userName)方法，那么，propertyName的值就是"userName".这种形式灵活性较强,可以有选择的对Bean中的属性赋值<br />
第三种形式:<br />
<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "BeanValue"/><br />
value用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如，boolean和Boolean类型的属性值（比如“true”）通过Boolean.valueOf转换，int和Integer类型的属性值（比如“42”）通过Integer.valueOf转换。<br />
第四种形式:<br />
<jsp:setProperty name = "JavaBean实例名" property = "propertyName" param = "request对象中的参数名" /><br />
  param指定用哪个请求参数作为Bean属性的值。Bean 属性和request参数的名字可以不同。如果当前请求没有参数，则什么事情也不做，系统不会把null传递给Bean属性的set方法。因此，你可以让Bean自己提供默认属性值，只有当请求参数明确指定了新值时才修改默认属性值。</p>
<p>例如，下面的代码片断表示：如果存在numItems请求参数的话，把numberOfItems属性的值设置为请求参数numItems的值；否则什么也不做。</p>
<p><jsp:setProperty name="orderBean" property="numberOfItems" param="numItems" /><br />
下面是一个简单的例子:</p>
<pre class="brush: java; title: ; notranslate">
//sampleBean.java
package MyJavaBeanPackage;
public class SampleBean2 {
	private String id;
	private String age;
	private String name;
	private String sex;
	private String addr;
	public SampleBean2() {
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public void setId(String id) {
		this.id = id;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getId() {
		return id;
	}
	public String getAge() {
		return age;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
}
</pre>
<pre class="brush: xml; title: ; notranslate">
//SampleBean.html
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;使用&lt;jsp:getProperty&gt;和&lt;jsp:setProperty&gt;标记&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;form name=&quot;form1&quot; action=&quot;Sample2.jsp&quot; method=&quot;post&quot;&gt;
            &lt;p align=&quot;center&quot;&gt;
                编号
                 &lt;input type=&quot;text&quot; name=&quot;id&quot;&gt;
             &lt;/p&gt;
             &lt;p align=&quot;center&quot;&gt;
                 姓名
                 &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;
             &lt;/p&gt;
             &lt;p align=&quot;center&quot;&gt;
                 性别
                 &lt;select name=&quot;TheSex&quot; id=&quot;sex&quot;&gt;
                     &lt;option value=&quot;男&quot; selected&gt;
                         男
                     &lt;/option&gt;
                     &lt;option value=&quot;女&quot;&gt;
                         女
                     &lt;/option&gt;
                 &lt;/select&gt;
             &lt;/p&gt;
             &lt;p align=&quot;center&quot;&gt;
                 年龄
                 &lt;input type=&quot;text&quot; name=&quot;TheAge&quot;&gt;
             &lt;/p&gt;
             &lt;p align=&quot;center&quot;&gt;
                 &lt;input type=&quot;submit&quot; value=&quot;提交&quot;&gt;
                 &lt;input type=&quot;reset&quot; value=&quot;重置&quot;&gt;
             &lt;/p&gt;
         &lt;/form&gt;
     &lt;/body&gt;
 &lt;/html&gt;
</pre>
<pre class="brush: java; title: ; notranslate">
//SampleBean.jsp
&lt;%@ page language=&quot;java&quot; contentType=&quot;text/html;charset = GBK&quot;%&gt;
&lt;jsp:useBean id=&quot;sampleBean2&quot; class=&quot;MyJavaBeanPackage.SampleBean2&quot; /&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;在JavaBean中存放数据&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;%--方法一
    &lt;jsp:setProperty name = &quot;sampleBean2&quot; property = &quot;*&quot; /&gt;
   --%&gt;
         &lt;%-- 方法二 --%&gt;
         &lt;jsp:setProperty name=&quot;sampleBean2&quot; property=&quot;id&quot; /&gt;
         &lt;jsp:setProperty name=&quot;sampleBean2&quot; property=&quot;name&quot; /&gt;
         &lt;%--方法三 --%&gt;
         &lt;jsp:setProperty name=&quot;sampleBean2&quot; property=&quot;addr&quot; value=&quot;洛阳师范学院&quot; /&gt;
         &lt;%-- 方法四 bean属性的名字可以与request参数不同--%&gt;
         &lt;jsp:setProperty name=&quot;sampleBean2&quot; property=&quot;sex&quot; param=&quot;TheSex&quot; /&gt;
         &lt;jsp:setProperty name=&quot;sampleBean2&quot; property=&quot;age&quot; param=&quot;TheAge&quot; /&gt;
         &lt;center&gt;
             编号:&lt;jsp:getProperty name=&quot;sampleBean2&quot; property=&quot;id&quot; /&gt;&lt;br&gt;
             姓名:&lt;jsp:getProperty name=&quot;sampleBean2&quot; property=&quot;name&quot; /&gt;&lt;br&gt;
             性别:&lt;jsp:getProperty name=&quot;sampleBean2&quot; property=&quot;sex&quot; /&gt;&lt;br&gt;
             年龄:&lt;jsp:getProperty name=&quot;sampleBean2&quot; property=&quot;age&quot; /&gt;&lt;br&gt;
             住址:&lt;jsp:getProperty name=&quot;sampleBean2&quot; property=&quot;addr&quot; /&gt;&lt;br&gt;
         &lt;/center&gt;
     &lt;/body&gt;
 &lt;/html&gt;
 </pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/1139_jsp-tag-jsp-setproperty-usage.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>java 正则表达式pattern类Matcher类</title>
		<link>http://a18zhizao.com/y2009/1061_java-regular-expression-pattern-class-matcher-class.html</link>
		<comments>http://a18zhizao.com/y2009/1061_java-regular-expression-pattern-class-matcher-class.html#comments</comments>
		<pubDate>Wed, 11 Nov 2009 05:40:15 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Matcher]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[正则]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=1061</guid>
		<description><![CDATA[Pattern类： 例子： Pattern pattern = Pattern.compile("[,\\s]+"); String[] result = pattern.split("one two three,four,five, six"); for(int i = 0; i]]></description>
			<content:encoded><![CDATA[<p>Pattern类：<br />
例子：</p>
<pre lang="java">       Pattern pattern = Pattern.compile("[,\\s]+");
        String[] result = pattern.split("one two three,four,five, six");
        for(int i = 0; i<result.length; i++){
            System.out.println(result[i]);
        }</pre>
<p>输出结果是：<br />
one<br />
two<br />
three<br />
four<br />
five<br />
six<br />
Pattern类的静态方法compile用来编译正则表达式，在此[,\\s]+表示若干个","或者若干个空格匹配<br />
split方法使用正则匹配将字符串切割成各子串并且返回</p>
<p>Matcher类：<br />
注意，Matcher的获得是通过Pattern.matcher(CharSequence charSequence);输入必须是实现了CharSequence接口的类<br />
常用方法：<br />
matches()判断整个输入串是否匹配，整个匹配则返回true<br />
例如下面会输出true</p>
<pre lang="java">
        String str1 = "hello";
        Pattern pattern1 = Pattern.compile("hello");
        Matcher matcher1 = pattern1.matcher(str1);
        System.out.println(matcher1.matches());
</pre>
<p>lookingAt()从头开始寻找，找到匹配则返回true<br />
例如下面会输出true</p>
<pre lang="java">       String str2 = "hello yangfan!";
        Pattern pattern2 = Pattern.compile("hello");
        Matcher matcher2 = pattern2.matcher(str2);
        System.out.println(matcher2.lookingAt());
</pre>
<p>find()扫描输入串，寻找下一个匹配子串，存在则返回true<br />
例如下面将会将所有no替换成yes</p>
<pre lang="java">        Pattern pattern = Pattern.compile("no");
        Matcher matcher = pattern.matcher("Does jianyue love yangfan? no;" +
                "Does jianyue love yangfan? no;Does jianyue love yangfan? no;");
        StringBuffer sb = new StringBuffer();
        boolean find = matcher.find();
        while(find){
            matcher.appendReplacement(sb, "yes");
            find = matcher.find();
        }
        matcher.appendTail(sb);
        System.out.println(sb.toString());
</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/1061_java-regular-expression-pattern-class-matcher-class.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>String,StringBuffer与StringBuilder的区别?</title>
		<link>http://a18zhizao.com/y2009/1060_string-stringbuffer-and-stringbuilders-the-difference.html</link>
		<comments>http://a18zhizao.com/y2009/1060_string-stringbuffer-and-stringbuilders-the-difference.html#comments</comments>
		<pubDate>Wed, 11 Nov 2009 05:38:23 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[StringBuffer]]></category>
		<category><![CDATA[StringBuilder]]></category>
		<category><![CDATA[区别]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=1060</guid>
		<description><![CDATA[String 字符串常量 StringBuffer 字符串变量（线程安全） StringBuilder 字符串变量（非线程安全） 简要的说， String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象，然后将指针指向新的 String 对象，所以经常改变内容的字符串最好不要用 String ，因为每次生成对象都会对系统性能产生影响，特别当内存中无引用对象多了以后， JVM 的 GC 就会开始工作，那速度是一定会相当慢的。 而如果是使用 StringBuffer 类则结果就不一样了，每次结果都会对 StringBuffer 对象本身进行操作，而不是生成新的对象，再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ，特别是字符串对象经常改变的情况下。而在某些特别情况下， String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接，所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢，而特别是以下的字符串对象生成中， String 效率是远要比 StringBuffer 快的： String S1 = “This is only a” + [...]]]></description>
			<content:encoded><![CDATA[<p>String 字符串常量<br />
StringBuffer 字符串变量（线程安全）<br />
StringBuilder 字符串变量（非线程安全）<br />
 简要的说， String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象，然后将指针指向新的 String 对象，所以经常改变内容的字符串最好不要用 String ，因为每次生成对象都会对系统性能产生影响，特别当内存中无引用对象多了以后， JVM 的 GC 就会开始工作，那速度是一定会相当慢的。<br />
 而如果是使用 StringBuffer 类则结果就不一样了，每次结果都会对 StringBuffer 对象本身进行操作，而不是生成新的对象，再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ，特别是字符串对象经常改变的情况下。而在某些特别情况下， String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接，所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢，而特别是以下的字符串对象生成中， String 效率是远要比 StringBuffer 快的：<br />
 String S1 = “This is only a” + “ simple” + “ test”;<br />
 StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);<br />
 你会很惊讶的发现，生成 String S1 对象的速度简直太快了，而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏，在 JVM 眼里，这个<br />
 String S1 = “This is only a” + “ simple” + “test”; 其实就是：<br />
 String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是，如果你的字符串是来自另外的 String 对象的话，速度就没那么快了，譬如：<br />
String S2 = “This is only a”;<br />
String S3 = “ simple”;<br />
String S4 = “ test”;<br />
String S1 = S2 +S3 + S4;<br />
这时候 JVM 会规规矩矩的按照原来的方式去做</p>
<p>在大部分情况下 StringBuffer > String<br />
StringBuffer<br />
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区，但不能修改。虽然在任意时间点上它都包含某种特定的字符序列，但通过某些方法调用可以改变该序列的长度和内容。<br />
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步，因此任意特定实例上的所有操作就好像是以串行顺序发生的，该顺序与所涉及的每个线程进行的方法调用顺序一致。<br />
StringBuffer 上的主要操作是 append 和 insert 方法，可重载这些方法，以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串，然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端；而 insert 方法则在指定的点添加字符。<br />
例如，如果 z 引用一个当前内容是“start”的字符串缓冲区对象，则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”，而 z.insert(4, "le") 将更改字符串缓冲区，使之包含“starlet”。<br />
在大部分情况下 StringBuilder > StringBuffer<br />
java.lang.StringBuilde<br />
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API，但不保证同步。该类被设计用作 StringBuffer 的一个简易替换，用在字符串缓冲区被单个线程使用的时候（这种情况很普遍）。如果可能，建议优先采用该类，因为在大多数实现中，它比 StringBuffer 要快。两者的方法基本相同。</p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/1060_string-stringbuffer-and-stringbuilders-the-difference.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[问答]Tomcat5的中文文件名的文件返回404错误</title>
		<link>http://a18zhizao.com/y2009/1039_q-tomcat5-chinese-filenames-return-a-404-error.html</link>
		<comments>http://a18zhizao.com/y2009/1039_q-tomcat5-chinese-filenames-return-a-404-error.html#comments</comments>
		<pubDate>Fri, 11 Sep 2009 01:51:58 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[文件]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=1039</guid>
		<description><![CDATA[问题 在Tomcat5的webapps下建一个目录（files）和两个文件(2.txt和记录1.txt)，如下： webapps\ROOT └─files 1.txt 记录1.txt 调用下面两个连接 http://localhost:8080/files/1.txt http://localhost:8080/files/%E8%AE%B0%E5%BD%951.txt 第一个正常下载。第二个就没办法下载。返回404。 解决方法： 修改改tomcat的server.xml文件（这里是解决含有中文的文件、图片的不能下载、显示的问题）： URIEncoding="UTF-8" 加上这句就可以识别中文文件了 这时应为Tomcat缺省是ISO-8859-1编码。使用URIEncoding是对URI二机制字节编码（%xx的形式）的设定，实现中文名识别。]]></description>
			<content:encoded><![CDATA[<p><strong>问题</strong><br />
在Tomcat5的webapps下建一个目录（files）和两个文件(2.txt和记录1.txt)，如下：<br />
  webapps\ROOT<br />
                  └─files<br />
                            1.txt<br />
                            记录1.txt</p>
<p>  调用下面两个连接</p>
<p>http://localhost:8080/files/1.txt</p>
<p>http://localhost:8080/files/%E8%AE%B0%E5%BD%951.txt</p>
<p>第一个正常下载。第二个就没办法下载。返回404。</p>
<p><strong>解决方法：</strong><br />
修改改tomcat的server.xml文件（这里是解决含有中文的文件、图片的不能下载、显示的问题）：</p>
<pre lang="xml" line="1"><connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/></pre>
<p>URIEncoding="UTF-8" 加上这句就可以识别中文文件了<br />
这时应为Tomcat缺省是ISO-8859-1编码。使用URIEncoding是对URI二机制字节编码（%xx的形式）的设定，实现中文名识别。</p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/1039_q-tomcat5-chinese-filenames-return-a-404-error.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eclipse Galileo(伽利略) RC1</title>
		<link>http://a18zhizao.com/y2009/982_eclipse-galileo-rc1.html</link>
		<comments>http://a18zhizao.com/y2009/982_eclipse-galileo-rc1.html#comments</comments>
		<pubDate>Wed, 27 May 2009 13:38:40 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[galileo]]></category>
		<category><![CDATA[rc1]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=982</guid>
		<description><![CDATA[Eclipse是著名的跨平台的自由集成开发环境（IDE）。]]></description>
			<content:encoded><![CDATA[<p><strong>Eclipse是著名的跨平台的自由集成开发环境（IDE）。最初主要用来Java语言开发，但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。<br />
</strong>Eclipse的本身只是一个框架平台，但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。</p>
<p>Galileo 是继europa,ganymede 后的eclipse 整合版，基于 eclipse SDK 3.5.</p>
<p><strong>下载:</strong><a href="http://www.eclipse.org/downloads/packages/release/galileo/rc1" target="_blank">Eclipse Galileo(伽利略) RC1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/982_eclipse-galileo-rc1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eclipse注释规范设置</title>
		<link>http://a18zhizao.com/y2009/902_notes-eclipse-norms-set.html</link>
		<comments>http://a18zhizao.com/y2009/902_notes-eclipse-norms-set.html#comments</comments>
		<pubDate>Thu, 12 Mar 2009 06:03:52 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[注解]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=902</guid>
		<description><![CDATA[文件注释标签： /** * @Title: ${file_name} * @Package ${package_name} * @Description: ${todo}(用一句话描述该文件做什么) * @author A18ccms A18ccms_gmail_com * @date ${date} ${time} * @version V1.0 */ 类型注释标签（类的注释）： /** * @ClassName: ${type_name} * @Description: ${todo}(这里用一句话描述这个类的作用) * @author A18ccms a18ccms_gmail_com * @date ${date} ${time} * * ${tags} */ 字段注释标签： /** * @Fields ${field} : ${todo}(用一句话描述这个变量表示什么) */ 构造函数标签： /** * Title: [...]]]></description>
			<content:encoded><![CDATA[<p>文件注释标签：</p>
<pre lang="java">
/**
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: ${todo}(用一句话描述该文件做什么)
 * @author A18ccms A18ccms_gmail_com
 * @date ${date} ${time}
 * @version V1.0
 */
</pre>
<p><span id="more-902"></span><br />
类型注释标签（类的注释）：</p>
<pre lang="java">
/**
 * @ClassName: ${type_name}
 * @Description: ${todo}(这里用一句话描述这个类的作用)
 * @author A18ccms a18ccms_gmail_com
 * @date ${date} ${time}
 *
 * ${tags}
 */
</pre>
<p>字段注释标签：</p>
<pre lang="java">
/**
 * @Fields ${field} : ${todo}(用一句话描述这个变量表示什么)
 */
</pre>
<p>构造函数标签：</p>
<pre lang="java">
/**
 *

Title: 

 *

Description: 

 * ${tags}
 */
</pre>
<p>方法标签：</p>
<pre lang="java">
/**
 * @Title: ${enclosing_method}
 * @Description: ${todo}(这里用一句话描述这个方法的作用)
 * @param ${tags}    设定文件
 * @return ${return_type}    返回类型
 * @throws
 */
</pre>
<p>覆盖方法标签：</p>
<pre lang="java">/* (非 Javadoc)
*

Title: ${enclosing_method}

*

Description: 

* ${tags}
* ${see_to_overridden}
*/</pre>
<p>代表方法标签：</p>
<pre lang="java">/**
* ${tags}
* ${see_to_target}
*/</pre>
<p>getter方法标签：</p>
<pre lang="java">/**
* @return ${bare_field_name}
*/</pre>
<p>setter方法标签：</p>
<pre lang="java">/**
* @param ${param} 要设置的 ${bare_field_name}
*/</pre>
<p>新建Java文件：</p>
<pre lang="java">
${filecomment}
${package_declaration}
/**
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: ${todo}(添加描述)
 * @author A18ccms A18ccms_gmail_com
 * @date ${date} ${time}
 * @version V1.0
 */
${typecomment}
${type_declaration}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/902_notes-eclipse-norms-set.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaDoc标签介绍</title>
		<link>http://a18zhizao.com/y2009/900_javadoc-tag-introduction.html</link>
		<comments>http://a18zhizao.com/y2009/900_javadoc-tag-introduction.html#comments</comments>
		<pubDate>Thu, 12 Mar 2009 04:34:05 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[javadoc]]></category>
		<category><![CDATA[标签]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=900</guid>
		<description><![CDATA[Javadoc注释由Javadoc标签和描述性文本组成，你可以为类、接口添加注释，也可为构造函数、值域、方法等类中的元素添加注释。我们来看一个带Javadoc注释的程序，其代码如下所示 package javadoc; import java.io.Serializable; /** * 描述人对象，拥有两个属性，分别是名字和性别。 * @see javadoc.tool.Car * @version 1.0, 2005-04-12 * @author 陈雄华 * @since JDK1.3 */ public class Person implements Serializable { /** 男性，值为{@value} */ public static final int MALE = 1; /** 女性，值为{@value} */ public static final int FEMALE = 2; /** 名字 */ protected String name; /** [...]]]></description>
			<content:encoded><![CDATA[<p>Javadoc注释由Javadoc标签和描述性文本组成，你可以为类、接口添加注释，也可为构造函数、值域、方法等类中的元素添加注释。我们来看一个带Javadoc注释的程序，其代码如下所示<br />
<span id="more-900"></span></p>
<pre lang="java">package javadoc;
import java.io.Serializable;
/**
*
描述人对象，拥有两个属性，分别是名字和性别。

* @see javadoc.tool.Car
* @version 1.0, 2005-04-12
* @author 陈雄华
* @since JDK1.3
*/

public class Person implements Serializable {
	/** 男性，值为{@value} */
	public static final int MALE = 1;
	/** 女性，值为{@value} */
	public static final int FEMALE = 2;
	/** 名字 */
	protected String name;
	/** 年龄 */
	protected int sex;
	/**
	* 构造一个Person实例。设定Person的名字和性别。
	*
	* @param name String 名字
	* @param sex int 性别，有效值是{@link #MALE 男性}和{@link #FEMALE}
	* @throws PersonArgumentException
	* @see javadoc.tool.Car#drive(int)
	*/

	public Person(String name, int sex) throws Exception {
		if (sex != MALE &amp;&amp; sex != FEMALE)
			throw new Exception("参数不正确");
		this.name = name;
		this.sex = sex;
	}
	/**
	* 获取性别代号。
	* @return int
	* @see MALE
	* @see FEMALE
	*/

	public int getSex() {
		return sex;
	}
	/**
	* 设置性别
	* @param sex int
	*/

	public void setSex(int sex) {
		this.sex = sex;
	}
}</pre>
<p>所有的Javadoc注释以/**开始，以*/结束，每个注释包含一些描述性的文本及若干个Javadoc标签。描述性的文本不但可以用平面文本，还可以使用HTML文本；Javadoc标签一般以"@"为前缀，有的也以"{@"为前缀，以"}"结束，如{@value }。</p>
<p>　　第3~9行是类的注释，它位于类定义代码行前，其中第3行中的pre标签是HTML标签，而第4~7行是Javadoc标签，这段注释映射在Javadoc文档中的显示样式如下图所示：<br />
<img src="http://hiphotos.baidu.com/luanxian/pic/item/a7adb0a106c0f680461064ee.jpg" border="0" alt="" /><br />
图 4 类注释<br />
　　第12、14行是常量的注释，位于常量定义代码行之前，{@value}表示将常量的值输出到Javadoc文档中，第16、18是成员变量的注释。成员常量和变量统称为值域，它们在一起显示：<br />
<img src="http://hiphotos.baidu.com/luanxian/pic/item/a1876a5972ff50212934f0ef.jpg" border="0" alt="" /><br />
图 5 成员常量/变量注释摘要<br />
　　除注释摘要以外，每个成员值域都有自己独立的详细注释。</p>
<p>　　第20~27是类构造函数的注释，构造函数有两句描述信息，第一句是"构造一个Person实例。"第二句是"设定Person的名字和性别。"，在构造函数的摘要列表中仅会显示第一句描述信息，用"。"分隔每句描述信息。而在构造函数的详细说明部分，则会显示所有的描述信息。这个原则同样适合于变量、方法的摘要，请看下面Javadoc帮助文档中关于方法摘要及方法详细说明，如图26-6，图26-7所示：<br />
<img src="http://hiphotos.baidu.com/luanxian/pic/item/8aae9845025a5034869473ef.jpg" border="0" alt="" /><br />
图 6 方法摘要<br />
<img src="http://hiphotos.baidu.com/luanxian/pic/item/0d660046b8cc3a026a63e5e8.jpg" border="0" alt="" /><br />
图 7 构造函数详细描述</p>
<p>　　构造函数的Javadoc标签比较多，@param为方法入参的说明，@throws为方法抛出异常的说明，&lt;@link&gt;标签将在Javadoc文档中提供一个链接到文档中其它部分的URL。</p>
<p>　　第35~40、45~48为方法的注释，@return为方法返回类型的说明，前面我们已经提到Javadoc文档包含了一个方法摘要列表，每个方法还对应一个详细描述部分，如getSex()的详细描述如下：<br />
<img src="http://hiphotos.baidu.com/luanxian/pic/item/c57396827f8b48b46d8119e8.jpg" border="0" alt="" /><br />
图 8 getSex()方法的详细说明</p>
<p>　　通过这个实例的描述，我们对Javadoc的标签和编写有了大致的了解。注释一般置于须注释元素的前面，如类的注释位于public class Xxx类声明代码的前面，而值域的注释位于public int xxx前面。为了编写优美的Javadoc文档，你不但需要掌握简单的HTML编写知识，更需要了解Javadoc标签的知识。</p>
<p>　　不同版本的JDK所支持的Javadoc标签是不一样的，此外还可以按标签适用的地方分成不同类型，如只适用于方法的@return标签，我们称之为方法标签，只适用于变量的@serial标签，我们称之为值域标签，以此类推。往往一个标签适用于多种地方，下表对常用Javadoc标签进行说明：</p>
<p>　　表 2?1 javadoc标签说明</p>
<table border="1" cellspacing="0" cellpadding="2" width="90%" align="center">
<tbody>
<tr>
<td width="23%">标签</td>
<td width="38%">说明</td>
<td width="6%">JDK 1.1 doclet</td>
<td width="6%">标准doclet</td>
<td width="27%">标签类型</td>
</tr>
<tr>
<td width="23%">@author 作者</td>
<td width="38%">作者标识</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">包、 类、接口</td>
</tr>
<tr>
<td width="23%">@version 版本号</td>
<td width="38%">版本号</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">包、 类、接口</td>
</tr>
<tr>
<td width="23%">@param 参数名 描述</td>
<td width="38%">方法的入参名及描述信息，如入参有特别要求，可在此注释。</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">构造函数、 方法</td>
</tr>
<tr>
<td width="23%">@return 描述</td>
<td width="38%">对函数返回值的注释</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">方法</td>
</tr>
<tr>
<td width="23%">@deprecated 过期文本</td>
<td width="38%">标识随着程序版本的提升，当前API已经过期，仅为了保证兼容性依然存在，以此告之开发者不应再用这个API。</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">包、类、接口、值域、构造函数、 方法</td>
</tr>
<tr>
<td width="23%">@throws异常类名</td>
<td width="38%">构造函数或方法所会抛出的异常。</td>
<td width="6%"> </td>
<td width="6%">√</td>
<td width="27%">构造函数、 方法</td>
</tr>
<tr>
<td width="23%">@exception 异常类名</td>
<td width="38%">同@throws。</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">构造函数、 方法</td>
</tr>
<tr>
<td width="23%">@see 引用</td>
<td width="38%">查看相关内容，如类、方法、变量等。</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">包、类、接口、值域、构造函数、 方法</td>
</tr>
<tr>
<td width="23%">@since 描述文本</td>
<td width="38%">API在什么程序的什么版本后开发支持。</td>
<td width="6%">√</td>
<td width="6%">√</td>
<td width="27%">包、类、接口、值域、构造函数、 方法</td>
</tr>
<tr>
<td width="23%">{@link包.类#成员 标签}</td>
<td width="38%">链接到某个特定的成员对应的文档中。</td>
<td width="6%"> </td>
<td width="6%">√</td>
<td width="27%">包、类、接口、值域、构造函数、 方法</td>
</tr>
<tr>
<td width="23%">{@value}</td>
<td width="38%">当对常量进行注释时，如果想将其值包含在文档中，则通过该标签来引用常量的值。</td>
<td width="6%"> </td>
<td width="6%">√(JDK1.4)</td>
<td width="27%">静态值域</td>
</tr>
</tbody>
</table>
<p>　　此外还有@serial、@serialField、@serialData、{@docRoot}、{@inheritDoc}、{@literal}、{@code} {@value arg}几个不常用的标签，由于不常使用，我们展开叙述，感兴趣的读者可以通过http://www.java.sun.com/j2se/javadoc查看它们详细的帮助信息。</p>
<p>　　下面我们对表中所列的几个不容易理解的Javadoc标签举例说明。</p>
<p>　　* @see</p>
<p>　　可以通过这个标签在当前点链接到某个类、值域或方法的说明上。为了链接到当前类的值域或方法上，在值域和方法名前必须带一个#号，如:<br />
<code>@see #getSex()<br />
@see #MALE</code><br />
    也可以通过这个标签链接到其它类的方法、值域的说明处，假设我们创建一个称为javadoc的工程，在这个工程包括了代码清单 1的javadoc.Person.java文件，现在我们在工程中再添加一个javadoc.tool.Car类，其程序代码如下所示：</p>
<pre lang="java">package javadoc.tool;
	/**
	* 汽车对象类。
	* @version 1.0, 2005-04-126.
	* @author 陈雄华
	* @since JDK1.38. */
public class Car {
	public Car() {
	}
	/**
	* 按某一方向驾驶汽车
	* @param direction int 方法
	* @param speed int 速度
	*/
	public void drive(int direction, int speed) {
		/* do sth */
	}
	/**
	* 朝前驾驶汽车
	* @param speed int 速度
	*/
	public void drive(int speed) {
		/* do sth */
	}
}</pre>
<p>如果Person类和Car类有关系，我们就希望在Person的Javadoc文档中给出一个参见的Car文档的链接，以便开发人员能够顺藤摸瓜找到有联系的Car类的说明文档。要达到这一目的可以在Person类的注释中给出一个@see的标签。</p>
<pre lang="java">/**
* 描述人对象，拥有两个属性，分别是名字和性别。
* @see javadoc.tool.Car
* @version 1.0, 2005-04-12
* @author 陈雄华
* @since JDK1.37. */</pre>
<p>请看第3行的@see标签，因为Car和Person类不在同一个包中，所以必须指定类的全名，当然，如果Person.java已经通过import chapter19.tool.Car;引入Car类，则@see可以直接用使用不带包的类名：@see Car。所以Javadoc中的@see引用注释和在Java代码中引用类是相似的。<br />
　　一个更特别的应用场合是从当前文档中链接到重载方法，如Car中有两个drive()的重载方法，如何通过@see链接到不同的重载方法和注释中去呢？因为仅通过方法名无法定位，所以在方法名里面还需要指定入参的类型，请看下面的例子：<br />
　　·@see javadoc.tool.Car#drive(int,int)：链接到drive(int direction,int speed)。<br />
　　·@see javadoc.tool.Car#drive(int)：链接到drive(int speed)。<br />
　　如果注释指定不正确，@see部分的注释将不出现在Javadoc文档中。<br />
　　* @link<br />
　　@link的@see很相似，唯一不同的是它可以嵌套在注释的描述文本中，在生成Javadoc文档时转换成一个关联链接。如Person的构造函数的注释中的@link：</p>
<pre lang="java">/**
* 构造一个Person实例。设定Person的名字和性别。
*
* @param name String 名字
* @param sex int 性别，有效值是{@link #MALE }和{@link #FEMALE}
* @throws PersonArgumentException
* @see javadoc.tool.Car#drive(int)
*/</pre>
<p>带{}的Javadoc标签象一个变量，在转换成文档后，将替换成一个具体的值或链接。</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/900_javadoc-tag-introduction.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

