<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>goby2008</title>
    <description></description>
    <link>http://goby2008.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>关于iReport显示打印预览的问题.  </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/208709" style="color:red;">http://goby2008.javaeye.com/blog/208709</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		 //报表编译之后生成的.jasper文件的存放位置
		 String type=request.getParameter("type");
		 String grade=request.getParameter("grade");
		 String class_1= request.getParameter("class");
		 String sql="select * from print where type='"+type+"'";
		 if(!grade.equals("")){
		 	sql=sql+" and grade='"+grade+"'";
		 }
		 if(!class_1.equals("")){
		 	sql=sql+" and class='"+grade+class_1+"'";
		 }
		 System.out.println(sql);
		 String path="";
		if(type.equals("优秀队员") || type.equals("五小标兵")){
		 	path="print_x";
		 }
		 if(type.equals("优秀督导队员") || type.equals("成绩有进步奖")){
		 	path="print_xx";
		 }
		  if(type.equals("读书积极分子")){
		 	path="print_xxx";
		 }
		  if(type.equals("劳动积极分子")){
		 	path="print_xxxx";
		 }
		String u="/print/"+path;
		System.out.println(u);
		//String u="/print/print_x.jasper";
		 File reportFile = new File(this.getServletContext().getRealPath(u));
		 
		 String url="jdbc:mysql://localhost:3306/jmzc";
		 try{
				 Class.forName("com.mysql.jdbc.Driver");
				 Map parameters = new HashMap();
				 //parameters.put("SQLSTR",sql); //"SQLSTR"是报表中定义的一个参数名称,其类型为String 型
				 Connection conn = DriverManager.getConnection(url,"root", "seebig");
				 Statement stmt=conn.createStatement();   
				 ResultSet rs=stmt.executeQuery(sql);
				 String pp=this.getServletContext().getRealPath(u);
				 System.out.println(pp);
				JasperFillManager.fillReportToFile(pp+".jasper",parameters,new JRResultSetDataSource(rs));
				JRViewer jr = new JRViewer(pp+".jrprint",false);
				JFrame jf = new JFrame(type);
				jf.add(jr);
				jf.pack();
				jf.setSize(1024, 600);
				jf.setVisible(true);
		 }catch(Exception ex){
				ex.printStackTrace();
			}
	}</pre>
<p>&nbsp;这个servlet 中,我使用iReport中JRViewer编写显示打印预览, 当我在客户端的电脑里点击网页中的打印预览，没有任何显示，回头看服务端就有一个显示JRViewer打印预览的程序，为何这样呢？</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/208709#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 27 Jun 2008 15:27:00 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/208709</link>
        <guid>http://goby2008.javaeye.com/blog/208709</guid>
      </item>
      <item>
        <title>Pentaho Report Designer介绍</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/207091" style="color:red;">http://goby2008.javaeye.com/blog/207091</a>&nbsp;
          发表时间: 2008年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Pentaho Report Designer是一款所见即所得的开源报表设计工具。在设计报表的时候，用户可以随意拖放和设置各种报表的控件，还可以快速方便地设置报表的数据来源。在报表的设计过程中，用户可以随时预览报表的结果。是一款不错的报表设计工具。</p>
<p><br />下面简单列出Pentaho Report Designer的一些主要技术特点：<br />1、以JFreeReport为核心引擎；<br />2、是一款所见即所得的报表设计工具。图形化界面，支持拖放，支持5种格式（PDF, HTML, XLS, RTF, CSV）预览和生成报表。<br />3、是一个独立的报表设计工具。可以不依赖Pentaho的报表服务器。<br />4、提供基本的画图功能。包括：直线、长方形、椭圆等；<br />5、提供SQL query builder。使得用户创建自定义查询非常方便；<br />6、支持XQuery, Mondrian和自定义数据源；<br />7、提供联机报表校验功能，随时提示用户当前报表存在什么错误。<br />8、可以很方便地发布报表到Pentaho应用服务器。</p>
<p>Pentaho Report Designer目前的一些不足地方：<br />1、目前没有汉化。<br />2、不支持画斜线。如果碰到一些需要画斜线的中国式报表就没办法了。<br />3、报表格式调整的功能有些弱。为了调整多个文本框成等高、等宽、上下左右对齐还挺费劲的。<br />4、当前用户比较少，还存在着一些易见的bug。</p>
<p>&nbsp;</p>
<p><br />总的来说，Pentaho Report Designer还是一款不错的开源报表设计工具。具有很大的提高空间。</p>
<p>&nbsp;</p>
<p>Pentaho Report Designer的界面<br /><img src="http://blog.itpub.net//resserver.php?blogId=2570&amp;resource=Pentaho_Report_Designer.PNG" alt="Pentaho Report Designer的图片" /></p>
<p>Pentaho Report Designer的报表例子<br /><img src="http://blog.itpub.net//resserver.php?blogId=2570&amp;resource=Pentaho_Report_Designer_Sample1.PNG" alt="Pentaho Report Designer的图片" /></p>
<p>在表格上嵌入图表的例子（可以通过设置图表的类型和显示的数据来产生图表）</p>
<p><img src="http://blog.itpub.net//resserver.php?blogId=2570&amp;resource=pentaho_report_designer_chartresult1.JPG" alt="线图" /></p>
<p><a href="http://qinhui99.itpub.net/post/2570/200384"></a></p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/207091#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 23 Jun 2008 14:03:03 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/207091</link>
        <guid>http://goby2008.javaeye.com/blog/207091</guid>
      </item>
      <item>
        <title>KVM切换器</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/206864" style="color:red;">http://goby2008.javaeye.com/blog/206864</a>&nbsp;
          发表时间: 2008年06月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>D-Link DKVM-82K两端口KVM切换器操作简易</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/206864#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Sun, 22 Jun 2008 17:04:02 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/206864</link>
        <guid>http://goby2008.javaeye.com/blog/206864</guid>
      </item>
      <item>
        <title>oracle基本命令</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/204120" style="color:red;">http://goby2008.javaeye.com/blog/204120</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>一、ORACLE的启动和关闭<br />1、在单机环境下<br />要想启动或关闭ORACLE系统必须首先切换到ORACLE用户，如下<br />su&nbsp;-&nbsp;oracle<br /><br />a、启动ORACLE系统<br />oracle&gt;svrmgrl<br />SVRMGR&gt;connect&nbsp;internal<br />SVRMGR&gt;startup<br />SVRMGR&gt;quit<br /><br />b、关闭ORACLE系统<br />oracle&gt;svrmgrl<br />SVRMGR&gt;connect&nbsp;internal<br />SVRMGR&gt;shutdown<br />SVRMGR&gt;quit<br /><br />启动oracle9i数据库命令：<br />$&nbsp;sqlplus&nbsp;/nolog<br /><br />SQL*Plus:&nbsp;Release&nbsp;9.2.0.1.0&nbsp;-&nbsp;Production&nbsp;on&nbsp;Fri&nbsp;Oct&nbsp;31&nbsp;13:53:53&nbsp;2003<br /><br />Copyright&nbsp;(c)&nbsp;1982,&nbsp;2002,&nbsp;Oracle&nbsp;Corporation.&nbsp;&nbsp;All&nbsp;rights&nbsp;reserved.<br /><br />SQL&gt;&nbsp;connect&nbsp;/&nbsp;as&nbsp;sysdba&nbsp;&nbsp;<br />Connected&nbsp;to&nbsp;an&nbsp;idle&nbsp;instance.<br />SQL&gt;&nbsp;startup^C<br /><br />SQL&gt;&nbsp;startup<br />ORACLE&nbsp;instance&nbsp;started.<br /><br /><br />2、在双机环境下<br />要想启动或关闭ORACLE系统必须首先切换到root用户，如下<br />su&nbsp;－&nbsp;root<br /><br />a、启动ORACLE系统<br />hareg&nbsp;－y&nbsp;oracle<br /><br />b、关闭ORACLE系统<br />hareg&nbsp;－n&nbsp;oracle<br /><br />Oracle数据库有哪几种启动方式<br /><br /><br />说明：<br /><br />有以下几种启动方式：<br />1、startup&nbsp;nomount<br />非安装启动，这种方式启动下可执行：重建控制文件、重建数据库<br /><br />读取init.ora文件，启动instance，即启动SGA和后台进程，这种启动只需要init.ora文件。<br /><br /><br />2、startup&nbsp;mount&nbsp;dbname<br />安装启动，这种方式启动下可执行：<br />数据库日志归档、<br />数据库介质恢复、<br />使数据文件联机或脱机，<br />重新定位数据文件、重做日志文件。<br /><br />执行&ldquo;nomount&rdquo;，然后打开控制文件，确认数据文件和联机日志文件的位置，<br />但此时不对数据文件和日志文件进行校验检查。<br /><br /><br />3、startup&nbsp;open&nbsp;dbname<br />先执行&ldquo;nomount&rdquo;，然后执行&ldquo;mount&rdquo;，再打开包括Redo&nbsp;log文件在内的所有数据库文件，<br />这种方式下可访问数据库中的数据。<br /><br /><br />4、startup，等于以下三个命令<br />startup&nbsp;nomount<br />alter&nbsp;database&nbsp;mount<br />alter&nbsp;database&nbsp;open<br /><br /><br />5、startup&nbsp;restrict<br />约束方式启动<br />这种方式能够启动数据库，但只允许具有一定特权的用户访问<br />非特权用户访问时，会出现以下提示：<br />ERROR：<br />ORA-01035:&nbsp;ORACLE&nbsp;只允许具有&nbsp;RESTRICTED&nbsp;SESSION&nbsp;权限的用户使用<br /><br /><br />6、startup&nbsp;force<br />强制启动方式<br />当不能关闭数据库时，可以用startup&nbsp;force来完成数据库的关闭<br />先关闭数据库，再执行正常启动数据库命令<br /><br /><br />7、startup&nbsp;pfile=参数文件名<br />带初始化参数文件的启动方式<br />先读取参数文件，再按参数文件中的设置启动数据库<br />例：startup&nbsp;pfile=E:Oracleadminoradbpfileinit.ora<br /><br /><br />8、startup&nbsp;EXCLUSIVE<br />二、用户如何有效地利用数据字典<br />&nbsp;&nbsp;　ORACLE的数据字典是数据库的重要组成部分之一，它随着数据库的产生而产生,&nbsp;随着数据库的变化而变化,<br />体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。<br />我们不能手工修改数据字典里的信息。<br /><br />　　很多时候，一般的ORACLE用户不知道如何有效地利用它。<br /><br />　　dictionary　　　全部数据字典表的名称和解释，它有一个同义词dict<br />&nbsp;&nbsp;&nbsp;&nbsp;dict_column　　&nbsp;全部数据字典表里字段名称和解释<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;如果我们想查询跟索引有关的数据字典时，可以用下面这条SQL语句:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;dictionary&nbsp;where&nbsp;instr(comments,'index')&gt;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;如果我们想知道user_indexes表各字段名称的详细含义，可以用下面这条SQL语句:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;column_name,comments&nbsp;from&nbsp;dict_columns&nbsp;where&nbsp;table_name='USER_INDEXES';<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;依此类推，就可以轻松知道数据字典的详细名称和解释，不用查看ORACLE的其它文档资料了。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;1、用户<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看当前用户的缺省表空间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;username,default_tablespace&nbsp;from&nbsp;user_users;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看当前用户的角色<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_role_privs;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看当前用户的系统权限和表级权限<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_sys_privs;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_tab_privs;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;2、表<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看用户下所有的表<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_tables;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看名称包含log字符的表<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;object_name,object_id&nbsp;from&nbsp;user_objects<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;instr(object_name,'LOG')&gt;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看某表的创建时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;object_name,created&nbsp;from&nbsp;user_objects&nbsp;where&nbsp;object_name=upper('&amp;table_name');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看某表的大小<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;sum(bytes)/(1024*1024)&nbsp;as&nbsp;"size(M)"&nbsp;from&nbsp;user_segments<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;segment_name=upper('&amp;table_name');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看放在ORACLE的内存区里的表<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;table_name,cache&nbsp;from&nbsp;user_tables&nbsp;where&nbsp;instr(cache,'Y')&gt;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;3、索引<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看索引个数和类别<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;index_name,index_type,table_name&nbsp;from&nbsp;user_indexes&nbsp;order&nbsp;by&nbsp;table_name;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看索引被索引的字段<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_ind_columns&nbsp;where&nbsp;index_name=upper('&amp;index_name');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看索引的大小<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;sum(bytes)/(1024*1024)&nbsp;as&nbsp;"size(M)"&nbsp;from&nbsp;user_segments<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;segment_name=upper('&amp;index_name');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;4、序列号<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看序列号，last_number是当前值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_sequences;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;5、视图<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看视图的名称<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;view_name&nbsp;from&nbsp;user_views;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看创建视图的select语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;set&nbsp;view_name,text_length&nbsp;from&nbsp;user_views;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;set&nbsp;long&nbsp;2000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明：可以根据视图的text_length值设定set&nbsp;long&nbsp;的大小<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;text&nbsp;from&nbsp;user_views&nbsp;where&nbsp;view_name=upper('&amp;view_name');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;6、同义词<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看同义词的名称<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;*&nbsp;from&nbsp;user_synonyms;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;7、约束条件<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看某表的约束条件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;constraint_name,&nbsp;constraint_type,search_condition,&nbsp;r_constraint_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;user_constraints&nbsp;where&nbsp;table_name&nbsp;=&nbsp;upper('&amp;table_name');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;c.constraint_name,c.constraint_type,cc.column_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;user_constraints&nbsp;c,user_cons_columns&nbsp;cc<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;c.owner&nbsp;=&nbsp;upper('&amp;table_owner')&nbsp;and&nbsp;c.table_name&nbsp;=&nbsp;upper('&amp;table_name')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;c.owner&nbsp;=&nbsp;cc.owner&nbsp;and&nbsp;c.constraint_name&nbsp;=&nbsp;cc.constraint_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;cc.position;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;8、存储函数和过程<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看函数和过程的状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;object_name,status&nbsp;from&nbsp;user_objects&nbsp;where&nbsp;object_type='FUNCTION';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;object_name,status&nbsp;from&nbsp;user_objects&nbsp;where&nbsp;object_type='PROCEDURE';<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看函数和过程的源代码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;select&nbsp;text&nbsp;from&nbsp;all_source&nbsp;where&nbsp;owner=user&nbsp;and&nbsp;name=upper('&amp;plsql_name');<br /><br /><br />三、查看数据库的SQL<br />1、查看表空间的名称及大小<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;t.tablespace_name,&nbsp;round(sum(bytes/(1024*1024)),0)&nbsp;ts_size<br />&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dba_tablespaces&nbsp;t,&nbsp;dba_data_files&nbsp;d<br />&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;t.tablespace_name&nbsp;=&nbsp;d.tablespace_name<br />&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;t.tablespace_name;<br /><br />2、查看表空间物理文件的名称及大小<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;tablespace_name,&nbsp;file_id,&nbsp;file_name,<br />&nbsp;&nbsp;&nbsp;&nbsp;round(bytes/(1024*1024),0)&nbsp;total_space<br />&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dba_data_files<br />&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;tablespace_name;<br /><br />3、查看回滚段名称及大小<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;segment_name,&nbsp;tablespace_name,&nbsp;r.status,<br />&nbsp;&nbsp;&nbsp;&nbsp;(initial_extent/1024)&nbsp;InitialExtent,(next_extent/1024)&nbsp;NextExtent,<br />&nbsp;&nbsp;&nbsp;&nbsp;max_extents,&nbsp;v.curext&nbsp;CurExtent<br />&nbsp;&nbsp;&nbsp;&nbsp;From&nbsp;dba_rollback_segs&nbsp;r,&nbsp;v$rollstat&nbsp;v<br />&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;r.segment_id&nbsp;=&nbsp;v.usn(+)<br />&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;segment_name&nbsp;;<br /><br />4、查看控制文件<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;name&nbsp;from&nbsp;v$controlfile;<br /><br />5、查看日志文件<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;member&nbsp;from&nbsp;v$logfile;<br /><br />6、查看表空间的使用情况<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;sum(bytes)/(1024*1024)&nbsp;as&nbsp;free_space,tablespace_name<br />&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dba_free_space<br />&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;tablespace_name;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;A.TABLESPACE_NAME,A.BYTES&nbsp;TOTAL,B.BYTES&nbsp;USED,&nbsp;C.BYTES&nbsp;FREE,<br />&nbsp;&nbsp;&nbsp;&nbsp;(B.BYTES*100)/A.BYTES&nbsp;"%&nbsp;USED",(C.BYTES*100)/A.BYTES&nbsp;"%&nbsp;FREE"<br />&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;SYS.SM$TS_AVAIL&nbsp;A,SYS.SM$TS_USED&nbsp;B,SYS.SM$TS_FREE&nbsp;C<br />&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;A.TABLESPACE_NAME=B.TABLESPACE_NAME&nbsp;AND&nbsp;A.TABLESPACE_NAME=C.TABLESPACE_NAME;<br /><br />7、查看数据库库对象<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;owner,&nbsp;object_type,&nbsp;status,&nbsp;count(*)&nbsp;count#&nbsp;from&nbsp;all_objects&nbsp;group&nbsp;by&nbsp;owner,&nbsp;object_type,&nbsp;status;<br /><br />8、查看数据库的版本<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Select&nbsp;version&nbsp;FROM&nbsp;Product_component_version<br />&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;SUBSTR(PRODUCT,1,6)='Oracle';<br /><br />9、查看数据库的创建日期和归档方式<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Select&nbsp;Created,&nbsp;Log_Mode,&nbsp;Log_Mode&nbsp;From&nbsp;V$Database;<br />四、ORACLE用户连接的管理<br /><br />用系统管理员，查看当前数据库有几个用户连接：<br /><br />SQL&gt;&nbsp;select&nbsp;username,sid,serial#&nbsp;from&nbsp;v$session;<br /><br />如果要停某个连接用<br /><br />SQL&gt;&nbsp;alter&nbsp;system&nbsp;kill&nbsp;session&nbsp;'sid,serial#';<br /><br />如果这命令不行,找它UNIX的进程数<br /><br />SQL&gt;&nbsp;select&nbsp;pro.spid&nbsp;from&nbsp;v$session&nbsp;ses,v$process&nbsp;pro&nbsp;where&nbsp;ses.sid=21&nbsp;and&nbsp;ses.paddr=pro.addr;<br /><br />说明：21是某个连接的sid数<br /><br />然后用&nbsp;kill&nbsp;命令杀此进程号。<br /><br /><br />五、SQL*PLUS使用<br />a、近入SQL*Plus<br />$sqlplus&nbsp;用户名/密码<br /><br />&nbsp;&nbsp;&nbsp;退出SQL*Plus<br />SQL&gt;exit<br /><br />b、在sqlplus下得到帮助信息<br />列出全部SQL命令和SQL*Plus命令<br />SQL&gt;help<br />列出某个特定的命令的信息<br />SQL&gt;help&nbsp;命令名<br /><br />c、显示表结构命令DESCRIBE<br />SQL&gt;DESC&nbsp;表名<br /><br />d、SQL*Plus中的编辑命令<br />显示SQL缓冲区命令<br />SQL&gt;L<br /><br />修改SQL命令<br />首先要将待改正行变为当前行<br />SQL&gt;n<br />用CHANGE命令修改内容<br />SQL&gt;c/旧/新<br />重新确认是否已正确<br />SQL&gt;L<br /><br />使用INPUT命令可以在SQL缓冲区中增加一行或多行<br />SQL&gt;i<br />SQL&gt;输入内容<br /><br />e、调用外部系统编辑器<br />SQL&gt;edit&nbsp;文件名<br />可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型，在login.sql文件中定义如下一行<br />DEFINE_EDITOR=vi<br /><br />f、运行命令文件<br />SQL&gt;START&nbsp;test<br />SQL&gt;@test<br /><br />常用SQL*Plus语句<br />a、表的创建、修改、删除<br />创建表的命令格式如下：<br />create&nbsp;table&nbsp;表名&nbsp;（列说明列表）；<br /><br />为基表增加新列命令如下：<br />ALTER&nbsp;TABLE&nbsp;表名&nbsp;ADD&nbsp;（列说明列表）<br />例：为test表增加一列Age，用来存放年龄<br />&nbsp;&nbsp;&nbsp;&nbsp;sql&gt;alter&nbsp;table&nbsp;test<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;（Age&nbsp;number(3)）；<br /><br />修改基表列定义命令如下：<br />ALTER&nbsp;TABLE&nbsp;表名<br />MODIFY&nbsp;（列名&nbsp;数据类型）<br />例：将test表中的Count列宽度加长为10个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;sql&gt;alter&nbsp;atble&nbsp;test<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;（County&nbsp;char(10)）；<br /><br />b、将一张表删除语句的格式如下：<br />DORP&nbsp;TABLE&nbsp;表名；<br />例：表删除将同时删除表的数据和表的定义<br />sql&gt;drop&nbsp;table&nbsp;test<br /><br />c、表空间的创建、删除<br /><br /><br />六、ORACLE逻辑备份的SH文件<br /><br />完全备份的SH文件：exp_comp.sh<br /><br />rq=`&nbsp;date&nbsp;+"%m%d"&nbsp;`<br /><br />su&nbsp;-&nbsp;oracle&nbsp;-c&nbsp;"exp&nbsp;system/manager&nbsp;full=y&nbsp;inctype=complete&nbsp;file=/oracle/export/db_comp$rq.dmp"<br /><br />累计备份的SH文件：exp_cumu.sh<br /><br />rq=`&nbsp;date&nbsp;+"%m%d"&nbsp;`<br /><br />su&nbsp;-&nbsp;oracle&nbsp;-c&nbsp;"exp&nbsp;system/manager&nbsp;full=y&nbsp;inctype=cumulative&nbsp;file=/oracle/export/db_cumu$rq.dmp"<br /><br />增量备份的SH文件:&nbsp;exp_incr.sh<br /><br />rq=`&nbsp;date&nbsp;+"%m%d"&nbsp;`<br /><br />su&nbsp;-&nbsp;oracle&nbsp;-c&nbsp;"exp&nbsp;system/manager&nbsp;full=y&nbsp;inctype=incremental&nbsp;file=/oracle/export/db_incr$rq.dmp"<br /><br />root用户crontab文件<br />/var/spool/cron/crontabs/root增加以下内容<br /><br />0&nbsp;2&nbsp;1&nbsp;*&nbsp;*&nbsp;/oracle/exp_comp.sh<br /><br />30&nbsp;2&nbsp;*&nbsp;*&nbsp;0-5&nbsp;/oracle/exp_incr.sh<br /><br />45&nbsp;2&nbsp;*&nbsp;*&nbsp;6&nbsp;/oracle/exp_cumu.sh<br /><br />当然这个时间表可以根据不同的需求来改变的，这只是一个例子。<br /><br /><br />七、ORACLE&nbsp;常用的SQL语法和数据对象<br /><br />一.数据控制语句&nbsp;(DML)&nbsp;部分<br /><br />1.INSERT&nbsp;&nbsp;(往数据表里插入记录的语句)<br /><br />INSERT&nbsp;INTO&nbsp;表名(字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;)&nbsp;VALUES&nbsp;(&nbsp;值1,&nbsp;值2,&nbsp;&hellip;&hellip;);<br />INSERT&nbsp;INTO&nbsp;表名(字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;)&nbsp;&nbsp;SELECT&nbsp;(字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;)&nbsp;FROM&nbsp;另外的表名;<br /><br />字符串类型的字段值必须用单引号括起来,&nbsp;例如:&nbsp;&rsquo;GOOD&nbsp;DAY&rsquo;<br />如果字段值里包含单引号&rsquo;&nbsp;需要进行字符串转换,&nbsp;我们把它替换成两个单引号''.<br />字符串类型的字段值超过定义的长度会出错,&nbsp;最好在插入前进行长度校验.<br /><br />日期字段的字段值可以用当前数据库的系统时间SYSDATE,&nbsp;精确到秒<br />或者用字符串转换成日期型函数TO_DATE(&lsquo;2001-08-01&rsquo;,&rsquo;YYYY-MM-DD&rsquo;)<br />TO_DATE()还有很多种日期格式,&nbsp;可以参看ORACLE&nbsp;DOC.<br />年-月-日&nbsp;小时:分钟:秒&nbsp;的格式YYYY-MM-DD&nbsp;HH24:MI:SS<br /><br />INSERT时最大可操作的字符串长度小于等于4000个单字节,&nbsp;如果要插入更长的字符串,&nbsp;请考虑字段用CLOB类型,<br />方法借用ORACLE里自带的DBMS_LOB程序包.<br /><br />INSERT时如果要用到从1开始自动增长的序列号,&nbsp;应该先建立一个序列号<br />CREATE&nbsp;SEQUENCE&nbsp;序列号的名称&nbsp;(最好是表名+序列号标记)&nbsp;INCREMENT&nbsp;BY&nbsp;1&nbsp;&nbsp;START&nbsp;&nbsp;WITH&nbsp;&nbsp;1<br />MAXVALUE&nbsp;&nbsp;99999&nbsp;&nbsp;CYCLE&nbsp;&nbsp;NOCACHE;<br />其中最大的值按字段的长度来定,&nbsp;如果定义的自动增长的序列号&nbsp;NUMBER(6)&nbsp;,&nbsp;最大值为999999<br />INSERT&nbsp;语句插入这个字段值为:&nbsp;序列号的名称.NEXTVAL<br /><br />2.DELETE&nbsp;&nbsp;(删除数据表里记录的语句)<br /><br />DELETE&nbsp;FROM表名&nbsp;WHERE&nbsp;条件;<br /><br />注意：删除记录并不能释放ORACLE里被占用的数据块表空间.&nbsp;它只把那些被删除的数据块标成unused.<br /><br />如果确实要删除一个大表里的全部记录,&nbsp;可以用&nbsp;TRUNCATE&nbsp;命令,&nbsp;它可以释放占用的数据块表空间<br />TRUNCATE&nbsp;TABLE&nbsp;表名;<br />此操作不可回退.<br /><br />3.UPDATE&nbsp;&nbsp;(修改数据表里记录的语句)<br /><br />UPDATE表名&nbsp;SET&nbsp;字段名1=值1,&nbsp;字段名2=值2,&nbsp;&hellip;&hellip;&nbsp;WHERE&nbsp;条件;<br /><br />如果修改的值N没有赋值或定义时,&nbsp;将把原来的记录内容清为NULL,&nbsp;最好在修改前进行非空校验;<br />值N超过定义的长度会出错,&nbsp;最好在插入前进行长度校验..<br /><br />注意事项:<br />A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上SQL语句对表都加上了行级锁,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确认完成后,&nbsp;必须加上事物处理结束的命令&nbsp;COMMIT&nbsp;才能正式生效,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否则改变不一定写入数据库里.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果想撤回这些操作,&nbsp;可以用命令&nbsp;ROLLBACK&nbsp;复原.<br /><br />B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在运行INSERT,&nbsp;DELETE&nbsp;和&nbsp;UPDATE&nbsp;语句前最好估算一下可能操作的记录范围,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应该把它限定在较小&nbsp;(一万条记录)&nbsp;范围内,.&nbsp;否则ORACLE处理这个事物用到很大的回退段.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序响应慢甚至失去响应.&nbsp;如果记录数上十万以上这些操作,&nbsp;可以把这些SQL语句分段分次完成,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其间加上COMMIT&nbsp;确认事物处理.<br />二.数据定义&nbsp;(DDL)&nbsp;部分<br /><br />1.CREATE&nbsp;(创建表,&nbsp;索引,&nbsp;视图,&nbsp;同义词,&nbsp;过程,&nbsp;函数,&nbsp;数据库链接等)<br /><br />ORACLE常用的字段类型有<br />CHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;固定长度的字符串<br />VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可变长度的字符串<br />NUMBER(M,N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数字型M是位数总长度,&nbsp;N是小数的长度<br />DATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日期类型<br /><br />创建表时要把较小的不为空的字段放在前面,&nbsp;可能为空的字段放在后面<br /><br />创建表时可以用中文的字段名,&nbsp;但最好还是用英文的字段名<br /><br />创建表时可以给字段加上默认值,&nbsp;例如&nbsp;DEFAULT&nbsp;SYSDATE<br />这样每次插入和修改时,&nbsp;不用程序操作这个字段都能得到动作的时间<br /><br />创建表时可以给字段加上约束条件<br />例如&nbsp;不允许重复&nbsp;UNIQUE,&nbsp;关键字&nbsp;PRIMARY&nbsp;KEY<br /><br />2.ALTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(改变表,&nbsp;索引,&nbsp;视图等)<br /><br />改变表的名称<br />ALTER&nbsp;TABLE&nbsp;表名1&nbsp;&nbsp;TO&nbsp;表名2;<br /><br />在表的后面增加一个字段<br />ALTER&nbsp;TABLE表名&nbsp;ADD&nbsp;字段名&nbsp;字段名描述;<br /><br />修改表里字段的定义描述<br />ALTER&nbsp;TABLE表名&nbsp;MODIFY字段名&nbsp;字段名描述;<br /><br />给表里的字段加上约束条件<br />ALTER&nbsp;TABLE&nbsp;表名&nbsp;ADD&nbsp;CONSTRAINT&nbsp;约束名&nbsp;PRIMARY&nbsp;KEY&nbsp;(字段名);<br />ALTER&nbsp;TABLE&nbsp;表名&nbsp;ADD&nbsp;CONSTRAINT&nbsp;约束名&nbsp;UNIQUE&nbsp;(字段名);<br /><br />把表放在或取出数据库的内存区<br />ALTER&nbsp;TABLE&nbsp;表名&nbsp;CACHE;<br />ALTER&nbsp;TABLE&nbsp;表名&nbsp;NOCACHE;<br /><br />3.DROP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(删除表,&nbsp;索引,&nbsp;视图,&nbsp;同义词,&nbsp;过程,&nbsp;函数,&nbsp;数据库链接等)<br /><br />删除表和它所有的约束条件<br />DROP&nbsp;TABLE&nbsp;表名&nbsp;CASCADE&nbsp;CONSTRAINTS;<br /><br />4.TRUNCATE&nbsp;(清空表里的所有记录,&nbsp;保留表的结构)<br /><br />TRUNCATE&nbsp;表名;<br /><br />三.查询语句&nbsp;(SELECT)&nbsp;部分<br /><br />SELECT字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;&nbsp;FROM&nbsp;表名1,&nbsp;[表名2,&nbsp;&hellip;&hellip;]&nbsp;WHERE&nbsp;条件;<br /><br />字段名可以带入函数<br />&nbsp;&nbsp;例如:&nbsp;&nbsp;COUNT(*),&nbsp;MIN(字段名),&nbsp;&nbsp;MAX(字段名),&nbsp;&nbsp;AVG(字段名),&nbsp;DISTINCT(字段名),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TO_CHAR(DATE字段名,'YYYY-MM-DD&nbsp;HH24:MI:SS')<br /><br />NVL(EXPR1,&nbsp;EXPR2)函数<br />解释:<br />IF&nbsp;EXPR1=NULL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN&nbsp;EXPR2<br />ELSE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN&nbsp;EXPR1<br /><br />DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数<br />解释:<br />IF&nbsp;AA=V1&nbsp;THEN&nbsp;RETURN&nbsp;R1<br />IF&nbsp;AA=V2&nbsp;THEN&nbsp;RETURN&nbsp;R2<br />..&hellip;<br />ELSE<br />RETURN&nbsp;NULL<br /><br />LPAD(char1,n,char2)函数<br />解释:<br />字符char1按制定的位数n显示，不足的位数用char2字符串替换左边的空位<br /><br />字段名之间可以进行算术运算<br />例如:&nbsp;&nbsp;(字段名1*字段名1)/3<br /><br />查询语句可以嵌套<br />例如:&nbsp;SELECT&nbsp;&hellip;&hellip;&nbsp;FROM<br />(SELECT&nbsp;&hellip;&hellip;&nbsp;FROM表名1,&nbsp;[表名2,&nbsp;&hellip;&hellip;]&nbsp;WHERE&nbsp;条件)&nbsp;WHERE&nbsp;条件2;<br /><br />两个查询语句的结果可以做集合操作<br />例如:&nbsp;并集UNION(去掉重复记录),&nbsp;并集UNION&nbsp;ALL(不去掉重复记录),&nbsp;差集MINUS,&nbsp;&nbsp;交集INTERSECT<br /><br />分组查询<br />SELECT字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;&nbsp;FROM&nbsp;表名1,&nbsp;[表名2,&nbsp;&hellip;&hellip;]&nbsp;GROUP&nbsp;BY字段名1<br />[HAVING&nbsp;条件]&nbsp;;<br /><br />两个以上表之间的连接查询<br /><br />SELECT字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;&nbsp;FROM&nbsp;表名1,&nbsp;[表名2,&nbsp;&hellip;&hellip;]&nbsp;WHERE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表名1.字段名&nbsp;=&nbsp;表名2.&nbsp;字段名&nbsp;[&nbsp;AND&nbsp;&hellip;&hellip;]&nbsp;;<br /><br />SELECT字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;&nbsp;FROM&nbsp;表名1,&nbsp;[表名2,&nbsp;&hellip;&hellip;]&nbsp;WHERE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表名1.字段名&nbsp;=&nbsp;表名2.&nbsp;字段名(+)&nbsp;[&nbsp;AND&nbsp;&hellip;&hellip;]&nbsp;;<br /><br />有(+)号的字段位置自动补空值<br /><br />查询结果集的排序操作,&nbsp;默认的排序是升序ASC,&nbsp;降序是DESC<br /><br />SELECT字段名1,&nbsp;字段名2,&nbsp;&hellip;&hellip;&nbsp;FROM&nbsp;表名1,&nbsp;[表名2,&nbsp;&hellip;&hellip;]<br />ORDER&nbsp;BY字段名1,&nbsp;字段名2&nbsp;DESC;<br /><br />字符串模糊比较的方法<br /><br />INSTR(字段名,&nbsp;&lsquo;字符串&rsquo;)&gt;0<br />字段名&nbsp;LIKE&nbsp;&nbsp;&lsquo;字符串%&rsquo;&nbsp;&nbsp;[&lsquo;%字符串%&rsquo;]<br /><br />每个表都有一个隐含的字段ROWID,&nbsp;它标记着记录的唯一性.<br /><br />四.ORACLE里常用的数据对象&nbsp;(SCHEMA)<br /><br />1.索引&nbsp;(INDEX)<br /><br />CREATE&nbsp;INDEX&nbsp;索引名ON&nbsp;表名&nbsp;(&nbsp;字段1,&nbsp;[字段2,&nbsp;&hellip;&hellip;]&nbsp;);<br />ALTER&nbsp;INDEX&nbsp;索引名&nbsp;REBUILD;<br /><br />一个表的索引最好不要超过三个&nbsp;(特殊的大表除外),&nbsp;最好用单字段索引,&nbsp;结合SQL语句的分析执行情况,<br />也可以建立多字段的组合索引和基于函数的索引<br /><br />ORACLE8.1.7字符串可以索引的最大长度为1578&nbsp;单字节<br />ORACLE8.0.6字符串可以索引的最大长度为758&nbsp;单字节<br /><br />2.视图&nbsp;(VIEW)<br /><br />CREATE&nbsp;VIEW&nbsp;视图名AS&nbsp;SELECT&nbsp;&hellip;.&nbsp;FROM&nbsp;&hellip;..;<br />ALTER&nbsp;VIEW视图名&nbsp;COMPILE;<br /><br />视图仅是一个SQL查询语句,&nbsp;它可以把表之间复杂的关系简洁化.<br /><br />3.同义词&nbsp;(SYNONMY)<br />CREATE&nbsp;SYNONYM同义词名FOR&nbsp;表名;<br />CREATE&nbsp;SYNONYM同义词名FOR&nbsp;表名@数据库链接名;<br /><br />4.数据库链接&nbsp;(DATABASE&nbsp;LINK)<br />CREATE&nbsp;DATABASE&nbsp;LINK数据库链接名CONNECT&nbsp;TO&nbsp;用户名&nbsp;IDENTIFIED&nbsp;BY&nbsp;密码&nbsp;USING&nbsp;&lsquo;数据库连接字符串&rsquo;;<br /><br />数据库连接字符串可以用NET8&nbsp;EASY&nbsp;CONFIG或者直接修改TNSNAMES.ORA里定义.<br /><br />数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样<br /><br />数据库全局名称可以用以下命令查出<br />SELECT&nbsp;*&nbsp;FROM&nbsp;GLOBAL_NAME;<br /><br />查询远端数据库里的表<br />SELECT&nbsp;&hellip;&hellip;&nbsp;FROM&nbsp;表名@数据库链接名;<br /><br />五.权限管理&nbsp;(DCL)&nbsp;语句<br /><br />1.GRANT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;赋于权限<br />常用的系统权限集合有以下三个:<br />CONNECT(基本的连接),&nbsp;RESOURCE(程序开发),&nbsp;DBA(数据库管理)<br />常用的数据对象权限有以下五个:<br />ALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON&nbsp;数据对象名,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;ON&nbsp;数据对象名,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UPDATE&nbsp;ON&nbsp;数据对象名,<br />DELETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON&nbsp;数据对象名,&nbsp;&nbsp;INSERT&nbsp;ON&nbsp;数据对象名,&nbsp;&nbsp;&nbsp;ALTER&nbsp;&nbsp;ON&nbsp;数据对象名<br /><br />GRANT&nbsp;CONNECT,&nbsp;RESOURCE&nbsp;TO&nbsp;用户名;<br />GRANT&nbsp;SELECT&nbsp;ON&nbsp;表名&nbsp;TO&nbsp;用户名;<br />GRANT&nbsp;SELECT,&nbsp;INSERT,&nbsp;DELETE&nbsp;ON表名&nbsp;TO&nbsp;用户名1,&nbsp;用户名2;<br /><br />2.REVOKE&nbsp;回收权限<br /><br />REVOKE&nbsp;CONNECT,&nbsp;RESOURCE&nbsp;FROM&nbsp;用户名;<br />REVOKE&nbsp;SELECT&nbsp;ON&nbsp;表名&nbsp;FROM&nbsp;用户名;<br />REVOKE&nbsp;SELECT,&nbsp;INSERT,&nbsp;DELETE&nbsp;ON表名&nbsp;FROM&nbsp;用户名1,&nbsp;用户名2;<br /><br /><br />查询数据库中第63号错误：<br />select&nbsp;orgaddr,destaddr&nbsp;from&nbsp;sm_histable0116&nbsp;where&nbsp;error_code='63';<br /><br />查询数据库中开户用户最大提交和最大下发数：&nbsp;select&nbsp;MSISDN,TCOS,OCOS&nbsp;from&nbsp;ms_usertable；<br /><br /><br />查询数据库中各种错误代码的总和：<br />select&nbsp;error_code,count(*)&nbsp;from&nbsp;sm_histable0513&nbsp;group&nbsp;by&nbsp;error_code&nbsp;order<br />by&nbsp;error_code;<br /><br />查询报表数据库中话单统计种类查询。<br />select&nbsp;sum(Successcount)&nbsp;from&nbsp;tbl_MiddleMt0411&nbsp;where&nbsp;ServiceType2=111<br />select&nbsp;sum(successcount),servicetype&nbsp;from&nbsp;tbl_middlemt0411&nbsp;group&nbsp;by&nbsp;servicetype</div>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/204120#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 16 Jun 2008 14:05:07 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/204120</link>
        <guid>http://goby2008.javaeye.com/blog/204120</guid>
      </item>
      <item>
        <title>MySQL 备份和恢复</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/204118" style="color:red;">http://goby2008.javaeye.com/blog/204118</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>
<p>本文讨论 MySQL 的备份和恢复机制，以及如何维护数据表，包括最主要的两种表类型：<code><span style="font-family: NSimsun;">MyISAM</span></code> 和 <code><span style="font-family: NSimsun;">Innodb</span></code>，文中设计的 MySQL 版本为 5.0.22。</p>
<p>目前 MySQL 支持的免费备份工具有：<code><span style="font-family: NSimsun;">mysqldump、mysqlhotcopy</span></code>，还可以用 SQL 语法进行备份：<code><span style="font-family: NSimsun;">BACKUP TABLE</span></code> 或者 <code><span style="font-family: NSimsun;">SELECT INTO OUTFILE</span></code>，又或者备份<code><span style="font-family: NSimsun;">二进制日志（binlog）</span></code>，还可以是<code><span style="font-family: NSimsun;">直接拷贝数据文件和相关的配置文件</span></code>。MyISAM 表是保存成文件的形式，因此相对比较容易备份，上面提到的几种方法都可以使用。<code><span style="font-family: NSimsun;">Innodb</span></code> 所有的表都保存在同一个数据文件 <code><span style="font-family: NSimsun;">ibdata1</span></code> 中（也可能是多个文件，或者是独立的表空间文件），相对来说比较不好备份，免费的方案可以是<code><span style="font-family: NSimsun;">拷贝数据文件</span></code>、<code><span style="font-family: NSimsun;">备份 binlog</span></code>，或者用 <code><span style="font-family: NSimsun;">mysqldump</span></code>。</p>
<h3>1、mysqldump</h3>
<h4>1.1 备份</h4>
<p><code><span style="font-family: NSimsun;">mysqldump</span></code> 是采用SQL级别的备份机制，它将数据表导成 SQL 脚本文件，在不同的 MySQL 版本之间升级时相对比较合适，这也是最常用的备份方法。<br />现在来讲一下 <code><span style="font-family: NSimsun;">mysqldump</span></code> 的一些主要参数：</p>
<ul type="1">
<li>--compatible=name
<p>它告诉 mysqldump，导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 <code><span style="font-family: NSimsun;">ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options</span></code> 等，要使用几个值，用逗号将它们隔开。当然了，它并不保证能完全兼容，而是尽量兼容。 </p>
</li>
<li>--complete-insert，-c
<p>导出的数据采用包含字段名的完整 <code><span style="font-family: NSimsun;">INSERT</span></code> 方式，也就是把所有的值都写在一行。这么做能提高插入效率，但是可能会受到 <code><span style="font-family: NSimsun;">max_allowed_packet</span></code> 参数的影响而导致插入失败。因此，需要谨慎使用该参数，至少我不推荐。 </p>
</li>
<li>--default-character-set=charset
<p>指定导出数据时采用何种字符集，如果数据表不是采用默认的 <code><span style="font-family: NSimsun;">latin1</span></code> 字符集的话，那么导出时必须指定该选项，否则再次导入数据后将产生乱码问题。</p>
</li>
<li>--disable-keys
<p>告诉 <code><span style="font-family: NSimsun;">mysqldump</span></code> 在 <code><span style="font-family: NSimsun;">INSERT</span></code> 语句的开头和结尾增加 <code><span style="font-family: NSimsun;">/*!40000 ALTER TABLE table DISABLE KEYS */;</span></code> 和 <code><span style="font-family: NSimsun;">/*!40000 ALTER TABLE table ENABLE KEYS */;</span></code> 语句，这能大大提高插入语句的速度，因为它是在插入完所有数据后才重建索引的。该选项只适合 <code><span style="font-family: NSimsun;">MyISAM</span></code> 表。</p>
</li>
<li>--extended-insert = true|false
<p>默认情况下，<code><span style="font-family: NSimsun;">mysqldump</span></code> 开启 <code><span style="font-family: NSimsun;">--complete-insert</span></code> 模式，因此不想用它的的话，就使用本选项，设定它的值为 <code><span style="font-family: NSimsun;">false</span></code> 即可。 </p>
</li>
<li>--hex-blob
<p>使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 <code><span style="font-family: NSimsun;">BINARY、VARBINARY、BLOB</span></code>。</p>
</li>
<li>--lock-all-tables，-x
<p>在开始导出之前，提交请求锁定所有数据库中的所有表，以保证数据的一致性。这是一个全局读锁，并且自动关闭 <code><span style="font-family: NSimsun;">--single-transaction</span></code> 和 <code><span style="font-family: NSimsun;">--lock-tables</span></code> 选项。</p>
</li>
<li>--lock-tables
<p>它和 <code><span style="font-family: NSimsun;">--lock-all-tables</span></code> 类似，不过是锁定当前导出的数据表，而不是一下子锁定全部库下的表。本选项只适用于 <code><span style="font-family: NSimsun;">MyISAM</span></code> 表，如果是 <code><span style="font-family: NSimsun;">Innodb</span></code> 表可以用 <code><span style="font-family: NSimsun;">--single-transaction</span></code> 选项。</p>
</li>
<li>--no-create-info，-t
<p>只导出数据，而不添加 <code><span style="font-family: NSimsun;">CREATE TABLE</span></code> 语句。</p>
</li>
<li>--no-data，-d
<p>不导出任何数据，只导出数据库表结构。</p>
</li>
<li>--opt
<p>这只是一个快捷选项，等同于同时添加 <code><span style="font-family: NSimsun;">--add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset</span></code> 选项。本选项能让 <code><span style="font-family: NSimsun;">mysqldump</span></code> 很快的导出数据，并且导出的数据能很快导回。该选项默认开启，但可以用 <code><span style="font-family: NSimsun;">--skip-opt</span></code> 禁用。注意，如果运行 <code><span style="font-family: NSimsun;">mysqldump</span></code> 没有指定 <code><span style="font-family: NSimsun;">--quick</span></code> 或 <code><span style="font-family: NSimsun;">--opt</span></code> 选项，则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。</p>
</li>
<li>--quick，-q
<p>该选项在导出大表时很有用，它强制 <code><span style="font-family: NSimsun;">mysqldump</span></code> 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。</p>
</li>
<li>--routines，-R
<p>导出存储过程以及自定义函数。</p>
</li>
<li>--single-transaction
<p>该选项在导出数据之前提交一个 <code><span style="font-family: NSimsun;">BEGIN</span></code> SQL语句，<code><span style="font-family: NSimsun;">BEGIN</span></code> 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表，例如 <code><span style="font-family: NSimsun;">InnoDB</span></code> 和 <code><span style="font-family: NSimsun;">BDB</span></code>。<br />本选项和 <code><span style="font-family: NSimsun;">--lock-tables</span></code> 选项是互斥的，因为 <code><span style="font-family: NSimsun;">LOCK TABLES</span></code> 会使任何挂起的事务隐含提交。<br />要想导出大表的话，应结合使用 <code><span style="font-family: NSimsun;">--quick</span></code> 选项。 </p>
</li>
<li>--triggers
<p>同时导出触发器。该选项默认启用，用 <code><span style="font-family: NSimsun;">--skip-triggers</span></code> 禁用它。</p>
</li>
</ul>
<p>其他参数详情请参考手册，我通常使用以下 SQL 来备份 <code><span style="font-family: NSimsun;">MyISAM</span></code> 表：</p>
<pre>/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name &gt; db_name.sql
</pre>
<p>使用以下 SQL 来备份 <code><span style="font-family: NSimsun;">Innodb</span></code> 表：</p>
<pre>/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name &gt; db_name.sql
</pre>
<p>另外，如果想要实现在线备份，还可以使用 <code><span style="font-family: NSimsun;">--master-data</span></code> 参数来实现，如下：</p>
<pre>/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --master-data=1 \
--single-transaction --flush-logs db_name &gt; db_name.sql
</pre>
<p>它只是在一开始的瞬间请求锁表，然后就刷新binlog了，而后在导出的文件中加入<code><span style="font-family: NSimsun;">CHANGE MASTER</span></code> 语句来指定当前备份的binlog位置，如果要把这个文件恢复到slave里去，就可以采用这种方法来做。 </p>
<h4>1.2 还原</h4>
<p>用 <code><span style="font-family: NSimsun;">mysqldump</span></code> 备份出来的文件是一个可以直接倒入的 SQL 脚本，有两种方法可以将数据导入。</p>
<ul type="1">
<li>直接用 <code><span style="font-family: NSimsun;">mysql</span></code> 客户端
<p>例如：</p>
<pre>/usr/local/mysql/bin/mysql -uyejr -pyejr db_name &lt; db_name.sql
</pre>
<p>&nbsp;</p>
</li>
<li>用 SOURCE 语法
<p>其实这不是标准的 SQL 语法，而是 <code><span style="font-family: NSimsun;">mysql</span></code> 客户端提供的功能，例如：</p>
<pre>SOURCE /tmp/db_name.sql;
</pre>
<p>这里需要指定文件的绝对路径，并且必须是 <code><span style="font-family: NSimsun;">mysqld</span></code> 运行用户(例如 nobody)有权限读取的文件。</p>
</li>
</ul>
<h3>2、 mysqlhotcopy</h3>
<h4>2.1 备份</h4>
<p><code><span style="font-family: NSimsun;">mysqlhotcopy</span></code> 是一个 PERL 程序，最初由Tim Bunce编写。它使用 <code><span style="font-family: NSimsun;">LOCK TABLES、FLUSH TABLES</span></code> 和 <code><span style="font-family: NSimsun;">cp</span></code> 或 <code><span style="font-family: NSimsun;">scp</span></code> 来快速备份数据库。它是备份数据库或单个表的最快的途径，但它只能运行在数据库文件（包括数据表定义文件、数据文件、索引文件）所在的机器上。<code><span style="font-family: NSimsun;">mysqlhotcopy</span></code> 只能用于备份 <code><span style="font-family: NSimsun;">MyISAM</span></code>，并且只能运行在 <code><span style="font-family: NSimsun;">类Unix</span></code> 和 <code><span style="font-family: NSimsun;">NetWare</span></code> 系统上。</p>
<p><code><span style="font-family: NSimsun;">mysqlhotcopy</span></code> 支持一次性拷贝多个数据库，同时还支持正则表达。以下是几个例子：</p>
<pre>root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name /tmp (把数据库目录 <tt>db_name</tt> 拷贝到 <tt>/tmp</tt> 下)
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name_1 ... db_name_n /tmp
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name./regex/ /tmp
</pre>
<p>更详细的使用方法请查看手册，或者调用下面的命令来查看 <code><span style="font-family: NSimsun;">mysqlhotcopy</span></code> 的帮助：</p>
<pre>perldoc /usr/local/mysql/bin/mysqlhotcopy
</pre>
<p>注意，想要使用 <code><span style="font-family: NSimsun;">mysqlhotcopy</span></code>，必须要有 <code><span style="font-family: NSimsun;">SELECT、RELOAD(要执行 FLUSH TABLES)</span></code> 权限，并且还必须要能够有读取 <tt><span style="font-family: NSimsun;">datadir/db_name</span></tt> 目录的权限。 </p>
<h4>2.2 还原</h4>
<p><code><span style="font-family: NSimsun;">mysqlhotcopy</span></code> 备份出来的是整个数据库目录，使用时可以直接拷贝到 <code><span style="font-family: NSimsun;">mysqld</span></code> 指定的 <tt><span style="font-family: NSimsun;">datadir</span></tt> (在这里是 <tt><span style="font-family: NSimsun;">/usr/local/mysql/data/</span></tt>)目录下即可，同时要注意权限的问题，如下例：</p>
<pre>root#cp -rf db_name /usr/local/mysql/data/
root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 <code>mysqld</code> 运行用户)
</pre>
<p>&nbsp;</p>
<h3>3、 SQL 语法备份</h3>
<h4>3.1 备份</h4>
<p><code><span style="font-family: NSimsun;">BACKUP TABLE</span></code> 语法其实和 <code><span style="font-family: NSimsun;">mysqlhotcopy</span></code> 的工作原理差不多，都是锁表，然后拷贝数据文件。它能实现在线备份，但是效果不理想，因此不推荐使用。它只拷贝表结构文件和数据文件，不同时拷贝索引文件，因此恢复时比较慢。<br />例子：</p>
<pre>BACK TABLE tbl_name TO '/tmp/db_name/';
</pre>
<p>注意，必须要有 <code><span style="font-family: NSimsun;">FILE</span></code> 权限才能执行本SQL，并且目录 <tt><span style="font-family: NSimsun;">/tmp/db_name/</span></tt> 必须能被 <code><span style="font-family: NSimsun;">mysqld</span></code> 用户可写，导出的文件不能覆盖已经存在的文件，以避免安全问题。 </p>
<p><code><span style="font-family: NSimsun;">SELECT INTO OUTFILE</span></code> 则是把数据导出来成为普通的文本文件，可以自定义字段间隔的方式，方便处理这些数据。<br />例子：</p>
<pre>SELECT * INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
</pre>
<p>注意，必须要有 <code><span style="font-family: NSimsun;">FILE</span></code> 权限才能执行本SQL，并且文件 <tt><span style="font-family: NSimsun;">/tmp/db_name/tbl_name.txt</span></tt> 必须能被 <code><span style="font-family: NSimsun;">mysqld</span></code> 用户可写，导出的文件不能覆盖已经存在的文件，以避免安全问题。 </p>
<h4>3.2 恢复</h4>
<p>用 <code><span style="font-family: NSimsun;">BACKUP TABLE</span></code> 方法备份出来的文件，可以运行 <code><span style="font-family: NSimsun;">RESTORE TABLE</span></code> 语句来恢复数据表。<br />例子：</p>
<pre>RESTORE TABLE FROM '/tmp/db_name/';
</pre>
<p>权限要求类似上面所述。</p>
<p>用 <code><span style="font-family: NSimsun;">SELECT INTO OUTFILE</span></code> 方法备份出来的文件，可以运行 <code><span style="font-family: NSimsun;">LOAD DATA INFILE</span></code> 语句来恢复数据表。<br />例子：</p>
<pre>LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
</pre>
<p>权限要求类似上面所述。倒入数据之前，数据表要已经存在才行。如果担心数据会发生重复，可以增加 <code><span style="font-family: NSimsun;">REPLACE</span></code> 关键字来替换已有记录或者用 <code><span style="font-family: NSimsun;">IGNORE</span></code> 关键字来忽略他们。</p>
<h3>4、 启用二进制日志(binlog)</h3>
<p>采用 <code><span style="font-family: NSimsun;">binlog</span></code> 的方法相对来说更灵活，省心省力，而且还可以支持增量备份。</p>
<p>启用 <code><span style="font-family: NSimsun;">binlog</span></code> 时必须要重启 <code><span style="font-family: NSimsun;">mysqld</span></code>。首先，关闭 <code><span style="font-family: NSimsun;">mysqld</span></code>，打开 <code><span style="font-family: NSimsun;">my.cnf</span></code>，加入以下几行：</p>
<pre>server-id	= 1
log-bin		= binlog
log-bin-index	= binlog.index
</pre>
<p>然后启动 <code><span style="font-family: NSimsun;">mysqld</span></code> 就可以了。运行过程中会产生 <code><span style="font-family: NSimsun;">binlog.000001</span></code> 以及 <code><span style="font-family: NSimsun;">binlog.index</span></code>，前面的文件是 <code><span style="font-family: NSimsun;">mysqld</span></code> 记录所有对数据的更新操作，后面的文件则是所有 <code><span style="font-family: NSimsun;">binlog</span></code> 的索引，都不能轻易删除。关于 <code><span style="font-family: NSimsun;">binlog</span></code> 的信息请查看手册。</p>
<p>需要备份时，可以先执行一下 SQL 语句，让 <code><span style="font-family: NSimsun;">mysqld</span></code> 终止对当前 <code><span style="font-family: NSimsun;">binlog</span></code> 的写入，就可以把文件直接备份，这样的话就能达到增量备份的目的了：</p>
<pre>FLUSH LOGS;</pre>
<p>如果是备份复制系统中的从服务器，还应该备份 <tt><span style="font-family: NSimsun;">master.info</span></tt> 和 <tt><span style="font-family: NSimsun;">relay-log.info</span></tt> 文件。 </p>
<p>备份出来的 <code><span style="font-family: NSimsun;">binlog</span></code> 文件可以用 MySQL 提供的工具 <code><span style="font-family: NSimsun;">mysqlbinlog</span></code> 来查看，如：</p>
<pre>/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
</pre>
<p>该工具允许你显示指定的数据库下的所有 SQL 语句，并且还可以限定时间范围，相当的方便，详细的请查看手册。</p>
<p>恢复时，可以采用类似以下语句来做到：</p>
<pre>/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name
</pre>
<p>把 <code><span style="font-family: NSimsun;">mysqlbinlog</span></code> 输出的 SQL 语句直接作为输入来执行它。</p>
<p>如果你有空闲的机器，不妨采用这种方式来备份。由于作为 <code><span style="font-family: NSimsun;">slave</span></code> 的机器性能要求相对不是那么高，因此成本低，用低成本就能实现增量备份而且还能分担一部分数据查询压力，何乐而不为呢？</p>
<h3>5、 直接备份数据文件</h3>
<p>相较前几种方法，备份数据文件最为直接、快速、方便，缺点是基本上不能实现增量备份。为了保证数据的一致性，需要在靠背文件前，执行以下 SQL 语句：</p>
<pre>FLUSH TABLES WITH READ LOCK;</pre>
<p>也就是把内存中的数据都刷新到磁盘中，同时锁定数据表，以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单，直接拷贝回原来的数据库目录下即可。</p>
<p>注意，对于 <code><span style="font-family: NSimsun;">Innodb</span></code> 类型表来说，还需要备份其日志文件，即 <code><span style="font-family: NSimsun;">ib_logfile*</span></code> 文件。因为当 <code><span style="font-family: NSimsun;">Innodb</span></code> 表损坏时，就可以依靠这些日志文件来恢复。</p>
<h3>6、 备份策略</h3>
<p>对于中等级别业务量的系统来说，备份策略可以这么定：第一次全量备份，每天一次增量备份，每周再做一次全量备份，如此一直重复。而对于重要的且繁忙的系统来说，则可能需要每天一次全量备份，每小时一次增量备份，甚至更频繁。为了不影响线上业务，实现在线备份，并且能增量备份，最好的办法就是采用主从复制机制(<code><span style="font-family: NSimsun;">replication</span></code>)，在 <code><span style="font-family: NSimsun;">slave</span></code> 机器上做备份。</p>
<h3>7、 数据维护和灾难恢复</h3>
<p>作为一名DBA(我目前还不是，呵呵)，最重要的工作内容之一是保证数据表能安全、稳定、高速使用。因此，需要定期维护你的数据表。以下 SQL 语句就很有用：</p>
<pre>CHECK TABLE 或 REPAIR TABLE，检查或维护 MyISAM 表
OPTIMIZE TABLE，优化 MyISAM 表
ANALYZE TABLE，分析 MyISAM 表
</pre>
<p>当然了，上面这些命令起始都可以通过工具 <code><span style="font-family: NSimsun;">myisamchk</span></code> 来完成，在这里不作详述。</p>
<p><code><span style="font-family: NSimsun;">Innodb</span></code> 表则可以通过执行以下语句来整理碎片，提高索引速度：</p>
<pre>ALTER TABLE tbl_name ENGINE = Innodb;
</pre>
<p>这其实是一个 <code><span style="font-family: NSimsun;">NULL</span></code> 操作，表面上看什么也不做，实际上重新整理碎片了。</p>
<p>通常使用的 <code><span style="font-family: NSimsun;">MyISAM</span></code> 表可以用上面提到的恢复方法来完成。如果是索引坏了，可以用 <code><span style="font-family: NSimsun;">myisamchk</span></code> 工具来重建索引。而对于 <code><span style="font-family: NSimsun;">Innodb</span></code> 表来说，就没这么直接了，因为它把所有的表都保存在一个表空间了。不过 <code><span style="font-family: NSimsun;">Innodb</span></code> 有一个检查机制叫 <code><span style="font-family: NSimsun;">模糊检查点</span></code>，只要保存了日志文件，就能根据日志文件来修复错误。可以在 <tt><span style="font-family: NSimsun;">my.cnf</span></tt> 文件中，增加以下参数，让 <code><span style="font-family: NSimsun;">mysqld</span></code> 在启动时自动检查日志文件：</p>
<pre>innodb_force_recovery	= 4
</pre>
<p>关于该参数的信息请查看手册。</p>
<h3>8、 总结</h3>
<p>做好数据备份，定只好合适的备份策略，这是一个DBA所做事情的一小部分，万事开头难，就从现在开始吧！</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/204118#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 16 Jun 2008 14:03:22 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/204118</link>
        <guid>http://goby2008.javaeye.com/blog/204118</guid>
      </item>
      <item>
        <title>mysql中文网</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/204088" style="color:red;">http://goby2008.javaeye.com/blog/204088</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="text-decoration: underline;"><span style="color: #800080;">mysql中文网</span>
</span>
</p>
<p>&nbsp;</p>
<p><a href="http://imysql.cn/">http://imysql.cn/</a>
&nbsp;&nbsp; <a href="http://imysql.cn/?q=node/128">http://imysql.cn/?q=node/128</a>
</p>
<p>&nbsp;</p>
<h3 id="pagetitle">三分钟学会Sql Server的复制功能</h3>
<p><a href="http://www.51windows.net/data/?url=" target="_blank">http://www.51windows.net/data/?url=</a>/data/files/file_908.asp</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/204088#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 16 Jun 2008 13:13:07 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/204088</link>
        <guid>http://goby2008.javaeye.com/blog/204088</guid>
      </item>
      <item>
        <title>使用js判断undefined类型</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/202797" style="color:red;">http://goby2008.javaeye.com/blog/202797</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>var exp = undefined;<br />if&nbsp; (typeof(exp) == "undefined") {<br />&nbsp;&nbsp;&nbsp; alert("undefined");<br />} </p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/202797#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 13 Jun 2008 09:36:25 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/202797</link>
        <guid>http://goby2008.javaeye.com/blog/202797</guid>
      </item>
      <item>
        <title>tomcat下ajax‘post方式提交服务器乱码问题解决方案 </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/202796" style="color:red;">http://goby2008.javaeye.com/blog/202796</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>/*<br />分析：当调用request.getParameter()函数时，会自动进行一次URI的解码过程，<br />调用时内置的解码过程会导致乱码出现。<br />而URI 编码两次后，request.getParameter()函数得到的是原信息URI编码一次的内容。<br />再用可控的解码函数 java.net.URLDecoder.decode()就可解出原始的正确的信息。<br />*/<br />var params = <span style="color: #ff0000;">encodeURI</span>(<span style="color: #ff0000;">encodeURI</span>("method=post&amp;filed=hit&amp;keyword=" + keyword));<br />createXMLHttpRequest();<br />var url = "search.do";<br />xmlHttp.onreadystatechange = handleStateChange;<br />xmlHttp.open("POST",url,true);<br />xmlHttp.setRequestHeader("content-length",params.length);&nbsp; <br />xmlHttp.setRequestHeader('content-type', 'application/x-www-form-urlencoded');<br />xmlHttp.setRequestHeader("Connection", "close");<br />xmlHttp.send(params);<br /><br />服务器端代码：<br /><br />response.setContentType("text/html;charset=gb2312");<br />//ajax post传递的时候,一定是用utf8编码的,url 自己可以设定<br />String keyword = URLDecoder.decode((String)request.getParameter("keyword"),"utf-8");</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/202796#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 13 Jun 2008 09:35:15 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/202796</link>
        <guid>http://goby2008.javaeye.com/blog/202796</guid>
      </item>
      <item>
        <title>eclipse中js，css等文件中文乱码问题</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/202794" style="color:red;">http://goby2008.javaeye.com/blog/202794</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在eclipse中开发时，常常会发现如果js，css等里有中文的时候，直接打开会出现中文乱码，并且如果想输入中文，保存也无法保存，其实这是由于文件编码与字符编码等不匹配造成的，可以采用如下方法解决这一问题：<br /><br />Preference&mdash;&mdash;General&mdash;&mdash;Content Types&mdash;&mdash;JavaScript&mdash;&mdash;Default encoding<br /><br />上面就js编码的改变办法，你可以将编码更改为你项目编码gb2312或utf-8，其他文件编码改变相同。</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/202794#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 13 Jun 2008 09:34:35 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/202794</link>
        <guid>http://goby2008.javaeye.com/blog/202794</guid>
      </item>
      <item>
        <title> java 编写一个扫描仪程序</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/199231" style="color:red;">http://goby2008.javaeye.com/blog/199231</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">javatwain may be a powerful solution,you can go to www.gnome.sk to download the newest package. 
　　　JavaTwain version 5.1 is a part of the Morena 6.0 Framework now.
　　
　　　below is an simple example:
　　　/*
　　 * $Id: ExampleShow.java,v 1.5 2002/07/15 13:48:55 mmotovsk Exp $
　　 *
　　 * Copyright (c) 1999-2002 Gnome spol. s r.o. All Rights Reserved.
　　 *
　　 * This software is the confidential and proprietary information of
　　 * Gnome spol. s r.o. You shall not disclose such Confidential
　　 * Information and shall use it only in accordance with the terms
　　 * of the license agreement you entered into with Gnome.
　　 */
　　
　　// JavaTwain package version 5.1
　　
　　/** 
　　　ExampleShow demonstrates how to scan an image using defaults
　　　from the Twain source. &lt;BR&gt;
　　*/
　　
　　import java.awt.*;
　　import java.awt.event.*;
　　import SK.gnome.twain.*;
　　
　　public class ExampleShow extends Frame
　　{ Image image;
　　　public void paint(Graphics g)　
　　　{ if (null!=image)
　　　　　g.drawImage(image, 0, 0, this);
　　　}
　　　
　　　WindowListener windowAdapter=new WindowAdapter()
　　　{ public void windowClosing(WindowEvent e)
　　　　{ System.exit(0);
　　　　}
　　　};
　　　
　　　public ExampleShow()
　　　{ try
　　　　{ addWindowListener(windowAdapter);
　　　　　setTitle("ExampleShow Frame Application");
　　　　　// Open TWAIN select source dialog box
　　　　　// and initialize the source selected by the user. 
　　　　　TwainSource source=TwainManager.selectSource(null);
　　　　　image=Toolkit.getDefaultToolkit().createImage(source);
　　　　　// wait for the image to be completed
　　　　　MediaTracker tracker=new MediaTracker(this);
　　　　　tracker.addImage(image, 0);
　　　　　// this is the moment the scanner user interface pops up
　　　　　System.err.println("Start loading image ...");
　　　　　try
　　　　　{ tracker.waitForAll();
　　　　　}
　　　　　catch (InterruptedException e)
　　　　　{ System.err.println("Image loading was interrupted!");
　　　　　　e.printStackTrace();
　　　　　}
　　　　　tracker.removeImage(image);
　　　　　System.err.println("Image loaded ...");
　　　　　setSize(image.getWidth(this), image.getHeight(this));
　　　　　setVisible(true);
　　　　　TwainManager.close();
　　　　}
　　　　catch (TwainException e)
　　　　{ e.printStackTrace();
　　　　}
　　　}
　　　
　　　public static void main(String[] args)
　　　{ new ExampleShow();
　　　}
　　} </pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/199231#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Sun, 01 Jun 2008 22:30:40 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/199231</link>
        <guid>http://goby2008.javaeye.com/blog/199231</guid>
      </item>
      <item>
        <title>让IE支持PNG格式的JS库</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/196376" style="color:red;">http://goby2008.javaeye.com/blog/196376</a>&nbsp;
          发表时间: 2008年05月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>介绍<br /></strong><a href="http://www.schillmania.com/content/projects/png/" title="http://www.schillmania.com/content/projects/png/" target="_blank">http://www.schillmania.com/content/projects/png/</a><br />Demo<br /><a href="http://www.schillmania.com/projects/png/" title="http://www.schillmania.com/projects/png/" target="_blank">http://www.schillmania.com/projects/png/</a><br /><br /><strong>原理</strong><br />1.为PNG格式的图片建立一个完全相同的gif格式，在编码里面使用gif图片<br />2.利用IE支持DXImageTransform.Microsoft.AlphaImageLoader滤镜来使用PNG格式转换gif为png图片，并将png图片作为背景显示，首先检测浏览器，接下来判断class为png的元素，完成替换<br /><br /><strong>使用</strong><br />1.在&lt;head&gt;调用png.js<code class="code"><span style="font-family: NSimsun;">&lt;script type="text/<a href="http://javascript.chinahtml.com/" target="_blank">javascript</a>" src="png.js"&gt;&lt;/script&gt;</span></code>下载地址：<a href="http://www.schillmania.com/projects/png/png-demo.zip" title="http://www.schillmania.com/projects/png/png-demo.zip" target="_blank">http://www.schillmania.com/projects/png/png-demo.zip</a><br />2.用类png标记需要使用png格式的地方<br />首先建立两张同样的图片格式为别为png和gif，一是类库需要，二是防止IE被禁后破坏视觉效果<br />前景图片<code class="code"><span style="font-family: NSimsun;">&nbsp;&lt;img src="your-image.gif" class="png" style="width:XXXpx;height:YYYpx" /&gt;</span></code>背景图片<code class="code"><span style="font-family: NSimsun;">&lt;div class="png" style="width:xxxpx;height:xxxpx;background-image:url(your-image.gif);background-repeat:no-repeat"&gt;<br />&lt;/div&gt;</span></code>3.在&lt;/body&gt;之前加入<span style="font-family: NSimsun;"><code class="code">&nbsp;&lt;script type="text/<a href="http://javascript.chinahtml.com/" target="_blank">javascript</a>"&gt;<br />&nbsp;pngHandler.init();<br />&nbsp;&lt;/script&gt;</code><br /></span><strong>总结</strong><br />这样做png图片使用起来就方便多了，不用重复的去使用IE滤镜，比起手动使用IE滤镜同时加载的图片数量加倍，增加并发连接数<br /><br /><strong>其他方法 </strong><br />Fun with Transparent PNG Images<br /><a href="http://www.photoshoplab.com/fun-with-transparent-png-images.html" title="http://www.photoshoplab.com/fun-with-transparent-png-images.html" target="_blank">http://www.photoshoplab.com/fun-with-transparent-png-images.html</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/196376#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 24 May 2008 15:18:26 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/196376</link>
        <guid>http://goby2008.javaeye.com/blog/196376</guid>
      </item>
      <item>
        <title>jdk+tomcat+mysql+网站(ssh框架做的系统)打包成一个安装文件</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/193337" style="color:red;">http://goby2008.javaeye.com/blog/193337</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我想把jdk+tomcat+mysql+网站(ssh框架做的系统)打包成一个安装文件,客户只要点击安装程序就可以自动安装,然后在桌面上有一个快捷方式,点击就可以打开网站首页,进行操作. 有没有什么好的软件可以做到这样的效果呢?
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/193337#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Thu, 15 May 2008 17:00:45 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/193337</link>
        <guid>http://goby2008.javaeye.com/blog/193337</guid>
      </item>
      <item>
        <title>java 调用命令 备份MYSQL数据库 </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/192640" style="color:red;">http://goby2008.javaeye.com/blog/192640</a>&nbsp;
          发表时间: 2008年05月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">String command = "cmd /c C:/Program Files/MySQL/MySQL Server 5.0/bin&gt;mysqldump -h localhost -u root -p aijia &gt; E:/aijia.dmp";
  try {
   Process process = Runtime.getRuntime().exec(command);
   InputStreamReader ir = new InputStreamReader(process
     .getInputStream());
   LineNumberReader input = new LineNumberReader(ir);
   String line;
   while ((line = input.readLine()) != null)
    System.out.println(line);
   input.close();
  } catch (IOException e) {
   e.printStackTrace();
  }




另外

首先，设置mysql的环境变量（在path中添加%MYSQL_HOME%\bin），重启电脑。
完整代码：
    /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 备份和导入是一个互逆的过程。
         * 备份：程序调用mysql的备份命令，读出控制台输入流信息，写入.sql文件；
         * 导入：程序调用mysql的导入命令，把从.sql文件中读出的信息写入控制台的输出流
         * 注意：此时定向符"&gt;"和"&lt;"是不能用的
         */
        backup();
        load();
    }

    /**
     * 备份检验一个sql文件是否可以做导入文件用的一个判断方法：把该sql文件分别用记事本和ultra
     * edit打开，如果看到的中文均正常没有乱码，则可以用来做导入的源文件（不管sql文件的编码格式如何，也不管db的编码格式如何）
     */
    public static void backup() {
        try {
            Runtime rt = Runtime.getRuntime();

            // 调用 mysql 的 cmd:
            Process child = rt
                    .exec("mysqldump -u root --set-charset=utf8 bjse act_obj");// 设置导出编码为utf8。这里必须是utf8
           
            // 把进程执行中的控制台输出信息写入.sql文件，即生成了备份文件。注：如果不对控制台信息进行读出，则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
                       
            InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8，否则从流中读入的是乱码
           
            String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            // 组合控制台输出信息字符串
            BufferedReader br = new BufferedReader(xx);
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();
           
            // 要用来做导入用的sql目标文件：
            FileOutputStream fout = new FileOutputStream(
                    "e:/mysql-5.0.27-win32/bin/bjse22.sql");
            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
            writer.write(outStr);
            // 注：这里如果用缓冲方式写入文件的话，会导致中文乱码，用flush()方法则可以避免
            writer.flush();

            // 别忘记关闭输入输出流
            in.close();
            xx.close();
            br.close();
            writer.close();
            fout.close();

            System.out.println("/* Output OK! */");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 导入
     *
     */
    public static void load() {
        try {
            String fPath = "e:/mysql-5.0.27-win32/bin/bjse22.sql";
            Runtime rt = Runtime.getRuntime();

            // 调用 mysql 的 cmd:
            Process child = rt.exec("mysql -u root bjse ");
            OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流
            String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    new FileInputStream(fPath), "utf8"));
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();

            OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
            writer.write(outStr);
            // 注：这里如果用缓冲方式写入文件的话，会导致中文乱码，用flush()方法则可以避免
            writer.flush();
            // 别忘记关闭输入输出流
            out.close();
            br.close();
            writer.close();

            System.out.println("/* Load OK! */");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/192640#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Tue, 13 May 2008 16:44:30 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/192640</link>
        <guid>http://goby2008.javaeye.com/blog/192640</guid>
      </item>
      <item>
        <title>使用js判断undefined类型</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/192078" style="color:red;">http://goby2008.javaeye.com/blog/192078</a>&nbsp;
          发表时间: 2008年05月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="js">var exp = undefined;
if  (typeof(exp) == "undefined") {
    alert("undefined");
} 
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/192078#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 12 May 2008 08:23:36 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/192078</link>
        <guid>http://goby2008.javaeye.com/blog/192078</guid>
      </item>
      <item>
        <title>jxl导出excel时,可否使用excel表的求和公式</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/189946" style="color:red;">http://goby2008.javaeye.com/blog/189946</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我使用的是jxl导出excel时,可否使用excel表的公式作计算出结果作为一个字段啊!如: <br />   A   B   C <br />1  1  2    =A1/B1 <br />2  2  2    =A2/B2 <br />能否这样导出呢 ?
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/189946#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 05 May 2008 22:32:06 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/189946</link>
        <guid>http://goby2008.javaeye.com/blog/189946</guid>
      </item>
      <item>
        <title>CSS网址</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/184036" style="color:red;">http://goby2008.javaeye.com/blog/184036</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://www.osxcn.com/category/css">http://www.osxcn.com/category/css</a></p>
<p>&nbsp;<a href="http://jandan.net/2007/04/05/29-beautiful-blogger-templates.html">http://jandan.net/2007/04/05/29-beautiful-blogger-templates.html</a></p>
<p><a href="http://www.osxcn.com/css/css-gallery.html">http://www.osxcn.com/css/css-gallery.html</a></p>
<p>&nbsp;</p>
<p>---&gt;&gt;&gt;&gt;<a href="http://www.dynamicdrive.com/style/csslibrary/category/C2/">http://www.dynamicdrive.com/style/csslibrary/category/C2/</a>&nbsp;&nbsp;&nbsp; is very good.</p>
<p>&nbsp;</p>
<p><a href="http://www.blogjava.net/youxia/archive/2007/03/01/101320.html">http://www.blogjava.net/youxia/archive/2007/03/01/101320.html</a>&nbsp;<a href="http://www.blogjava.net/youxia/archive/2007/03/01/101320.html" class="singleposttitle" id="viewpost1_TitleUrl">SpringSide开发实战（六）：AJAX，在地狱中漫步</a> </p>
<p>----&gt;&gt;&gt;&gt;powerpoint模板&nbsp; <a href="http://www.pooban.com/">http://www.pooban.com/</a></p>
<p>----&gt;&gt;&gt;图片库&nbsp; <a href="http://www.tucoo.com/vector/index.htm">http://www.tucoo.com/vector/index.htm</a></p>
<p>&nbsp;</p>
<p>网页设计师联盟&nbsp;&nbsp; <a href="http://www.68design.net/Interview/Designers/list-1.html">http://www.68design.net/Interview/Designers/list-1.html</a></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/184036#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 18 Apr 2008 11:20:51 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/184036</link>
        <guid>http://goby2008.javaeye.com/blog/184036</guid>
      </item>
      <item>
        <title>如何优化这条sql语句呢?  </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/166482" style="color:red;">http://goby2008.javaeye.com/blog/166482</a>&nbsp;
          发表时间: 2008年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          select * from declarebill  where ModyfyTime like "%2008-02-22%" and EnterpriseType='外商投资企业' and Single_Audit='1' and billmode='02' or  EnterpriseType='中外合资企业' and ModyfyTime like "%2008-02-22%" and Single_Audit='1' and billmode='02' <br /><br />我想EnterpriseType字段中的'外商投资企业'和'中外合资企业' 都拥有这个条件ModyfyTime like "%2008-02-22%" and Single_Audit='1' and billmode='02' <br />应该如何优化呢?我现在写的太长啦!
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/166482#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 01 Mar 2008 19:04:58 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/166482</link>
        <guid>http://goby2008.javaeye.com/blog/166482</guid>
      </item>
      <item>
        <title>关于两表查询数据的问题</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/164765" style="color:red;">http://goby2008.javaeye.com/blog/164765</a>&nbsp;
          发表时间: 2008年02月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我这想通过一条sql语句，查询两表中，不同的数据。 

SQL codeselect billno from declarebill dl,(select billno from checkcapital)cp where dl.Check_Money=1 and dl.billno<>cp.billno


我的意思是declarebill中凡是符合Check_Money=1，并且是dl.billno <> cp.billno不相等的数据，但好像执行出来的结果不对，应该如何写个sql语句呢?
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/164765#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 25 Feb 2008 16:01:34 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/164765</link>
        <guid>http://goby2008.javaeye.com/blog/164765</guid>
      </item>
      <item>
        <title>hibernate3中文查询参数处理 </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/146381" style="color:red;">http://goby2008.javaeye.com/blog/146381</a>&nbsp;
          发表时间: 2007年12月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在使用hibernate3过程中遇到了一个问题：自己利用hibernate的分页原理创建了一个分页组件Page，该组件只需传入相应的HQL组件、页码、页面大小，就可以返回一个包括记录集及其相关信息的bean类，但在实在处理的时候就出现的问题，比如在分好页的页面中进行查询用户名包含&ldquo;管理员&rdquo;的用户，组装后的Hql语句为：</p>
<p>String para=request.getParameter(&quot;username&quot;);</p>
<p>String hql=from UserList ul where ul.username like &quot;'%&quot;+para+&quot;%'&quot;;</p>
<p>把该hql语句传入PageImp类的分页方法中处理，报错，检查日志文件，中文变为乱码，急，上网找答案，无果，继续找发现hibernate的hql不支持中文查询参数，汗！！！</p>
<p>想办法解决，我可不想改我写好的分页组件。既然h3不支持中文，那我就用h2的东东解析hql吧，试试吧</p>
<p>设置：</p>
<div class="code_title">xml 代码</div>
<p>
<prop key="hibernate.query.factory_class"></prop>
</p>
<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">prop</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;hibernate.query.factory_class&quot;</span><span class="tag">&gt;</span><span>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</span><span class="tag">&lt;/</span><span class="tag-name">prop</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>再运行，OK。颇有成就感！！：）</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/146381#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Thu, 06 Dec 2007 12:52:11 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/146381</link>
        <guid>http://goby2008.javaeye.com/blog/146381</guid>
      </item>
      <item>
        <title>Struts实时生成Excel文件下载</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/140508" style="color:red;">http://goby2008.javaeye.com/blog/140508</a>&nbsp;
          发表时间: 2007年11月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span id="ArticleContent1_ArticleContent1_lblContent">&nbsp; </span></p>
<p>我做的项目原来是先在服务器上生成一个excel文件，然后用jspsmartupload下载的，可是由于用jspsmartupload下载的excel文件由于编码问题会有损坏，而且服务器的压力也太大，所以改为在Action中生成excel文件，然后下载，方便多了。由于项目的原因，excel文件是实时生成的，对于jxl的使用，大家可以参考jxl相关的文章。<br />
有什么问题可以和我联系。<br />
MSN:whw_dream(AT)hotmail.com<br />
代码如下：<br />
test.jsp<br />
</p>
<p>&nbsp;</p>
<hr id="null" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
&lt;%@ taglib uri=&quot;/WEB-INF/struts-html.tld&quot; prefix=&quot;html&quot; %&gt;<br />
&lt;html:html&gt;<br />
&lt;html:button property=&quot;button&quot; onclick=&quot;printAll()&quot;&gt;<br />
DownLoad <br />
&lt;/html:button&gt;<br />
&lt;/html:html&gt;<br />
&lt;script language='javascript'&gt;<br />
function printAll(){ location.href=&quot;&lt;%=request.getContextPath()%&gt;<!--equest.getContextPath(-->/download.do&quot;; }<br />
&lt;/script&gt;<br />
</p>
<p>&nbsp;</p>
<hr id="null" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>DownloadAction.java<br />
</p>
<p>&nbsp;</p>
<hr id="null" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>import org.apache.struts.action.*;<br />
import javax.servlet.http.*;<br />
import java.io.OutputStream;<br />
import test.whw.upload.ExcelBean;<br />
/**<br />
&nbsp;* &lt;p&gt;Title:DownloadAction &lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Description: QRRSMMS &lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Copyright: Copyright (c) 2004 jiahansoft&lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Company: jiahansoft&lt;/p&gt;<br />
&nbsp;* @author wanghw<br />
&nbsp;* @version 1.0<br />
&nbsp;*/</p>
<p>public class DownloadAction extends Action {<br />
&nbsp; public ActionForward execute(ActionMapping mapping,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws Exception {<br />
&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fname = &quot;test&quot;;//Excel文件名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream os = response.getOutputStream();//取得输出流<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.reset();//清空输出流<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setHeader(&quot;Content-disposition&quot;, &quot;attachment; filename=&quot; + fname + &quot;.xls&quot;);//设定输出文件头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType(&quot;application/msexcel&quot;);//定义输出类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExcelBean eb = new ExcelBean();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eb.expordExcel(os);//调用生成excel文件bean<br />
&nbsp;&nbsp;&nbsp; }catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; return mapping.findForward(&quot;display&quot;);<br />
&nbsp; }<br />
}<br />
</p>
<hr id="null" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>ExcelBean.java<br />
</p>
<p>&nbsp;</p>
<hr id="null" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>package test.whw.upload;<br />
import java.io.*;<br />
import jxl.*;<br />
import jxl.write.*;<br />
import jxl.format.*;<br />
import java.util.*;<br />
import java.awt.Color;</p>
<p>public class ExcelBean {<br />
&nbsp; public ExcelBean(){}<br />
&nbsp; public String expordExcel(OutputStream os)throws Exception{<br />
&nbsp;&nbsp;&nbsp; jxl.write.WritableWorkbook wbook = Workbook.createWorkbook(os); //建立excel文件<br />
&nbsp;&nbsp;&nbsp; String tmptitle = &quot;测试文件&quot;; //标题<br />
&nbsp;&nbsp;&nbsp; jxl.write.WritableSheet wsheet = wbook.createSheet(&quot;第一页&quot;, 0); //sheet名称<br />
&nbsp;&nbsp;&nbsp; //设置excel标题<br />
&nbsp;&nbsp;&nbsp; jxl.write.WritableFont wfont = new jxl.write.WritableFont(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableFont.ARIAL, 16,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableFont.BOLD, false, jxl.format.UnderlineStyle.NO_UNDERLINE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jxl.format.Colour.BLACK);<br />
&nbsp;&nbsp;&nbsp; jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wfont);<br />
&nbsp;&nbsp;&nbsp; jxl.write.Label wlabel1;<br />
&nbsp;&nbsp;&nbsp; wlabel1 = new jxl.write.Label(5, 0, tmptitle, wcfFC);<br />
&nbsp;&nbsp;&nbsp; wsheet.addCell(wlabel1);<br />
&nbsp;&nbsp;&nbsp; wfont = new jxl.write.WritableFont(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableFont.ARIAL, 14,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableFont.BOLD, false, jxl.format.UnderlineStyle.NO_UNDERLINE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jxl.format.Colour.BLACK);<br />
&nbsp;&nbsp;&nbsp; wcfFC = new jxl.write.WritableCellFormat(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wfont);<br />
&nbsp;&nbsp;&nbsp; jxl.write.Label wlabel;<br />
&nbsp;&nbsp;&nbsp; wlabel = new jxl.write.Label(0, 0, &quot;写入内容&quot;);<br />
&nbsp;&nbsp;&nbsp; wsheet.addCell(wlabel); //<br />
&nbsp;&nbsp;&nbsp; wbook.write(); //写入文件<br />
&nbsp;&nbsp;&nbsp; wbook.close();<br />
&nbsp;&nbsp;&nbsp; os.close();<br />
&nbsp;&nbsp;&nbsp; return &quot;success&quot;;<br />
&nbsp; }<br />
}<br />
<br />
</p>
<hr id="null" />
<p><br />
struts-config.xml<br />
</p>
<hr id="null" />
<p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC &quot;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&quot; &quot;<a href="http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd</a>&quot;&gt;<br />
&lt;struts-config&gt;<br />
&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;action type=&quot;test.whw.upload.DownloadAction&quot; path=&quot;/download&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name=&quot;display&quot; path=&quot;/display.jsp&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp; &lt;/action-mappings&gt;<br />
&lt;/struts-config&gt;<br />
&lt;!--display.jsp是成功的提示页面--&gt;<br />
</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/140508#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 14 Nov 2007 15:09:04 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/140508</link>
        <guid>http://goby2008.javaeye.com/blog/140508</guid>
      </item>
      <item>
        <title>如何过滤掉表单中的 * ^ | 等字符？</title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/139692" style="color:red;">http://goby2008.javaeye.com/blog/139692</a>&nbsp;
          发表时间: 2007年11月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">js 代码</div>
<div class="code_title"></div>
<div class="code_title"></div>
<span><span><span><span><font face="Arial"><!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><font face="Arial">input onkeyup=&quot;this.value=this.value.replace(/[\*\^\|]+/,'');&quot; value=&quot;&quot; size=&quot;20&quot;</font><br />
<meta content="text/html; charset=gb2312" http-equiv="Content-Type" /><br />
<br />
</font></span></span></span></span>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/139692#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 10 Nov 2007 21:34:09 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/139692</link>
        <guid>http://goby2008.javaeye.com/blog/139692</guid>
      </item>
      <item>
        <title>如何获取Web页面中radio按钮的值 </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/139691" style="color:red;">http://goby2008.javaeye.com/blog/139691</a>&nbsp;
          发表时间: 2007年11月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如果在web页面的表单（表单名form1）里用了一组radio按钮，起名为button1。<br />
要从js中取得被选中按钮对应的值，可按以下方法：<br />
<font color="#339966">&lt;script language=javascript&gt;<br />
function getRadioValue()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var str;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;document.form1.button1.length;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (document.form1.button1[i].checked)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str=document.form1.button1[i].value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&lt;/script&gt;</font><br />
这里的radio名button1就相当一个数组名<br />
<br />
<br />
相关的例子:<br />
&lt;input type=&quot;radio&quot; name=&quot;RadioButtn&quot; value=&quot;A&quot; checked&gt;One&lt;br&gt;&lt;input type=&quot;radio&quot; name=&quot;RadioButtn&quot; value=&quot;B&quot;&gt;Two&lt;br&gt;&lt;input type=&quot;radio&quot; name=&quot;RadioButtn&quot; value=&quot;C&quot;&gt;Three&lt;br&gt;&lt;input type=&quot;radio&quot; name=&quot;RadioButtn&quot; value=&quot;D&quot;&gt;Four所有的4个单选按钮对象有同一个名字：RadioButtn，这样一来，<br />
HTML和JavaScript就知道它们是同一个数组里的对象。其次，<br />
每个选项的值是选项的别名，并不是看到的文字（例如&ldquo;One&rdquo;、&ldquo;Two&rdquo;等）。<br />
<p>为了得到选择的选项的值，首先要知道哪个选项被选中了，然后在alert语句中，<br />
用那个选中的选项的下标值来正确地引用当前选项的值。也就是说，<br />
如果第一个选项被选中，你应该取RadioButtn[0].value，如果第二个选项被选中，<br />
你就应该取RadioButtn[1].value，依此类推。 </p>
<p>在JavaScript中，某些类型的域具有selectedIndex属性，<br />
代表当前选中选项的数组下标值。然而单选按钮并不是那么幸运，<br />
同样，复选框也没能逃脱厄运。要想得到当前选中的单选按钮的值，<br />
你必须在RadioButtn数组元素中查找&ldquo;checked&rdquo;属性。<br />
</p>
<p>下面是按钮的代码： </p>
<p><font color="#339966">var doc = document.forms[0];<br />
for(i = 0; i &lt; doc.RadioButtn.length; i++)<br />
{<br />
&nbsp;if(doc.RadioButtn[i].checked)<br />
&nbsp;{<br />
&nbsp;alert(doc.RadioButtn[i].value);<br />
&nbsp;break;<br />
&nbsp;}<br />
}<br />
</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/139691#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 10 Nov 2007 21:32:59 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/139691</link>
        <guid>http://goby2008.javaeye.com/blog/139691</guid>
      </item>
      <item>
        <title>Write operations are not allowed in read-only mode </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/138602" style="color:red;">http://goby2008.javaeye.com/blog/138602</a>&nbsp;
          发表时间: 2007年11月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          错误代码:<br />
&nbsp; org.<span class="me1">springframework</span>.<span class="me1">dao</span>.<span class="me1">InvalidDataAccessApiUsageException</span>: Write operations are not allowed in read-only mode <span class="br0">(</span>FlushMode.<span class="me1">NEVER</span><span class="br0">)</span> - turn your Session into FlushMode.<span class="me1">AUTO</span> or remove <span class="st0">'readOnly'</span> marker from transaction definition <br />
错误原因:<br />
&nbsp; OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。然后把该sessionFactory绑定到TransactionSynchronizationManager，使request的整个过程都使用同一个session，在请求过后再接除该sessionFactory的绑定，最后<span class="me1">closeSessionIfNecessary</span>根据该session是否已和transaction绑定来决定是否关闭session。在这个过程中，若HibernateTemplate 发现自当前session有不是readOnly的transaction，就会获取到FlushMode.AUTO Session，使方法拥有写权限。<br />
也即是，如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有insert,update,delete操作权限，如果没有transaction，并且没有另外人为地设flush model的话，则doFilter的整个过程都是Flush.NEVER。所以受transaction保护的方法有写权限，没受保护的则没有。<br />
参考文章:<br />
&nbsp; <a href="http://calvin.blog.javascud.org/post/46.htm"><font color="#4371a6">http://calvin.blog.javascud.org/post/46.htm</font></a><br />
解决办法:<br />
&nbsp; 采用spring的事务声明,使方法受transaction控制<br />
&lt;bean id=&quot;baseTransaction&quot; <br />
class=&quot;org.springframework.transaction.interceptor.TransactionProxyFactoryBean&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; abstract=&quot;true&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;property name=&quot;transactionManager&quot; ref=&quot;transactionManager&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;property name=&quot;proxyTargetClass&quot; value=&quot;true&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;property name=&quot;transactionAttributes&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;props&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;get*&quot;&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;find*&quot;&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;load*&quot;&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;save*&quot;&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;add*&quot;&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;update*&quot;&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;prop key=&quot;remove*&quot;&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/props&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/property&gt; <br />
&nbsp; &nbsp; &lt;/bean&gt;&nbsp;<span class="sc3"><span class="re1"><br />
</span></span><span class="sc3">&nbsp;&nbsp;&nbsp; &lt;bean id=&quot;userService&quot; parent=&quot;baseTransaction&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;property name=&quot;target&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;bean class=&quot;com.phopesoft.security.service.impl.UserServiceImpl&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/property&gt; <br />
&nbsp; &nbsp; &lt;/bean&gt; </span><br />
<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1485852</p>
          <br/>
          <span style="color:red;">
            <a href="http://goby2008.javaeye.com/blog/138602#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Tue, 06 Nov 2007 18:09:58 +0800</pubDate>
        <link>http://goby2008.javaeye.com/blog/138602</link>
        <guid>http://goby2008.javaeye.com/blog/138602</guid>
      </item>
      <item>
        <title> Java数字、货币值和百分数等的格式化处理 </title>
        <author>goby2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goby2008.javaeye.com">goby2008</a>&nbsp;
          链接：<a href="http://goby2008.javaeye.com/blog/137745" style="color:red;">http://goby2008.javaeye.com/blog/137745</a>&nbsp;
          发表时间: 2007年11月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-FAMILY: 宋体"></span><span style="FONT-FAMILY: 宋体">如果我们用下列语句输出一个数<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体">System.out.println(123456.789);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">将会在<span lang="EN-US">Console</span>看到输出<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体">123456.789<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">那么如何得到<span lang="EN-US">123,456.789</span>这种格式化的输出呢？这里就需要用到<span lang="EN-US">java.text.Format</span>这个类。不仅是数字，它还提供了货币值和百分数的格式化输出，比如<span lang="EN-US">0.58</span>的百分数输出形式是<span lang="EN-US">58%</span>。要获得本地的默认格式，可以用下列方法获得<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体">NumberFormat.getNumberInstance()<o:p></o:p><br />
NumberFormat.getCurrencyInstance()</span><span lang="EN-US" style="FONT-FAMILY: 宋体"><o:p></o:p><br />
NumberFormat.getOPercentInstance()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">而要获得某个国家或地区的具体格式，可以使用参数<span lang="EN-US">Local.XXX,</span>如<span lang="EN-US">Locale.GERMANY</span>，<span lang="EN-US">Locale.UK</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体">NumberFormat formatter = NumberFormat.getNumberInstance(Locale.GERMANY);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体"><o:p>范例</o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体"><o:p>import java.text.NumberFormat;<br />
import java.util.Locale;<br />
<br />
public class FormatTest {<br />
<br />
&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 不使用格式化输出数<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;double d = 10000.0 / 3.0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;System.out.println(&quot;无格式化输出：&quot; + d);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 使用本地默认格式输出数<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;NumberFormat numberFormat = NumberFormat.getNumberInstance();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//numberFormat.setMaximumFractionDigits(4);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//numberFormat.setMinimumIntegerDigits(6);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;String numberString = numberFormat.format(d);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;System.out.println(&quot;本地默认格式输出数：&quot; + numberString);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 使用本地默认格式输出货币值<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;System.out.println(&quot;本地默认格式输出货币值：&quot; + currencyFormat.format(d));<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 使用本地默认格式输出百分数<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;NumberFormat percentFormat = NumberFormat.getPercentInstance();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;System.out.println(&quot;本地默认格式输出百分数：&quot; + percentFormat.format(d));<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 在不同的国家和地区数字表示的格式也有区别。如德国<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 使用德国的格式化输出数<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;NumberFormat numberFormatG = NumberFormat<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;.getNumberInstance(L