<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lunch</title>
    <description></description>
    <link>http://lunch.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>用FreeMarker做CMS模板－－用户自定义模板</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/176175" style="color:red;">http://lunch.javaeye.com/blog/176175</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>　　最近在客户需求的要求就定制开发一套CMS，模板采用了Freemarker。最初的时候是设想用Freemarker标签开发的模板，也做网站页面的模板。然后可以直接在页面模板中使用开发好的标签，来显示网站内容。但总还是觉得这样的模板不够灵活，局限性比较大。后来通过和领导的商议决定采用一下方式，最终可以直接在Freemarker页面模板层对已封装好的API进行调用，可以实现在模板中的简单编程。</p><p>　　这种做法也是在探索中,如果大家觉得有什么不妥之处还望点拨。<img title="razz" src="../../../images/smiles/icon_razz.gif" border="0" alt="razz" /></p><ul><li><span style="color: #800000">模板存放在数据库中(通常我们都是编写Freemarker的ftl模板文件)</span></li><li><span style="color: #800000">采用StringTemplateLoader</span></li><li><span style="color: #800000">采用BeansWrapper</span></li></ul><p>　　首先我们要开发一个Servlet去拦截网站的请求,因为我们要去解析模板。FreeMarker为我们提供了一个现成的Servlet：freemarker.ext.servlet.FreemarkerServlet。但是这个不能满足我们的要求，它是按照URL请求的文件名称来去查找解析模板的，例如/article/demo.ftl，那么它只能去模板存放目录寻找demo.ftl模板。呵呵，其实这个 Servlet是未来让FreeMarker代替jsp使用的，而且他的它也无法装载数据库中的模板信息，所以我就参考它开发了自己的Servlet。</p><p>　　</p><pre name="code" class="java">package freemarker.ext.servlet;


/**
 * 参考自freemarker.ext.servlet.FreemarkerServlet
 *  支持自定义标签的使用，支持自定义扩展名拦截．
 */
public class FreeMarkerStringTemplateViewServlet extends
		javax.servlet.http.HttpServlet {

	/**
	 * 为子类提供Log功能，方便子类使用
	 */
	protected Log log = LogFactory.getLog(getClass());

	/** TemplatePath */
	private static final String TEMPLATE_PATH = &quot;TemplatePath&quot;;

	/** NoCache */
	private static final String NOCACHE = &quot;NoCache&quot;;

	/** TemplateDelay */
	private static final String TEMPLATE_DELAY = &quot;template_update_delay&quot;;

	/** DefaultEncoding */
	private static final String DEF_ENCODING = &quot;default_encoding&quot;;

	/** Request */
	public static final String KEY_REQUEST = &quot;Request&quot;;

	/** __FreeMarkerServlet.Request__ */
	public static final String KEY_REQUEST_PRIVATE =
										&quot;__FreeMarkerServlet.Request__&quot;;

	/** RequestParameters */
	public static final String KEY_REQUEST_PARAMETERS = &quot;RequestParameters&quot;;

	/** Session */
	public static final String KEY_SESSION = &quot;Session&quot;;

	/** Application */
	public static final String KEY_APPLICATION = &quot;Application&quot;;

	/** __FreeMarkerServlet.Application__ */
	public static final String KEY_APPLICATION_PRIVATE =
								&quot;__FreeMarkerServlet.Application__&quot;;

	/** JspTaglibs */
	public static final String KEY_JSP_TAGLIBS = &quot;JspTaglibs&quot;;

	/** .freemarker.Request */
	private static final String ATTR_REQUEST_MODEL = &quot;.freemarker.Request&quot;;

	/** .freemarker.RequestParameters */
	private static final String ATTR_REQUEST_PARAMETERS_MODEL =
											&quot;.freemarker.RequestParameters&quot;;

	/** .freemarker.Session */
	private static final String ATTR_SESSION_MODEL = &quot;.freemarker.Session&quot;;

	/** .freemarker.Application */
	private static final String ATTR_APPLICATION_MODEL =
													&quot;.freemarker.Application&quot;;

	/** .freemarker.JspTaglibs */
	private static final String ATTR_JSP_TAGLIBS_MODEL =
													&quot;.freemarker.JspTaglibs&quot;;

	/** 日期 */
	private static final String EXPIRATION_DATE;

	static {
		GregorianCalendar expiration = new GregorianCalendar();
		expiration.roll(Calendar.YEAR, -1);
		SimpleDateFormat httpDate = new SimpleDateFormat(
				&quot;yyyy-MMM-dd HH:mm:ss&quot;, java.util.Locale.CHINA);
		EXPIRATION_DATE = httpDate.format(expiration.getTime());
	}


	/**
	 * response返回是否使用缓存
	 */
	private boolean nocache;

	/**
	 * 创新Freemarker模板的必要条件
	 */
	private Configuration config;

	/**
	 * 采用BEANS_WRAPPER
	 */
	private ObjectWrapper wrapper;

	/**
	 * text/html
	 */
	private String contentType;

	/**
	 * 采用StringLoader，从数据库中读取模板信息
	 */
	//private StringTemplateLoader strTmpt;

	/**
	 * Servlet 初始化
	 */
	public void init() throws ServletException {

		try {
			config = new Configuration();

			config.setTemplateExceptionHandler(
					TemplateExceptionHandler.HTML_DEBUG_HANDLER);

			contentType = &quot;text/html&quot;;

			// 采用BEANS_WRAPPER
			wrapper = ObjectWrapper.BEANS_WRAPPER;
			config.setObjectWrapper(wrapper);

			// 初始化所有的Servlet参数
			Enumeration initpnames = getServletConfig().getInitParameterNames();
			while (initpnames.hasMoreElements()) {
				String name = (String) initpnames.nextElement();
				String value = getInitParameter(name);

				if (name == null) {
					throw new ServletException(this.getClass().toString()
							+ &quot;需要一些初始化参数，web.xml可能尚未完成.&quot;);
				}
				if (value == null) {
					throw new ServletException(this.getClass().toString()
							+ &quot;有部分初始化参数未被赋值，web.xml可能尚未完成.&quot;);
				}

				if (name.equals(TEMPLATE_PATH)) {
					// ignore: we have already processed these do nothing..
					log.debug(&quot;忽略&quot; + TEMPLATE_PATH);

				} else if (name.equals(DEF_ENCODING)) { // set DefaultEncoding
					log.debug(DEF_ENCODING + &quot; value is:&quot; + value);
					config.setDefaultEncoding(value);

				} else if (name.equals(TEMPLATE_DELAY)) { // 模板延迟更新时间
					try {
						log.debug(TEMPLATE_DELAY + &quot; value is:&quot; + value);
						config.setTemplateUpdateDelay(Integer.parseInt(value));
					} catch (NumberFormatException e) {
						throw new ServletException(e.getMessage() + &quot;. '&quot;
								+ TEMPLATE_DELAY + &quot;'必须是整数&quot;);
					}

				} else if (name.equals(NOCACHE)) { // 设置缓存
					log.debug(NOCACHE + &quot; value is :&quot; + value);
					nocache = StringUtil.getYesNo(value);

				} else {
					// 设置其它参数，嘿嘿，如果参数名称不符合Configuration要求肯定要Exception
					config.setSetting(name, value);
				}
			}
		} catch (ServletException e) {
			throw e;
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}

	/** Get请求 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			process(request, response);
	}

	/** Post请求 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			process(request, response);
	}

	/**
	 * 向StringTemplateLoader中添加模板内容
	 * @throws ServletException 
	 */
	private StringTemplateLoader addStringTemplate(
			StringTemplateContext strTmpCtx) throws ServletException {
		if (strTmpCtx == null) {
			throw new ServletException(&quot;StringTemplateContext is null&quot;);
		}
		
		if (strTmpCtx.getTemplateContent() != null) {
			StringTemplateLoader stl = getStrTmpt();
			stl.putTemplate(strTmpCtx.getTemplateName(),
					strTmpCtx.getTemplateContent());
			setStrTmpt(stl);
			//重写添加TemplateLoader
			log.debug(&quot;StringTemplateLoader成功添加模板'&quot;
					+ strTmpCtx.getTemplateName() + &quot;'&quot;);
		}
		
		return getStrTmpt();

	}

	/**
	 * 模板解析过程
	 * @throws ParseURLToTemplateException 
	 */
	private void process(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		StringTemplateLoader  strTmpt = getStrTmpt();
		if (strTmpt == null) {
			strTmpt = new StringTemplateLoader();
			setStrTmpt(strTmpt);
		}

		// 自定义类型StringTemplateContext,存放［模板名称］和［模板内容］
		StringTemplateContext strTmpCtx = null;
		try {
			strTmpCtx = reqUrlToModelCtx(req, strTmpt);
		} catch (ParseURLToTemplateException pe) {
			resp.sendError(HttpServletResponse.SC_NOT_FOUND);
			pe.printStackTrace();
		}

		//添加模板
		strTmpt = addStringTemplate(strTmpCtx);
		config.setTemplateLoader(strTmpt);

		Template template = config.getTemplate(strTmpCtx.getTemplateName());
		Object attrContentType = template.getCustomAttribute(&quot;content_type&quot;);
		if (attrContentType != null) {
			resp.setContentType(attrContentType.toString());
		} else {
			resp.setContentType(contentType + &quot;; charset=&quot;
					+ template.getEncoding());
		}

		setBrowserCaching(resp);

		ServletContext servletContext = getServletContext();

		try {
			TemplateModel model = createModel(wrapper, servletContext, req,
					resp, strTmpCtx.getModel());

			template.process(model, resp.getWriter());

		} catch (TemplateException te) {
			ServletException e = new ServletException(
					&quot;Error executing FreeMarker template&quot;, te);
			try {
				e.getClass().getMethod(&quot;initCause&quot;,
						new Class[] { Throwable.class }).invoke(e,
						new Object[] { te });
			} catch (Exception ex) {
				// Can't set init cause, we're probably running on a pre-1.4
				// JDK, oh well...
			}
			throw e;
		}
	}

	/**
	 * 创建Freemarker模板的model
	 */
	protected TemplateModel createModel(ObjectWrapper wrap,
			ServletContext servletContext, HttpServletRequest request,
			HttpServletResponse response, Map model)
			throws TemplateModelException {

		AllHttpScopesHashModel params = new AllHttpScopesHashModel(wrap,
				servletContext, request);

		// Create hash model wrapper for servlet context (the application)
		ServletContextHashModel servletContextModel =
					(ServletContextHashModel) servletContext
							.getAttribute(ATTR_APPLICATION_MODEL);

		if (servletContextModel == null) {
			servletContextModel = new ServletContextHashModel(this, wrap);

			servletContext.setAttribute(ATTR_APPLICATION_MODEL,
					servletContextModel);

			TaglibFactory taglibs = new TaglibFactory(servletContext);
			servletContext.setAttribute(ATTR_JSP_TAGLIBS_MODEL, taglibs);
		}
		params.putUnlistedModel(KEY_APPLICATION, servletContextModel);
		params.putUnlistedModel(KEY_APPLICATION_PRIVATE, servletContextModel);
		params.putUnlistedModel(KEY_JSP_TAGLIBS, (TemplateModel) servletContext
				.getAttribute(ATTR_JSP_TAGLIBS_MODEL));

		// Create hash model wrapper for session
		HttpSessionHashModel sessionModel;
		HttpSession session = request.getSession();
		sessionModel = (HttpSessionHashModel) session
				.getAttribute(ATTR_SESSION_MODEL);
		if (sessionModel == null || sessionModel.isZombie()) {
			sessionModel = new HttpSessionHashModel(session, wrap);
			session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
		}
		params.putUnlistedModel(KEY_SESSION, sessionModel);

		// Create hash model wrapper for request
		HttpRequestHashModel requestModel = (HttpRequestHashModel) request
				.getAttribute(ATTR_REQUEST_MODEL);
		if (requestModel == null || requestModel.getRequest() != request) {
			requestModel = new HttpRequestHashModel(request, response, wrap);
			request.setAttribute(ATTR_REQUEST_MODEL, requestModel);
			request.setAttribute(ATTR_REQUEST_PARAMETERS_MODEL,
					new HttpRequestParametersHashModel(request));
		}
		params.putUnlistedModel(KEY_REQUEST, requestModel);
		params.putUnlistedModel(KEY_REQUEST_PRIVATE, requestModel);

		// Create hash model wrapper for request parameters
		HttpRequestParametersHashModel requestParametersModel = 
							(HttpRequestParametersHashModel) request
							.getAttribute(ATTR_REQUEST_PARAMETERS_MODEL);

		params.putUnlistedModel(KEY_REQUEST_PARAMETERS, requestParametersModel);

		params.putAll(model);

		return params;
	}

	/**
	 * 需要有自类重写，返回需要的TemplateModelContext[templateName Model]
	 * 
	 * @return
	 * @throws ParseURLToTemplateException 
	 * @throws Exception 
	 */
	protected StringTemplateContext reqUrlToModelCtx(HttpServletRequest req,
			StringTemplateLoader tmLoader) throws ParseURLToTemplateException {

		// 需要子类去重写，完成封装数据
		return null;
	}

	/**
	 * If the parameter &quot;nocache&quot; was set to true, generate a set of headers
	 * that will advise the HTTP client not to cache the returned page.
	 */
	private void setBrowserCaching(HttpServletResponse res) {
		if (nocache) {
			// HTTP/1.1 + IE extensions
			res.setHeader(&quot;Cache-Control&quot;,
					&quot;no-store, no-cache, must-revalidate, &quot;
							+ &quot;post-check=0, pre-check=0&quot;);
			// HTTP/1.0
			res.setHeader(&quot;Pragma&quot;, &quot;no-cache&quot;);
			// Last resort for those that ignore all of the above
			res.setHeader(&quot;Expires&quot;, EXPIRATION_DATE);
		}
	}

	/**
	 * getter strTmpt
	 * @return
	 */
	private StringTemplateLoader getStrTmpt() {
		return (StringTemplateLoader) getServletContext().getAttribute(
		&quot;stringTemplateLoader&quot;);
	}

	/**
	 * setter strTmpt
	 * @param strTmpt
	 */
	private void setStrTmpt(StringTemplateLoader strTmpt) {
		getServletContext().setAttribute(&quot;stringTemplateLoader&quot;, strTmpt);
	}
}</pre><p>&nbsp;</p><p>未完待续....就像这人世间错综复杂、乱七八糟的种种破事</p><p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/176175#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 11:01:33 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/176175</link>
        <guid>http://lunch.javaeye.com/blog/176175</guid>
      </item>
      <item>
        <title>Iframe自适应高度</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/147208" style="color:red;">http://lunch.javaeye.com/blog/147208</a>&nbsp;
          发表时间: 2007年12月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在做页面的时候经常会用到iframe,同样iframe的高度问题一直比较烦人。现在给术一个让iframe根据所包含页面的高度设置自己的高度。<br />　　<br />　　调用本地文件，写法如下：<br />　　<pre name="code" class="java">&lt;iframe id="test" src="test1.htm" 
　　　　　　　　　　onload="this.height=test.document.body.scrollHeight"
　　　　　　　　　　frameborder="0">&lt;/iframe></pre><br />调用http页面，必须加上document.all.<br /><pre name="code" class="java">
document.all.test.height=document.all.test.document.body.scrollHeight
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/147208#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Dec 2007 11:42:30 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/147208</link>
        <guid>http://lunch.javaeye.com/blog/147208</guid>
      </item>
      <item>
        <title>eclipse反编译插件Jadclipse介绍</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/145122" style="color:red;">http://lunch.javaeye.com/blog/145122</a>&nbsp;
          发表时间: 2007年11月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          jadclips插件网站：<br />
&nbsp;&nbsp; <a href="http://jadclipse.sourceforge.net/"><u><font color="#0000ff">http://jadclipse.sourceforge.net/</font></u></a>
<p>一、下载：<br />
下载插件：<br />
下载jadclipse_3.1.0.jar版本，该版本支持eclipse3.1M6以上<br />
下载jadclipse_3.2.0.jar版本，该版本支持eclipse3.2M3和eclipse3.2M4.<br />
下载jadclipse_3.2.2.jar版本，该版本支持eclipse3.2M5以上。</p>
<p>&nbsp;&nbsp;&nbsp; 下载Jad反编译工具：<br />
<a href="http://www.kpdus.com/jad.html#download"><u><font color="#0000ff">http://www.kpdus.com/jad.html#download</font></u></a>，在该页中找到适合自己操作系统平台的jad下载。下载后解压，然后将解压后的jad.exe文件复制到%JAVA_HOME%\BIN目录下面（可以将jad.exe随便放到哪，只要记住路径就好，下面要用到）。</p>
<p>&nbsp;&nbsp;&nbsp; 二、安装：<br />
&nbsp;&nbsp;&nbsp; 方法1、直接将jadclipse_3.1.0.jar复制到%ECLIPSE_HOME%\plugins目录下。</p>
<p>&nbsp;&nbsp;&nbsp; 方法2、使用link方式安装，建立E：\eclipse3.1plugins\jadclipse3.1.0\eclipse\plugins的目录结构，将jadclipse_3.1.0.jar放到plugins目录下面（注：其中E：\eclipse3.1plugins为你自己定义的一个专门放置插件的目录）。再在%ECLIPSE_HOME%\links目录下面建立一个jadclipse3.1.0.link文件（该文件名随便取，保证后缀为。link就OK）。文件里面内容为：path=E：<a href="file://eclipse3.1plugins//jadclipse3.1.0"><u><font color="#0000ff">\\eclipse3.1plugins\\jadclipse3.1.0</font></u></a>.启动eclipse，打开Window-&gt;Preferences-&gt;Java-&gt;JadClipse，如果没有找到JadClipse，检查插件安装的版本是否与你安装的eclipse版本对应。<br />
我安装的eclipse是：eclipse3.1.2</p>
<p>三、设置参数：<br />
&nbsp;&nbsp;&nbsp; 启动eclipse，打开：Window-&gt;Preferences-&gt;Java-&gt;JadClipse. <br />
1、Path to decompiler，这里设置反编译工具jad的全路径名，比如：%JAVA_HOME%\bin\jad.exe. <br />
2、Directory for temporary files，这里设置临时文件路径。</p>
<p>&nbsp;&nbsp;&nbsp; 至于Window-&gt;Preferences-&gt;Java-&gt;JadClipse目录下的Debug，Directives，Formatting，Misc目录中的参数设置，就不罗嗦。</p>
<p>&nbsp;&nbsp;&nbsp; 四、安装完成后，eclipse自动将JadClipse Class File Viewer设置成class文件的缺省打开方式。如果没有默认，可以在Eclipse的Windows?D?D&gt; Perference?D?D&gt;General-&gt;Editors-&gt;File Associations中修改&ldquo;*.class&rdquo;默认关联的编辑器为&ldquo;JadClipse Class File Viewer&rdquo;。设置完成后，双击*.class文件，eclipse将自动反编译。</p>
<p>&nbsp;&nbsp;&nbsp; 注： 对于存在源代码的类，它不会强行反编译，也就是说它还是会用eclipse自带的Class File Viewer查看class文件。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/145122#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 Nov 2007 15:50:27 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/145122</link>
        <guid>http://lunch.javaeye.com/blog/145122</guid>
      </item>
      <item>
        <title>关于EJB事务管理之惑</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/141676" style="color:red;">http://lunch.javaeye.com/blog/141676</a>&nbsp;
          发表时间: 2007年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　目前有一个北美外包项目即将启动，关于金融行业。采用EJB2开发，各技术环节也都基本确认，唯独在事务管理方面产生了一些分歧和疑惑，查阅了很多资料不得其解。思来想去还是来发个帖子寻求一下达人的帮助。<br /><br />    注：数据库操作直接采用JDBC编程，没有用到具体的框架。<br /><br />　　问题有二<br /><br />　　一、EJB事务配置是由Container来管理，那么在DAO层发生异常的时候是否还需要程序员处理事务，也就是说是否还需要自己操作Connection的回滚。<br /><br />　　二、EJB事务配置同样是由Container来管理，是否还需要在EJB中操作SessionContext.setRollbackOnly()，或者说这样操存在什么样的好处或者弊端。<br /><br /><br />　　先谢谢大家了。　　<br />　
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/141676#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 19 Nov 2007 13:31:11 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/141676</link>
        <guid>http://lunch.javaeye.com/blog/141676</guid>
      </item>
      <item>
        <title>javascript入侵业务安全浅谈</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/139757" style="color:red;">http://lunch.javaeye.com/blog/139757</a>&nbsp;
          发表时间: 2007年11月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家好，等会我说的大家可能都已经遇到过了，也或许没有遇到过,再或许没有从这方面考虑过.接下来我们通过一个小例子来说明一下。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们在每个项目中，几乎都会用到[checkbox]组件。比如批量删除,批量审核等等...，举个简单的例子，如下图：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="../../../upload/picture/pic/10363/7f2e07bc-2e6d-3087-a6fd-0ed1e6ec342c.gif" border="1" height="130" alt="" width="200" /></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是一个简单的批量删除演示，大家可以看到其中&quot;李四&quot;和&quot;刘六&quot;二人是禁止删除的，因为其对应的checkbox组件是禁用的。此我们稍微考虑一下，我们能否在浏览器端将李四对应的checkbox修改成可用。如果能那显然就破坏了正常的业务逻辑和系统的安全性，当然有人会说我会在后台验证，对没错！但我们今天只是拿来讨论一下前台的东西*^_^*</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家肯定都晓得可用在地址栏直接运行js代码，不过大家有想过通过在地址栏运行的js代码来改变页面中某些组件的状态或者value吗？</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们先看一下对应上面那个批量删除的HTML代码：</p><div class="code_title">xml 代码</div><div class="dp-highlighter"><ol class="dp-xml"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span> <li><span>a&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;#&quot;</span><span class="tag">&gt;</span><span>添加</span><span class="tag"><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;#&quot;</span><span class="tag">&gt;</span><span>删除</span><span class="tag"><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></span></li><li class="alt"><span class="tag">&lt;</span><span class="tag-name">hr</span><span>&nbsp;</span><span class="attribute">size</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">&quot;100%&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li><li><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;<span style="font-family: Courier New; background-color: #fafafa">isDel</span>&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;checkbox&quot;<span style="font-family: Courier New; background-color: #fafafa">&nbsp;value=&quot;张三&quot;</span></span><span class="tag">&gt;</span><span>&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;男&nbsp;&nbsp;石家庄&nbsp;&nbsp;本科</span><span class="tag">&lt;</span><span class="tag-name">br</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;<span style="font-family: Courier New; background-color: #fafafa">isDel</span>&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;checkbox&quot;<span style="font-family: Courier New; background-color: #fafafa">&nbsp;value=&quot;李四&quot;</span></span><span>&nbsp;</span><span class="attribute">disabled</span><span>=</span><span class="attribute-value">&quot;disabled&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;李四&nbsp;&nbsp;女&nbsp;&nbsp;太原市&nbsp;&nbsp;专科</span><span class="tag">&lt;</span><span class="tag-name">br</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li><li><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;<span style="font-family: Courier New; background-color: #fafafa">isDel</span>&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;checkbox&quot;<span style="font-family: Courier New; background-color: #fafafa">&nbsp;value=&quot;王五&quot;</span></span><span class="tag">&gt;</span><span>&nbsp;&nbsp;王五&nbsp;&nbsp;女&nbsp;&nbsp;&nbsp;北京市&nbsp;&nbsp;&nbsp;&nbsp;硕士</span><span class="tag">&lt;</span><span class="tag-name">br</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;<span style="font-family: Courier New; background-color: #fafafa">isDel</span>&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;checkbox&quot;<span style="font-family: Courier New; background-color: #fafafa">&nbsp;value=&quot;刘六&quot;</span></span><span>&nbsp;</span><span class="attribute">disabled</span><span>=</span><span class="attribute-value">&quot;disabled&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;刘六&nbsp;&nbsp;男&nbsp;&nbsp;石家庄&nbsp;&nbsp;博士</span><span class="tag">&lt;</span><span class="tag-name">br</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可用看到checkbox的id为[<span style="font-family: Arial">isDel</span>]，此时我便可用通过id在地址栏得到该对象。比如我们使用document.all.isDel来得到的是一个数组，包含了上面四个checkbox，同样我们也可以得到具体的某个checkbox。比如document.all.isDel[1]，用这句代码来得到对应李四的checkbox，因为数组下标是从零开始的。如图：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="../../../upload/picture/pic/10365/a4ef7c55-b362-387d-983f-e98adb90489f.gif" border="1" height="439" alt="" width="386" /></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们在得到该对象之后想再修改其状态或修改它的value就易如反掌，我们只需运行<span style="font-family: Arial">alert(document.all.isDel[1].disabled=&quot;&quot;) ;就可用将李四的禁止删除状态改为可用删除状态，如图：</span></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="../../../upload/picture/pic/10367/09568267-50a2-3c23-ae10-f808b45b450e.gif" border="1" height="197" alt="" width="391" /></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样看来李四就可用删除了，当然，前提是你后台的验证不是很完善的情况下，所以这也对我们的后台验证提出了更高的要求。这里说明一下在地址栏运行javascript的时候一定使用alert语句，呵呵，如果不使用的话可用自己试一下效果。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 写这篇短文也没有别的意思，就是想和大家讨论交流一下类似的问题，像这种情况举一反三可用落实到很多具体的场景，也不仅仅局限于checkbox这种组件。如果有业内的大牛对这方面有研究那就和我们分享一下吧。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谢谢您耐心看完此文。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/139757#comments" style="color:red;">已有 <strong>20</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 Nov 2007 14:38:47 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/139757</link>
        <guid>http://lunch.javaeye.com/blog/139757</guid>
      </item>
      <item>
        <title>从Java谈软件开发流程［转］</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/137804" style="color:red;">http://lunch.javaeye.com/blog/137804</a>&nbsp;
          发表时间: 2007年11月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p align="left">　　经过近十年的发展，说Java是地球上最受欢迎的程序开发语言一点也不为过。Java赋予开发人员高度的选择自由，展现「Java Everywhere」的魅力与成效。你我的生活周遭已处处可见Java；到火星上走走、eBay大采购、网络银行转帐、拿着健保卡到医院看病、无聊时把玩手机上的Java游戏&hellip;。</p>
<p align="left">　　在生活中，你通常只知道「喔！原来这网站是用Java写的」、「喔！原来这是手机的Java Game」。若自技术层次拆解，Java Technology可简单区分为Java 程序语言（language）与Java 平台（platform）。Java 程序语言所指是撰写程序所需的语法与词汇，像、英文，有一套基本的单字与语法，只要利用单字组出符合语法的句子，这就是Java程序的基础。</p>
<p>&nbsp;</p>
<p align="left">　　　　至于Java 平台，如大家熟知的，Java共分三大平台：J2ME、J2SE和J2EE，分别专精于嵌入式行动平台、标准平台和企业应用平台，除了共同的类别函式库(API)之外，每个平台也有其特定的API，供程序设计师们开发使用。</p>
<p align="left">　　随着开发工具陆续推出，降低了Java开发技术门坎，要写出正确无误的Java程序不是太难的事情，但论及系统性的 Java软件开发，那可就不是一件轻松事。开发大型项目有三项非常重要的因素，将会影响整个项目的进度与质量，分别是人（people）、流程（process）与技术（technology）。</p>
<p align="left">　　这三个要素是环环相扣的，任何一项要素的成败都会影响另外两个要素，而每个要素也都足以影响一个项目的成败。如何取得这三者的平衡，并将每个要素充份的发挥，取决于管理者的经验，与相关开发人员的素质，这不是一项简单容易的任务，但有好的方法可以完成。</p>
<p align="left"><strong>Java</strong><strong>弹性多选择</strong><strong>资源丰富任君挑选</strong></p>
<p align="left">　　「技术」应该是最容易掌握的部份，因为你选择了Java。如前所述，全世界已有许多Java资源可以选择。某些人可能会认为Java技术门坎高，考虑训练成本而决定导入较为简易的程序语言，如VB.Net，或是不敢转换到Java平台。事实上，真正困难的不是Java程序语言或是API的使用，而是整个对象导向程序设计的概念。C#也标榜与Java有着类似的对象导向架构，除执行平台不同、API的名称不同，本质与 Java可以算是峦生兄妹，怎么没听有人抱怨C#很难学？</p>
<p align="left">　　既然Java、.Net门坎是一样的，那该如何选择？答案是，你喜欢谁就选谁。只是当你决定投靠其中一个阵营时，不妨想想一件事：「在这个平台上，我是不是有选择的空间与自由？」Java是一开放的技术、平台，可执行于各类作业平台，还有各式各样的开发工具、API套件与执行环境，包括商业、免费、开放源码等丰富资源<st1:personname productid="任" w:st="on">任</st1:personname>君挑选。</p>
<p align="left"><strong>流程关乎项目预算与时间控制</strong></p>
<p align="left">　　「程序」指的是软件开发流程或是项目流程，定义流程的目的是要掌控所有的情况。项目的最大敌人是时间及预算，这两者都是有限的，如何在有限预算内准时完成项目，可说是一项艺术。幸运的是，时间和预算都是可控制的，并不是指我们可以控制时间快慢或长短，而是如何明确知道哪一个时间点，需要何种产出物，而我们有多少的预算可以完成。为有效控制，我们需要一个标准的流程，只要照着规矩走，一切都好办。</p>
<p align="left">　　RUP(Rational Unified Process)就是一种业界常用的不成文规矩，在多数软件项目中几乎都会使用的一项语言、方法与工具。 RUP的精神在于反复（iterative）与渐近的（incremental）。在渐进式的开发过程中，透过不断的提炼（refine），可趁早发现问题且找出解决方法，也确保每一工作项目的进度。不过，在架构(Architecture)方面，RUP确实着墨较少，而架构优劣也是足以影响软件系统成败的关键因素。</p>
<p align="left">　QoS(Quality of Service)或是SLR(Service Level Requirement)，我想是每个系统最基本的要求，它包含可用性（Availability）、可管理（Manageability）、可信赖（Reliability）、可扩充（Scalability）和安全性（Security）等条件。</p>
<p align="left">　　当系统架构进行规划时，就应同步考虑这几项条件。举例而言，先前某家外商银行因系统设计不良而导致外人可轻易猜出参数设定的方式，直接入侵系统窃取消费者隐私数据；也有某家电信业者为没考虑系统的负载量，而导致在耶诞、跨年等重要节日时，涌入大量简讯的尖峰时期造成服务塞车、系统当机。</p>
<p>&nbsp;</p>
<p align="left">　　在电视新闻中，我们常常可见类似的新闻报导，而背后隐藏的意义是，「当初没做好系统架构规划」，看得不够远、想得不够深，等系统开发到一半，或是系统上线后才发现问题，此时再东补西补，为时已晚。</p>
<p align="left">　　虽说不同的程序技术皆有其满足QoS的方法，相较之下，Java对上述五大项功能的支持应该算是最为丰富。如在J2EE 的设计模式（Design Pattern）中，几乎都是为解决此几项问题而设计，之后再配合程序语言本身的强固性，开发而成的企业级应用系统，我想应可满足客户对于QoS的严格要求。</p>
<p align="left">　　话说回头，企业一旦使用Java开发一套系统，就一定会是百分百稳定且满足QoS吗？我想，设计模式跟程序语言无关，将 J2EE 设计模式作为C#实作的架构，也未尝不可，只要能建构出相同安全稳定的环境执行该系统，都是可行的。就像会说国语，未必可写出漂亮的文章一样，训练、经验再加上一点天份才是最重要的。</p>
<p align="left"><strong>专业技术认证可供参考</strong></p>
<p align="left">　　「人」是项目中最难预料与掌控的一项要素。人可分成两部份，一是客户，二是研发人员。客户是最难掌握的，不同的客户有不同的个性，没有任何人能教导你，如何应付不同的客户，除了靠运气，还要靠经验。</p>
<p align="left">暂不谈客户，先看研发人员这部分。我想，要满足技术与流程两项因素，关键都是人。如何选择对且合适的技术，要有专业人才；如何有效管理流程？如何规划满足AMRSS五项需求的系统架构？这都是需要有经验的管理人才及架构师（architect）。当然，能不能写出漂亮且可完善运作的程序代码，也是需要有一定水平的研发人员。</p>
<p align="left">　　开发程序人员的水平是较容易被认证。Java有几项专业认证，如SCJP、SCJD、SCWCD，都可用以鉴定开发人员基本的功力。另有SCEA、 SCBCD等认证可评鉴程序架构人员的素质。除专业训练之外，经验也是一位优秀的架构师所应具备的条件，而程序部份其实也有认证，如PMP。</p>
<p align="left">　　也许你会觉得Java很八股，写程序为什么需要一大堆文件、设计模式、程序与方法论（methodology），边写边设计，且战且走不行吗？对于小型系统，或是没有营运压力系统而言，是可以的。若果是人力不足、预算有限、结案期限已在眼前，当然也该直接动工。</p>
<p align="left">　　但依我接触过案子经验的深刻体验，宁愿花费较长时间与心力，在项目初期就先详细规划，才可节省后期开发的时间，系统上线后也更容易维护与扩充。虽然耕耘过程会较辛苦，但所得好处也会是倍增的。</p>
转自：<font face="Arial">http://kjyang.bokee.com/3811807.html</font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/137804#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 Nov 2007 18:23:39 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/137804</link>
        <guid>http://lunch.javaeye.com/blog/137804</guid>
      </item>
      <item>
        <title>怀念学校</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/135939" style="color:red;">http://lunch.javaeye.com/blog/135939</a>&nbsp;
          发表时间: 2007年10月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial"><embed play="true" scale="showall" src="http://www.56.com/p_45688319.swf" type="application/x-shockwave-flash" wmode="Window" height="370" loop="false" quality="1" menu="false" width="520"></embed></font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/135939#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 27 Oct 2007 19:22:44 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/135939</link>
        <guid>http://lunch.javaeye.com/blog/135939</guid>
      </item>
      <item>
        <title>夜深了。无可奈何~</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/124051" style="color:red;">http://lunch.javaeye.com/blog/124051</a>&nbsp;
          发表时间: 2007年09月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>无可奈何啊~~</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 明天要去客户那里部署程序，今天晚上加班加点的测试一下。做程序员其实挺累人的，在看似光鲜外表下是体力和脑力的严重透支。如果我有孩子，我绝对不同意他们做这行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在的程序员都已经大众化，程序员的收入也远远没有人们想象的那样丰厚...大家都是迫于生活的压力。在拼命的挣扎着。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/124051#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 15 Sep 2007 13:52:00 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/124051</link>
        <guid>http://lunch.javaeye.com/blog/124051</guid>
      </item>
      <item>
        <title>让你的DIV在下拉框的上面</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/87622" style="color:red;">http://lunch.javaeye.com/blog/87622</a>&nbsp;
          发表时间: 2007年06月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们在作B/S开发的时候经常会遇到DIV层被下拉框遮挡的时候，这让我们很苦恼。无论我们怎么设置css样式都无济于事，因为selese元素的优先级要不div高。那么我们就要选用比select元素优先级还要高的元素来遮挡它。这时候我们想到了<span style="font-family: Arial">iframe。我们可以在div里加上<span style="font-family: Arial">iframe来实现这种效果。</span></span></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实网上有很多类似的代码。但是<span style="font-family: Arial">iframe的大小设置是个问题，要做到和div的大小一样比较困难，这里展示一点小技巧。</span></p><p>就是用<span style="font-family: Arial">parentNode。具体的代码如下：</span></p><div class="code_title">xml 代码</div><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;menu&quot;</span><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">&quot;position:absolute;&nbsp;&nbsp;&nbsp;visibility:hidden;&nbsp;&nbsp;&nbsp;top:20px;&nbsp;&nbsp;&nbsp;left:20px;&nbsp;&nbsp;&nbsp;width:100px;&nbsp;&nbsp;&nbsp;height:200px;&nbsp;&nbsp;&nbsp;background-color:#6699cc;&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">table</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span class="tag">&gt;</span><span>选项一</span><span class="tag">&lt;/</span><span class="tag-name">td</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span class="tag">&gt;</span><span>选项二</span><span class="tag">&lt;/</span><span class="tag-name">td</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span class="tag">&gt;</span><span>选项三</span><span class="tag">&lt;/</span><span class="tag-name">td</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span class="tag">&gt;</span><span>选项四</span><span class="tag">&lt;/</span><span class="tag-name">td</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span class="tag">&gt;</span><span>选项五</span><span class="tag">&lt;/</span><span class="tag-name">td</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">table</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">iframe</span><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;&quot;</span><span>&nbsp;</span><span class="attribute">frameborder</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span>&nbsp;&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">&quot;position:absolute;&nbsp;&nbsp;&nbsp;visibility:inherit;&nbsp;&nbsp;&nbsp;top:0px;&nbsp;&nbsp;&nbsp;left:0px;&nbsp;&nbsp;&nbsp;width:expression(this.parentNode.offsetWidth);&nbsp;&nbsp;&nbsp;height:expression(this.parentNode.offsetHeight);&nbsp;&nbsp;&nbsp;z-index:-1;&nbsp;&nbsp;&nbsp;filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">iframe</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;#&quot;</span><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;document.getElementById('menu').style.visibility='visible'&quot;</span><span class="tag">&gt;</span><span>菜单</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以看到在设置style 的时候<span style="font-family: Arial">width:expression(this.parentNode.offsetWidth);表达式的方式。this.parentNode.offsetWidth就代表div的宽度</span></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/87622#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 07 Jun 2007 11:19:14 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/87622</link>
        <guid>http://lunch.javaeye.com/blog/87622</guid>
      </item>
      <item>
        <title>Hibernate异常&quot;null id in entry&quot;</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/79810" style="color:red;">http://lunch.javaeye.com/blog/79810</a>&nbsp;
          发表时间: 2007年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="code-java">我们首先看一下异常信息：</p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>net.sf.hibernate.AssertionFailure:&nbsp;</span><span class="keyword">null</span><span>&nbsp;id&nbsp;in&nbsp;entry&nbsp;(don't&nbsp;flush&nbsp;the&nbsp;Session&nbsp;after&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>an&nbsp;exception&nbsp;occurs) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>at&nbsp;net.sf.hibernate.impl.SessionImpl.checkId(SessionImpl.java:</span><span class="number">2605</span><span>) &nbsp;&nbsp;</span> </li>
    <li class=""><span>at&nbsp;net.sf.hibernate.impl.SessionImpl.flushEntity(SessionImpl.java:</span><span class="number">2429</span><span>) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>...&nbsp;...&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 遇到这个异常实属不小心所致，最初看到异出的错误信息时我误认为是主键为空所致。一着急竟然把entry当成了entity理解，真是让人笑话^_^。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实个该异常信息是在提示我们没有为数据中的非空字段设置值。呵呵！看，够笨的吧。怎么会忘记为非空字段设置值呢？当然一般我们是不会犯这样的错。但是需要说的一点是，在数据的设计中比如SqlServer，我们为某个非空字段设置了默认值。如果我们在通过Hibernate增加一条记录的时候我们必须显式的通过setXxx方法为该字段(/属性)赋值(/默认值)。因为在保存之前Hibernate会检查该非空字段对应的实体属性是否为空。我就是忽略了这一点，所以才会造成上面的异常。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果不想对有默认值的非空字段进行显式赋值的话，我们可以通过xxx.hbm.xml配置文件来实现，也就是在配置文件中给出该字段的默认值。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/79810#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 May 2007 14:07:44 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/79810</link>
        <guid>http://lunch.javaeye.com/blog/79810</guid>
      </item>
      <item>
        <title>让Hsqldb随WebAPP一起启动</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/79802" style="color:red;">http://lunch.javaeye.com/blog/79802</a>&nbsp;
          发表时间: 2007年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先说一下hsqldb几个优点</p>
<ol>
    <li>轻巧，只有600多K，运行速度非常快。结合Hibernate数据库无关的特性，非常适合在项目开发的时候使用。 </li>
    <li>作为单元测试数据库。单元测试的时候，启动HSQLDB的file模式，数据不存盘，可以保证测试原子性。 </li>
    <li>来回复制，随身携带。 </li>
    <li>不需要安装，使用非常方便。 </li>
    <li>稳定，而且支持的数据量足够大。 </li>
    <li>小型项目作为现场数据库使用，不需要安装Oracle之类的大型DB，减轻了维护成本，并且，HSQLDB非常容易备份。</li>
</ol>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hsqldb的各种好处就不再多说了，今天我们谈谈如何让它在我们日常开发中给我们带来更多的便捷。就像标题所说的，让Hsqldb随WebAPP一起启动。比平时用的DB2、Oracle、SQLServer... ...都要简洁方便许多，更重要从开发角度考虑Hsqldb的性能已经足够了。springside也是这么做的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 废话不多说了，现在开始： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们借助Listener来实现此功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先给出一段该Listener的配置信息吧，*<sup>^_^</sup>*是存在web.xml里的。</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>hsql.dbPath</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>D:/db</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>hsql.dbName</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>mydb</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>hsql.port</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>9002</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;systop.com.systopbase.common.HsqlStartListener &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<h5>简单解释一下： </h5>
<ul>
    <li>hsql.dbPath: 采用绝对路径，且是固定的[D:/db]。而在实际应用中在这里我们更需要的是变量[或者说是相对路径]，嘻嘻*<sup>^_^</sup>*不要着急，写这篇文章是为了让大家了解一下。在我们的systop－base项目中就采用了相对路径的方法，在那里你会有惊喜发现。 <br />
    </li>
    <li>hsql.dbName:需要说明的是在D:/db目录下确认有mydb.script和mydb.properties两个文件. <br />
    </li>
    <li>hsql.port:设置hsqldb的端口，默认是9001，防止冲出使用9002。 </li>
</ul>
<p>接下来我们看看Listener是如何实现的：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;systop.com.systopbase.common; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;org.hsqldb.Server; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;org.springframework.util.FileCopyUtils; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletContextEvent; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletContextListener; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.io.File; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.FileOutputStream; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.io.IOException; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.sql.Connection; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.sql.DriverManager; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.sql.Statement; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;该类的职责是在WebApp启动时自动开启HSQL服务.&nbsp;依然使用Server方式，不受AppServer的影响. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HsqlListener&nbsp;</span><span class="keyword">implements</span><span>&nbsp;ServletContextListener&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;　　*&nbsp;Listener&nbsp;初始化方法. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;　　*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;contextInitialized(ServletContextEvent&nbsp;sce)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　String&nbsp;dbName&nbsp;=&nbsp;sce.getServletContext().getInitParameter(</span><span class="string">&quot;hsql.dbName&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　String&nbsp;path&nbsp;=&nbsp;sce.getServletContext().getInitParameter(</span><span class="string">&quot;hsql.dbPath&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　</span><span class="keyword">int</span><span>&nbsp;port&nbsp;=&nbsp;-</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　port&nbsp;=&nbsp;Integer.parseInt(sce.getServletContext().getInitParameter(</span><span class="string">&quot;hsql.port&quot;</span><span>)); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　}</span><span class="keyword">catch</span><span>(Exception&nbsp;e){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　port&nbsp;=&nbsp;</span><span class="number">9001</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;　　　</span><span class="keyword">if</span><span>&nbsp;(dbName&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;||&nbsp;dbName.equals(</span><span class="string">&quot;&quot;</span><span>)){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　System.out.println(</span><span class="string">&quot;Cant'&nbsp;get&nbsp;hsqldb.dbName&nbsp;from&nbsp;web.xml&nbsp;Context&nbsp;Param&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class=""><span>　　 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　File&nbsp;dbDir&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(path); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　</span><span class="keyword">if</span><span>&nbsp;(!dbDir.exists())&nbsp;{</span><span class="comment">//判断目录是否存在 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　</span><span class="keyword">if</span><span>&nbsp;(!dbDir.mkdirs())&nbsp;{</span><span class="comment">//如果不存在创建，如果创建失败直接返回 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　　　System.out.println(</span><span class="string">&quot;Can&nbsp;not&nbsp;create&nbsp;DB&nbsp;Dir&nbsp;for&nbsp;Hsql:&quot;</span><span>&nbsp;+&nbsp;dbDir); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　　　</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　} &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="comment">//以下代码是做数据库恢复的。我们把原始的数据库放在classpath下，当启动web的时候，检查目标 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="comment">//数据库是否存在，如果不存在，就把原始数据库复制为指定的数据库 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;　　　</span><span class="keyword">if</span><span>&nbsp;(!path.endsWith(</span><span class="string">&quot;/&quot;</span><span>)){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　path&nbsp;=&nbsp;path&nbsp;+&nbsp;</span><span class="string">&quot;/&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　File&nbsp;scriptFile&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(path&nbsp;+&nbsp;dbName&nbsp;+&nbsp;</span><span class="string">&quot;.script&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　File&nbsp;propertiesFile&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(path&nbsp;+&nbsp;dbName&nbsp;+&nbsp;</span><span class="string">&quot;.properties&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　</span><span class="keyword">if</span><span>&nbsp;(scriptFile.exists()&nbsp;&amp;&amp;&nbsp;propertiesFile.exists()){</span><span class="comment">//判断数据文件是否存在 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　</span><span class="keyword">this</span><span>.startServer(path,&nbsp;dbName,&nbsp;port); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　}&nbsp;</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　System.out.println(</span><span class="string">&quot;Connect&nbsp;failed:Connect&nbsp;Hsqldb&nbsp;error&nbsp;or&nbsp;database&nbsp;files&nbsp;not&nbsp;exits!&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class=""><span>　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;　*&nbsp;启动Hsqldb服务的方法。 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;　*&nbsp;@param&nbsp;dbPath　数据库路径 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;　*&nbsp;@param&nbsp;dbName　数据库名称 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;　*&nbsp;@param&nbsp;port　所使用的端口号 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;　*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;startServer(String&nbsp;dbPath,&nbsp;String&nbsp;dbName,&nbsp;</span><span class="keyword">int</span><span>&nbsp;port)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　Server&nbsp;server&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Server();</span><span class="comment">//它可是hsqldb.jar里面的类啊。 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　server.setDatabaseName(</span><span class="number">0</span><span>,&nbsp;dbName); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　server.setDatabasePath(</span><span class="number">0</span><span>,&nbsp;dbPath&nbsp;+&nbsp;dbName); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;　　　　</span><span class="keyword">if</span><span>&nbsp;(port&nbsp;!=&nbsp;-</span><span class="number">1</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　server.setPort(port); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.setSilent(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　server.start(); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　System.out.println(</span><span class="string">&quot;hsqldb&nbsp;started...&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　</span><span class="comment">//&nbsp;等待Server启动 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　Thread.sleep(</span><span class="number">800</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(InterruptedException&nbsp;e){ &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　</span><span class="comment">//&nbsp;do&nbsp;nothing </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class=""><span>　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;　</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;　　*&nbsp;Listener销毁方法，在Web应用终止的时候执行&quot;shutdown&quot;命令关闭数据库. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;　　*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;contextDestroyed(ServletContextEvent&nbsp;arg0)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　</span><span class="comment">//这里就不用说了，自然是关闭数据库操作 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　Connection&nbsp;conn&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　Class.forName(</span><span class="string">&quot;org.hsqldb.jdbcDriver&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　conn&nbsp;=&nbsp;DriverManager.getConnection(</span><span class="string">&quot;jdbc:hsqldb:hsql://localhost:9002/bookstore&quot;</span><span>,&nbsp;</span><span class="string">&quot;sa&quot;</span><span>,&nbsp;</span><span class="string">&quot;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　Statement&nbsp;stmt&nbsp;=&nbsp;conn.createStatement(); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　stmt.executeUpdate(</span><span class="string">&quot;SHUTDOWN;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e){ &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　</span><span class="comment">//&nbsp;do&nbsp;nothing </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class=""><span>　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>现在就部署到Web应用中去尝试一下吧。：）</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/79802#comments" style="color:red;">已有 <strong>17</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 May 2007 13:41:11 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/79802</link>
        <guid>http://lunch.javaeye.com/blog/79802</guid>
      </item>
      <item>
        <title>HSQLDB日期型字段使用注意事项</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/79798" style="color:red;">http://lunch.javaeye.com/blog/79798</a>&nbsp;
          发表时间: 2007年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>DATE类型用于存储日期('yyyy-mm-dd')，TIME类型用于存储时间('hh:mm:ss')，DATETIME或TIMESTAMP用于存储日期和时间。不能用错了。有些数据库TIME类型可以存DATE，但是HSQLDB不行。<br />
可以给DATATIME类型一个缺省值：</p>
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">create</span><span>&nbsp;cached&nbsp;</span><span class="keyword">table</span><span>&nbsp;directories&nbsp;( &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;dir_id&nbsp;identity&nbsp;</span><span class="op">NOT</span><span>&nbsp;</span><span class="op">NULL</span><span>, &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;directory&nbsp;</span><span class="keyword">varchar</span><span>(255)&nbsp;</span><span class="op">NOT</span><span>&nbsp;</span><span class="op">NULL</span><span>, &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">time</span><span>&nbsp;</span><span class="keyword">timestamp</span><span>&nbsp;</span><span class="keyword">default</span><span>&nbsp;'now' &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>);&nbsp;&nbsp;</span> </li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://lunch.javaeye.com/blog/79798#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 May 2007 13:26:29 +0800</pubDate>
        <link>http://lunch.javaeye.com/blog/79798</link>
        <guid>http://lunch.javaeye.com/blog/79798</guid>
      </item>
      <item>
        <title>Hsqldb简介和基本使用</title>
        <author>lunch</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lunch.javaeye.com">lunch</a>&nbsp;
          链接：<a href="http://lunch.javaeye.com/blog/78887" style="color:red;">http://lunch.javaeye.com/blog/78887</a>&nbsp;
          发表时间: 2007年05月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hsqldb是一个开放源代码的JAVA数据库，其具有标准的SQL语法和JAVA接口，它可以自由使用和分发，非常简洁和快速的。具有Server模式，进程内模式(In-Process)和内存模式(Memory-Only)三种。运行Hsqldb需要hsqldb.jar包, 它包含了一些组件和程序。每个程序需要不同的命令来运行。它位于项目的lib目录下，目前的版本是1.8.0.5。官方的下载地址是：http://prdownloads.sourceforge.net/hsqldb/hsqldb_1_8_0_5.zip?download <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在介绍这些模式之前我们需要了解一些Hsqldb所涉及的一些文件。每个Hsqld数据库包含了2到5个命名相同但扩展名不同的文件，这些文件位于同一个目录下。例如，名位&quot;test&quot;的数据库包含了以下几个文件： </font></p>
<ul>
    <li>
    <div class="MsoNormal" style="COLOR: black; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Arial"><font size="2">test.properties <o:p></o:p></font></font></span></div>
    </li>
    <li>
    <div class="MsoNormal" style="COLOR: black; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Arial"><font size="2">test.script <o:p></o:p></font></font></span></div>
    </li>
    <li>
    <div class="MsoNormal" style="COLOR: black; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Arial"><font size="2">test.log <o:p></o:p></font></font></span></div>
    </li>
    <li>
    <div class="MsoNormal" style="COLOR: black; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Arial"><font size="2">test.data <o:p></o:p></font></font></span></div>
    </li>
    <li>
    <div class="MsoNormal" style="COLOR: black; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font size="3" face="Arial"><font size="2">test.backup</font> </font></span></div>
    </li>
</ul>
<p><font face="Arial"><font size="3">&nbsp; <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">properties</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件描述了数据库的基本配置。</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> script</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件记录了表和其它数据库对象的定义。</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">log</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件记录了数据库最近所做的更新。</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">data</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件包含了</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">cached</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（缓冲）表的数据，而</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">backup</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件是将</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">data</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件压缩备份，它包含了</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">data</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件上次的最终状态数据。所有这些文件都是必不可少的，千万不可擅自删除。但如果你的数据库没有缓冲表</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">(cached table),test.data</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">test.backup</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件是不会存在。</span></font></font></p>
<p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span><font size="3"><font face="Arial"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　接下来我们对</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Hsqldb</span></font><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="Arial">的三种模式进行简单介绍，同时包括部分工具的启动的方式</font>。</span></font></p>
<h3><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt">一、</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt"> Server</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt">模式</span></o:p></span>&nbsp;</h3>
<p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">　</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Server</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">模式提供了最大的可访问性。应用程序（客户端）通过</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Hsqldb</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">JDBC</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">驱动连接服务器。在服务器模式中，服务器在运行的时候可以被指定为最多</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">10</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">个数据库。根据客户端和服务器之间通信协议的不同，</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Server</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">模式可以分为以下三种：</span></span></p>
<h4><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">1</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"> <span lang="EN-US">Hsqldb Serve</span></span></span></span></h4>
<p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"></span></span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font size="3"><font face="Arial"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　</span></font></font>这种模式是首选的也是最快的。它采用</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">HSQLDB</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">专有的通信协议。启动服务器需要编写批处理命令。</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Hsqldb</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">提供的所有工具都能以</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">java class</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">归档文件</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">(</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">也就是</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">jar)</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的标准方式运行。假如</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">hsqldb.jar</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">位于相对于当前路径的</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">../lib</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">下面。我们的命令将这样写：</span></span></span></span></span></p>
<p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #cc3333; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB</span></span></span></span></span></p>
<p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #cc3333; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　现在你可能会疑惑，</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #cc3333; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">[-database.0 ]</span><span style="FONT-SIZE: 9pt; COLOR: #cc3333; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #cc3333; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> [dbname.0]</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为什么在后面加</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">[0]</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</span><sup><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">_</span></sup><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">... ...</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">我们不是在前面说服务模式运行的时候可以指定</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">10</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个数据库吗，如有多个数据库，则继续写命令行参数</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb ... ...</span></span></span></span></span></p>
<p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　新建文本文件保存上面命令，文件名可以随意，将后缀名改成</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">bat</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，然后直接执行批处理文件即可。在以后介绍的执行启动工具的命令采用同样方法。</span></span></span></span></span></p>
<p><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font size="3"><font face="Arial"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　</span></font></font>上面启动服务器的命令启动了带有一个（默认为一个数据库）数据库的服务器，这个数据库是一个名为</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&quot;mydb.*&quot;</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文件，这些文件就是</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mydb.Properties</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mydb.script</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mydb.log</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">等文件。其中</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">demoDB</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">是</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mydb</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的别名，可在连接数据库时使用。</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></span></span></span></span> </p>
<h4><span style="COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt"></span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">2</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"> <span lang="EN-US">Hsqldb Web Server</span></span></o:p></span></h4>
<p><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US">&nbsp; <span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　这种模式只能用在通过</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">HTTP</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">协议访问数据库服务器主机，采用这种模式唯一的原因是客户端或服务器端的防火墙对数据库对网络连接强加了限制。其他情况下，这种模式不推荐被使用。</span></span></span></o:p></span></p>
<p><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　运行</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">web</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">服务器的时候，只要将刚才命令行中的主类（</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">main class</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）替换成：</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">org.hsqldb.WebServer</span></span></span></o:p></span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"><span lang="EN-US"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></span></span></span></o:p></span></p>
<h4 class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span lang="EN-US">Hsqldb Servlet</span></span></h4>
<p class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span lang="EN-US">&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">这种模式和</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Web Server</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一样都采用</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">HTTP</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">协议，当如</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Tomcat</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">或</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Resin</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">等</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">引擎（或应用服务器）提供数据库的访问时，可以使用这种模式。但是</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">模式不能脱离</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">引擎独立启动。为了提供数据库的连接，必须将</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">HSQLDB.jar</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中的</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">hsqlServlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类放置在应用服务器的相应位置。</span></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span lang="EN-US"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　　</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Web Server</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">模式都只能在客户端通过</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">JDBC</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">驱动来访问。</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Servlet</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">模式只能启动一个单独的数据库。请注意做为应用程序服务器的数据库引擎通常不使用这种模式。</span></span></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span lang="EN-US"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></span></span></p>
<h4 class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">连接到以</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Server</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">模式运行的数据库</span></h4>
<p class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">&nbsp; <span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">当</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">HSQLDB</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">服务器运行时，客户端程序就可以通过</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">hsqldb.jar</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中带有的</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">HSQLDB JDBC Driver</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">连接数据库。</span></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #000091; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></span></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(</span><span class="string">&quot;org.hsqldb.jdbcDriver&quot;</span><span>)&nbsp;; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;}</span><span class="keyword">catch</span><span>(ClassNotFoundException&nbsp;e){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c&nbsp;=&nbsp;DriverManager.getConnection(</span><span class="string">&quot;jdbc:hsqldb:hsql://localhost/xdb&quot;</span><span>,&nbsp;</span><span class="string">&quot;sa&quot;</span><span>,&nbsp;</span><span class="string">&quot;&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan">&nbsp;&nbsp; <span style="FONT-SIZE: 9pt; COLOR: #990000; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">注</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">：</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">hsqldb</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的默认用户是</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">sa</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">密码为空。修改默认密码的方法我们将在工具使用部分做出介绍。</span></p>
<h3 class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span>&nbsp;<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">二、</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"> In-Process</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">模式</span></h3>
<p class="MsoNormal" align="left" style="MARGIN: 10.85pt 0cm; LINE-HEIGHT: 10.85pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp; <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">In-Process</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">模式又称</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Standalone</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-asci