<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>mihuxiaozhu</title>
    <description></description>
    <link>http://mihuxiaozhu.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>SQL优化策略</title>
        <author>mihuxiaozhu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mihuxiaozhu.javaeye.com">mihuxiaozhu</a>&nbsp;
          链接：<a href="http://mihuxiaozhu.javaeye.com/blog/210401" style="color:red;">http://mihuxiaozhu.javaeye.com/blog/210401</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、尽量少用IN操作符，基本上所有的IN操作符都可以用EXISTS代替。 <br />2、不用NOT IN操作符，可以用NOT EXISTS或者外连接+（外连接+判断为空）替代。 3、不用“&lt;>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描，可以用“&lt;” or “>”代替。例如：a&lt;>0 改为 a>0 or a&lt;0，a&lt;>’ ’ 改为 a>’ ’<br />4、Where子句中出现IS NULL或者IS NOT NULL时，Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时，对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作。 <br />5、当通配符“%”或者“_”作为查询字符串的第一个字符时，索引不会被使用，因此一般不要作为第一个字符出现。 <br />6、对于有连接的列“||”，最后一个连接列索引会无效。尽量避免连接，可以分开连接或者使用不作用在列上的函数替代。<br /> 7、如果索引不是基于函数的，那么当在Where子句中对索引列使用函数时，索引不再起作用。 <br />8、Where子句中避免在索引列上使用计算，否则将导致索引失效而进行全表扫描。<br /> 9、对数据类型不同的列进行比较时，会使索引失效。 <br />10、用“>=”替代“>”。 <br />11、UNION操作符会对结果进行筛选，消除重复，数据量大的情况下可能会引起磁盘排序。如果不需要删除重复记录，应该使用UNION ALL。 <br />12、Oracle从下到上处理Where子句中多个查询条件，所以表连接语句应写在其他Where条件前，可以过滤掉最大数量记录的条件必须写在Where子句的末尾。 <br />13、Oracle从右到左处理From子句中的表名，所以在From子句中包含多个表的情况下，将记录最少的表放在最后。<br />14、Order By语句中的非索引列会降低性能，可以通过添加索引的方式处理。严格控制在Order By语句中使用表达式。<br /> 15、不同区域出现的相同的Sql语句，要保证查询字符完全相同，以利用SGA共享池，防止相同的Sql语句被多次分析。 <br />16、多利用内部函数提高Sql效率。 <br />17、当在Sql语句中连接多个表时，使用表的别名，并将之作为每列的前缀。这样可以减少解析时间。 <br />18、根据SQL不同设定优化模式的方式，选择不同的优化策略，通过SELECT /*+ALL+_ROWS*/ ……;来设定。可用的HINT包括/*+ALL_ROWS*/、/*+FIRST_ROWS*/、/*+CHOOSE*/、/*+RULE*/ 等一般在SQL前加first_rows策略，速度都会提高，特殊情况下改用choose策略。（本策略架构包已经支持）<br />19、对于大表查询中的列应尽量避免进行诸如Ｔｏ＿ｃｈａｒ，ｔｏ＿ｄａｔｅ，ｔｏ＿ｎｕｍｂｅｒ等转换<br />20、有索引的尽量用索引，有用到索引的条件写在前面<br />21、如有可能和有必要就建立一些索引<br />22、尽量避免进行全表扫描，限制条件尽可能多，以便更快搜索到要查询的数据
          <br/>
          <span style="color:red;">
            <a href="http://mihuxiaozhu.javaeye.com/blog/210401#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 10:03:09 +0800</pubDate>
        <link>http://mihuxiaozhu.javaeye.com/blog/210401</link>
        <guid>http://mihuxiaozhu.javaeye.com/blog/210401</guid>
      </item>
      <item>
        <title>备份用....</title>
        <author>mihuxiaozhu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mihuxiaozhu.javaeye.com">mihuxiaozhu</a>&nbsp;
          链接：<a href="http://mihuxiaozhu.javaeye.com/blog/167054" style="color:red;">http://mihuxiaozhu.javaeye.com/blog/167054</a>&nbsp;
          发表时间: 2008年03月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException<br />  {<br />    response.setContentType("text/html;charset=gb2312");<br />    PrintWriter out = response.getWriter();<br />    String titleid="1";//标题id<br />    String fileName=new String();//上传的文件名称<br />    dbConn db=new dbConn();<br />    try<br />    {<br />      System.out.println("开始上传附件");<br />      SmartUpload mySmartUpload = new SmartUpload();<br /><br />      ResultSet rs=null;<br />      mySmartUpload.initialize(config, request, response);<br />      mySmartUpload.setMaxFileSize(1024 * 1024 * 10);//上传文件最大尺寸<br />      mySmartUpload.upload();//上传<br />      Enumeration enumer=mySmartUpload.getRequest().getParameterNames();<br />      String strsql=new String();//sql语句<br />      for (int i=0;i&lt;mySmartUpload.getFiles().getCount();i++)//循环上传附件<br />      {<br />        com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);//取得文件<br />        fileName=myFile.getFileName();//取得文件名<br />        //String filetype=mySmartUpload.getFiles().getFile(i).getFileExt();//获取后缀名<br />        if(!myFile.isMissing())<br />        {<br />          myFile.saveAs("uploadfile/"+fileName);//保存上传的文件到服务器的uploadfile目录下<br />          System.out.println("文件名："+fileName);//后台显示文件名<br />         // java.io.File sfile=new java.io.File(request.getRealPath("")+"\\uploadfile\\"+fileName);//创建文件对象<br />         // java.io.InputStream inStream=new java.io.FileInputStream(sfile);//将文件读到流中<br />          int fileSize=myFile.getSize();//获取文件大小（字节）<br />          if(fileSize>mySmartUpload.getSize())<br />          {<br />            System.out.println("上传文件过大！");<br />            int err=1/0;<br />          }<br />          System.out.println("文件大小："+(int)(fileSize/1024)+"KB");//后台显示文件大小<br />          if(fileSize!=0)<br />          {<br />            String contenttype = myFile.getContentType();//获得文件类型<br />            System.out.println("文件类型："+contenttype);//后台显示文件类型<br />            String blobzd=new String();//blob字段名<br />            if(!contenttype.trim().equals("image/pjpeg") && !contenttype.trim().equals("image/gif"))<br />            {<br />              System.out.println("上传的文件不是规定格式的图片！");<br />              throw new Exception("上传的文件不是规定格式的图片");<br />            }<br />            String sql="insert into tblpicture values(?,?,?,?)";<br />            String sFilePath="\\bea\\wlserver6.1\\config\\mydomain\\applications\\DefaultWebApp\\uploadfile\\"+fileName;<br />            db.WriteFile(1,sFilePath,contenttype,sql);<br /><br />          /* 　　<br />           strsql="insert into tblpicture(id,titleid,num,picture,img,thumbnail) values(pictureid.nextval,"+titleid+","+fileSize+",'"+contenttype.trim()+"',empty_blob(),empty_blob())";//插入一条空图片数据进图片表<br />            System.out.println(strsql);<br />            db.executeUpdate(strsql);<br />            System.out.println("-------生成缩略图---------------");<br />            //------------生成缩略图------------------//<br />            BufferedImage image;<br />            Image img=null;<br />            Toolkit tk=Toolkit.getDefaultToolkit();<br />            Applet app=new Applet();<br />            MediaTracker mt = new MediaTracker(app);<br />            img=tk.getImage(request.getRealPath("")+"\\uploadfile\\"+fileName);//获取原始图<br />            mt.addImage(img, 0);<br />            mt.waitForID(0);<br />            double rate1=((double)img.getWidth(null))/120.0+0.1;<br />            double rate2=((double)img.getHeight(null))/120.0+0.1;<br />            double rate=rate1>rate2?rate1:rate2;<br />            int new_w=(int)(((double)img.getWidth(null))/rate);<br />            int new_h=(int)(((double)img.getHeight(null))/rate);<br />            BufferedImage buffImg = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />            Graphics g = buffImg.createGraphics();<br />            g.setColor(Color.white);<br />            g.fillRect(0,0,new_w,new_h);<br />            g.drawImage(img,0,0,new_w,new_h,null);//绘制缩略图<br />            System.out.println("-------绘制缩略图---------------");<br />            g.dispose();<br />            java.io.OutputStream tempout=null;<br />            java.io.File tempfile=new java.io.File(request.getRealPath("")+"\\uploadfile\\"+fileName+"_small.jpg");<br />            tempout= new FileOutputStream(tempfile);<br />            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);<br />            encoder.encode(buffImg);<br />            if(tempout!=null)tempout.close();<br />            //------------缩略图生成完毕----------------//<br />            //------------缩略图入库-------------------//<br />            System.out.println("--------缩略图生成完毕-------");<br />            java.io.InputStream tempinstream=new java.io.FileInputStream(tempfile);//将缩略图文件读到流中<br />            System.out.println("--------将缩略图文件读到流中-------");<br />            strsql="select thumbnail from tblpicture where titleid="+titleid+" and dbms_lob.getlength(thumbnail)=0 for update ";//选择图片表的缩略图字段更新<br />            rs=db.executeQuery3(strsql);<br />             System.out.println("------写缩略图数据进blob类型字段-----");<br />            if (rs !=null &&	rs.next())//写缩略图数据进blob类型字段<br />            {<br />              System.out.println("缩略图入库！!!!!!");<br />              oracle.sql.BLOB tempblob=((oracle.jdbc.OracleResultSet)rs).getBLOB("thumbnail");<br />              System.out.println("aaaaaaaaaaaaaaaaaa！");<br />              tempout = tempblob.getBinaryOutputStream();<br />              byte[] tempbytes = new byte[(int) tempfile.length()];//创建缓冲区<br />              tempinstream.read(tempbytes);<br />              tempout.write(tempbytes);<br />              tempout.flush();<br />              db.commit();<br />              if(tempout!=null)tempout.close();<br />            }<br />            if(tempinstream!=null)tempinstream.close();<br />            if(tempfile!=null){if(tempfile.delete())System.out.println("缩略图入库完毕！临时文件已删除！");}//删除缩略图临时文件<br />            //---------------缩略图入库完毕-------------//<br />            strsql="select img from tblpicture where titleid="+titleid+" and dbms_lob.getlength(img)=0 for update ";//选择图片表的图片字段更新<br />            rs=db.executeQuery3(strsql);<br />            if (rs !=null &&	rs.next())//写数据进blob类型字段<br />            {<br />              oracle.sql.BLOB blob=((oracle.jdbc.OracleResultSet)rs).getBLOB(blobzd);<br />              java.io.OutputStream outStream = blob.getBinaryOutputStream();<br />              byte[] bytes = new byte[fileSize];//创建缓冲区<br />              inStream.read(bytes);<br />              outStream.write(bytes);<br />              outStream.flush();<br />              db.commit();<br />              if(outStream!=null)outStream.close();<br />            }<br />            */<br />          }<br />         // if(inStream!=null)inStream.close();<br />          //if(sfile!=null){if(sfile.delete())System.out.println("临时文件已删除");}//删除临时文件<br />        }<br />      }<br /><br />      System.out.println("文件上传完毕");<br />    }<br />    catch(Exception ex1)<br />    {<br />      System.out.println(ex1.toString());<br />    }
          <br/>
          <span style="color:red;">
            <a href="http://mihuxiaozhu.javaeye.com/blog/167054#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 03 Mar 2008 18:59:05 +0800</pubDate>
        <link>http://mihuxiaozhu.javaeye.com/blog/167054</link>
        <guid>http://mihuxiaozhu.javaeye.com/blog/167054</guid>
      </item>
      <item>
        <title>oracle时间操作</title>
        <author>mihuxiaozhu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mihuxiaozhu.javaeye.com">mihuxiaozhu</a>&nbsp;
          链接：<a href="http://mihuxiaozhu.javaeye.com/blog/158354" style="color:red;">http://mihuxiaozhu.javaeye.com/blog/158354</a>&nbsp;
          发表时间: 2008年01月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          .日期时间间隔操作 <br />　　当前时间减去7分钟的时间 <br />　　select sysdate,sysdate - interval ’7’ MINUTE from dual <br />　　当前时间减去7小时的时间 <br />　　select sysdate - interval ’7’ hour from dual <br />　　当前时间减去7天的时间 <br />　　select sysdate - interval ’7’ day from dual <br />　　当前时间减去7月的时间 <br />　　select sysdate,sysdate - interval ’7’ month from dual <br />　　当前时间减去7年的时间 <br />　　select sysdate,sysdate - interval ’7’ year from dual <br />　　时间间隔乘以一个数字 <br />　　select sysdate,sysdate - 8 *interval ’2’ hour from dual <br />2.日期到字符操作 <br />　　select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual <br />　　select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual <br />　　select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual <br />　　select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual <br />　　参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515) <br />3. 字符到日期操作 <br />　　select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual <br />　　具体用法和上面的to_char差不多。 <br />4. trunk/ ROUND函数的使用 <br />　　select trunc(sysdate ,’YEAR’) from dual <br />　　select trunc(sysdate ) from dual <br />　　select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from dual <br />5.oracle有毫秒级的数据类型 <br />　　--返回当前时间 年月日小时分秒毫秒 <br />　　select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual; <br />　　--返回当前 时间的秒毫秒，可以指定秒后面的精度(最大=9) <br />　　select to_char(current_timestamp(9),’MI:SSxFF’) from dual; <br />6.计算程序运行的时间(ms) <br />　　declare <br />　　type rc is ref cursor; <br />　　l_rc rc; <br />　　l_dummy all_objects.object_name%type; <br />　　l_start number default dbms_utility.get_time; <br />　　begin <br />　　for I in 1 .. 1000 <br />　　loop <br />　　open l_rc for <br />　　’select object_name from all_objects ’|| <br />　　’where object_id = ’ || i; <br />　　fetch l_rc into l_dummy; <br />　　close l_rc; <br />　　end loop; <br />　　dbms_output.put_line <br />　　( round( (dbms_utility.get_time-l_start)/100, 2 ) || <br />　　’ seconds...’ ); <br />　　end;
          <br/>
          <span style="color:red;">
            <a href="http://mihuxiaozhu.javaeye.com/blog/158354#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 22 Jan 2008 16:34:19 +0800</pubDate>
        <link>http://mihuxiaozhu.javaeye.com/blog/158354</link>
        <guid>http://mihuxiaozhu.javaeye.com/blog/158354</guid>
      </item>
      <item>
        <title>Java 文件操作！</title>
        <author>mihuxiaozhu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mihuxiaozhu.javaeye.com">mihuxiaozhu</a>&nbsp;
          链接：<a href="http://mihuxiaozhu.javaeye.com/blog/158309" style="color:red;">http://mihuxiaozhu.javaeye.com/blog/158309</a>&nbsp;
          发表时间: 2008年01月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          public class FileOperate {<br /><br />/**<br />* 创建目录<br />* @param folderPath:目录路径<br />* @return<br />* @throws IOException<br />*/<br />public static boolean createFolder(String folderPath) throws IOException{<br />boolean result = false;<br />File f = new File(folderPath);<br />result = f.mkdirs();<br />return result;<br />}<br />/**<br />* 删除目录下所有文件<br />* @param directory (File 对象)<br />*/<br />public void emptyDirectory(File directory) {<br />File[] entries = directory.listFiles();<br />for (int i = 0; i &lt; entries.length; i++) {<br />entries[i].delete();<br />}<br />}<br /><br />* 创建文件<br />* @param filepath:文件所在目录路径,比如:c:/test/test.txt<br />* @return<br />*/<br />public static boolean makeFile(String filepath) throws IOException{<br />boolean result = false;<br />File file = new File(filepath);<br />result = file.createNewFile();<br />file = null;<br />return result;<br />}<br />/**<br />* 删除文件<br />* @param filepath:文件所在物理路径<br />* @return<br />*/<br />public static boolean isDel(String filepath){<br />boolean result = false;<br />File file = new File(filepath);<br />result = file.delete();<br />file = null;<br />return result;<br />}<br />/**<br />* 文件重命名<br />* @param filepath:文件所在物理路径<br />* @param destname:新文件名<br />* @return<br />*/<br />public static boolean renamefile(String filepath,String destname){<br />boolean result = false;<br />File f = new File(filepath);<br />String fileParent = f.getParent();<br />String filename = f.getName();<br />File rf = new File(fileParent+"//"+destname);<br />if(f.renameTo(rf)){<br />result = true;<br />}<br />f = null;<br />rf = null;<br />return result;<br />}<br />/**<br />* 将文件内容写入数据库中<br />* @param filepath:文件所在物理路径<br />* @param content:写入内容<br />* @throws Exception<br />*/<br />public static void WriteFile(String filepath,String content) throws Exception {<br />FileWriter filewriter = new FileWriter(filepath,true);//写入多行<br />PrintWriter printwriter = new PrintWriter(filewriter);<br />printwriter.println(content);<br />printwriter.flush();<br />printwriter.close();<br />filewriter.close();<br />}<br />/**<br />* 日志备份<br />* @param filePath:日志备份路径<br />* @param baksize:日志备份大小参考值(字节大小)<br />* @throws IOException<br />*/<br />public static void logBak(String filePath,long baksize) throws IOException{<br />File f = new File(filePath);<br />long len = f.length();<br />SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyyMMddHHmmss");<br />String s = simpledateformat.format(new Date());<br />String fileName = f.getName();<br />int dot = fileName.indexOf(".");<br />String bakName = s+fileName.substring(dot);<br />System.out.println(bakName);<br />if(len>=baksize){<br />renamefile(filePath,bakName);<br />makeFile(filePath);<br />}<br />f = null;<br />}<br /><br />}
          <br/>
          <span style="color:red;">
            <a href="http://mihuxiaozhu.javaeye.com/blog/158309#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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, 22 Jan 2008 14:13:10 +0800</pubDate>
        <link>http://mihuxiaozhu.javaeye.com/blog/158309</link>
        <guid>http://mihuxiaozhu.javaeye.com/blog/158309</guid>
      </item>
      <item>
        <title>转帖！！log4j 配置</title>
        <author>mihuxiaozhu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mihuxiaozhu.javaeye.com">mihuxiaozhu</a>&nbsp;
          链接：<a href="http://mihuxiaozhu.javaeye.com/blog/148082" style="color:red;">http://mihuxiaozhu.javaeye.com/blog/148082</a>&nbsp;
          发表时间: 2007年12月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一,Log4J配置文件学习:  <br />Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值). <br />下面我们首先介绍使用Java特性文件做为配置文件的方法:  <br />分析一个配置文件log4j.properties  <br />log4j.rootCategory=debug, stdout, R  <br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender  <br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  <br /># Pattern to output the caller's file name and line number.  <br />log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n  <br />log4j.appender.R=org.apache.log4j.RollingFileAppender  <br />log4j.appender.R.File=example.log  <br />log4j.appender.R.MaxFileSize=100KB  <br /># Keep one backup file  <br />log4j.appender.R.MaxBackupIndex=1  <br />log4j.appender.R.layout=org.apache.log4j.PatternLayout  <br />log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n  <br />说明:  <br />①log4j.rootCategory = [ level ] , appenderName, appenderName,  <br />其中,level 是日志记录的优先级,分为OFF,FATAL,ERROR,WA R N,INFO,DEBUG, <br />ALL或者您定义的级别.Log4j建议只使用四个级别,优先级从高到低分别是ERROR, <br />WA R N,INFO,DEBUG.通过在这里定义的级别,您可以控制到应用程序中相应级别的日 <br />志信息的开关.比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息 <br />将不被打印出来.appenderName就是指定日志信息输出到哪个地方.您可以同时指定多个 <br />输出目的地.  <br />②配置日志信息输出目的地Appender,其语法为  <br />log4j.appender.appenderName = fully.qualified.name.of.appender.class  <br />log4j.appender.appenderName.option1 = value1  <br /><br />log4j.appender.appenderName.option = valueN  <br />其中,Log4j提供的appender有以下几种:  <br />org.apache.log4j.ConsoleAppender(控制台),  <br />org.apache.log4j.FileAppender(文件),  <br />org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), <br />org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  <br />org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)  <br />③配置日志信息的格式(布局),其语法为:  <br />log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  <br />log4j.appender.appenderName.layout.option1 = value1  <br /><br />log4j.appender.appenderName.layout.option = valueN  <br />其中,Log4j提供的layout有以下几种:  <br />org.apache.log4j.HTMLLayout(以HTML表格形式布局),  <br />org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  <br />org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  <br />org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等等信息)  <br />④Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:  <br />%m 输出代码中指定的消息  <br />%p 输出优先级,即DEBUG,INFO,WA R N,ERROR,FATAL  <br />%r 输出自应用启动到输出该log信息耗费的毫秒数  <br />%c 输出所属的类目,通常就是所在类的全名  <br />%t 输出产生该日志事件的线程名  <br />%n 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"  <br />%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,  <br />比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  <br />%l 输出日志事件的发生位置,包括类目名,发生的线程,以及在代码中的行数.  <br />对上面log4j.properties配置文件的一个应用;  <br /> <br /><br /> package log4j;  <br />import org.apache.log4j.*;  <br />// How to use log4j  <br />public class TestLogging {  <br />// Initialize a logging category. Here, we get THE ROOT CATEGORY  <br />//static Category cat = Category.getRoot();  <br />// Or, get a custom category  <br />static Category cat = Category.getInstance(TestLogging.class.getName());  <br />// From here on, log away! Methods are: cat.debug(your_message_string),  <br />// cat.info(...), cat.warn(...), cat.error(...), cat.fatal(...)  <br />public static void main(String args[]) {  <br />// Try a few logging methods  <br />PropertyConfigurator.configure ( "log4j.properties" ) ;  <br />cat.debug("Start of main()");  <br />cat.info("Just testing a log message with priority set to INFO");  <br />cat.warn("Just testing a log message with priority set to WARN");  <br />cat.error("Just testing a log message with priority set to ERROR");  <br />cat.fatal("Just testing a log message with priority set to FATAL");  <br />// Alternate but INCONVENIENT form  <br />cat.log(Priority.DEBUG, "Calling init()");  <br />new TestLogging().init();  <br />}  <br />public void init() {  <br />java.util.Properties prop = System.getProperties();  <br />java.util.Enumeration enum = prop.propertyNames();  <br />cat.info("***System Environment As Seen By Java***");  <br />cat.debug("***Format: PROPERTY = VALUE***");  <br />while (enum.hasMoreElements()) {  <br />String key = (String) enum.nextElement();  <br />cat.info(key + " = " + System.getProperty(key));  <br />}  <br />}  <br />}  <br />xml格式的log4j配置文件概述  <br />xml格式的log4j配置文件需要使用org.apache.log4j.html.DOMConfigurator.configure()方法来 <br />读入.对xml文件的语法定义可以在log4j的发布包中找到:org/apache/log4j/xml/log4j.dtd.  <br />Xml的一个配置文件:sample1.xml  <br />说明:  <br />①xml配置文件的头部包括两个部分:xml声明和dtd声明.头部的格式如下:  <br /><br /><br />②log4j:configuration (root element)  <br />xmlns:log4j [#FIXED attribute]: 定义log4j的名字空间,取定值"http://jakarta.apache.org/log4j/"  <br />appender [* child] : 一个appender子元素定义一个日志输出目的地  <br />logger [* child] : 一个logger子元素定义一个日志写出器  <br />root [ child] : root子元素定义了root logger  <br />源代码:  <br />package exampleslog4j.xml;  <br />import org.apache.log4j.xml.DOMConfigurator;  <br />import org.apache.log4j.Category;  <br />import java.net.*;  <br />public class XMLSample {  <br />static Category cat = Category.getInstance(XMLSample.class.getName());  <br />public  <br />static  <br />void main(String argv[]) {  <br />if(argv.length == 1)  <br />init(argv[0]);  <br />else  <br />Usage("Wrong number of arguments.");  <br />sample();  <br />}  <br />static  <br />void Usage(String msg) {  <br />System.err.println(msg);  <br />System.err.println( "Usage: java " + XMLSample.class.getName() +  <br />"configFile");  <br />System.exit(1);  <br />}  <br />static  <br />void init(String configFile) {  <br />DOMConfigurator.configure(configFile);  <br />}  <br />static  <br />void sample() {  <br />int i = -1;  <br />Category root = Category.getRoot();  <br />cat.debug("Message " + ++i);  <br />cat.warn ("Message " + ++i);  <br />cat.error("Message " + ++i);  <br />Exception e = new Exception("Just testing");  <br />cat.debug("Message " + ++i, e);  <br />}  <br />}  <br />执行后的效果:  <br />2004-05-24 22:07:28,352 DEBUG [main] xml.XMLSample (XMLSample.java:55) - Message 0  <br />2004-05-24 22:07:28,352 WARN [main] xml.XMLSample (XMLSample.java:56) - Message 1  <br /><br /><br />二,Log4J对数据库的操作:  <br /><br />其目的就是把日志信息写入数据库以方便开发人员和测试人员查询.  <br />下面是写入数据库的配置文件:log4j.properties  <br />log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender  <br />log4j.appender.DATABASE.URL=jdbc:oracle:thin:@192.168.0.1:1521:siemen  <br />log4j.appender.DATABASE.driver= oracle.jdbc.driver.OracleDriver  <br />log4j.appender.DATABASE.user=system  <br />log4j.appender.DATABASE.password=css12345  <br />log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d  <br />- %c -%-4r [%t] %-5p %c %x - %m%n')  <br />log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout  <br />log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t]  <br />%-5p %c %x - %m%n  <br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender  <br />log4j.appender.A1.File=SampleMessages.log4j  <br />log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'  <br />log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout  <br />对其应用的源文件:  <br />package database.servlet;  <br />import java.io.File;  <br />import java.io.LineNumberReader;  <br />import java.io.FileReader;  <br />import java.io.FileNotFoundException;  <br />import java.io.IOException;  <br />import java.util.Vector;  <br />import java.sql.Driver;  <br />import java.sql.DriverManager;  <br />// import servlet packages  <br />import javax.servlet.http.HttpServlet;  <br />import javax.servlet.ServletConfig;  <br />import javax.servlet.ServletException;  <br />// import log4j packages  <br />import org.apache.log4j.Logger;  <br />import org.apache.log4j.PropertyConfigurator;  <br />public class SetupServlet extends HttpServlet{  <br />public void init(ServletConfig config) throws ServletException{  <br />super.init(config);  <br />// first thing to do, is to set up the Driver that we might be using  <br />// in case of JDBCAppender  <br />try{  <br />//Driver d =(Driver)(Class.forName("org.gjt.mm.mysql.Driver").newInstance());  <br />Driver d = (Driver)(Class.forName("oracle.jdbc.driver.OracleDriver").newInstance());  <br />DriverManager.registerDriver(d);  <br />//加载JDBC驱动程序,当准备将日志记录到数据库的时候可以使用  <br />}catch(Exception e){ System.err.println(e); }  <br />// next load up the properties  <br />//启动时从web.xml中获得配置文件的信息  <br />String props = config.getInitParameter("props");  <br />if(props == null || props.length() == 0 ||  <br />!(new File(props)).isFile()){  <br />System.err.println(  <br />"ERROR: Cannot read the configuration file. " +  <br />"Please check the path of the config init param in web.xml");  <br />throw new ServletException();  <br />}  <br />}  <br />public void destroy(){  <br />super.destroy();  <br />}  <br />}  <br />三,Log4J的封装:  <br /><br />配置文件:log4j.properties  <br />log4j.rootLogger=DEBUG, A2, A1  <br />log4j.appender.A2=org.apache.log4j.RollingFileAppender  <br />log4j.appender.A2.File=C:\develop\log\error.log  <br />log4j.appender.A2.Append=true  <br />log4j.appender.R.MaxFileSize=10000KB  <br />log4j.appender.A2.layout=org.apache.log4j.PatternLayout  <br /><br /> <br />4 关于log4j的例子  <br /> log4j.appender.A2.layout.ConversionPattern=[%-5p][%t] %d{yyyy-MM-dd  <br />HH:mm:ss,SSS} message:%m%n  <br />log4j.appender.A1=org.apache.log4j.ConsoleAppender  <br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout  <br />#Pattern to output the caller's file name and line number.  <br />#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n  <br /># Print the date in ISO 8601 format  <br />log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p - %m%n  <br />EncapsulationLog4J.java //Log4j的实现类  <br />package com.cn.lx;  <br />/**  <br />*  <br />Title:  <br />*  <br />Description:  <br />*  <br />Copyright: Copyright © 2004 lixiang  <br />*  <br />Company:http://www.css.com.cn/  <br />* @author lixiang  <br />* @version 1.0  <br />*/  <br />import org.apache.log4j.*;  <br />import java.io.*;  <br />import java.util.*;  <br />/**  <br />* @author Administrator  <br />*  <br />* To change the template for this generated type comment go to  <br />* Window>Preferences>Java>Code Generation>Code and Comments  <br />*/  <br />public class EncapsulationLog4J  <br />{  <br />public static final String PROFILE = "log4j.properties";  <br />/**  <br />* Holds singleton instance  <br />*/  <br />private static EncapsulationLog4J impl;  <br />static  <br />{  <br />impl = new EncapsulationLog4J();  <br />}  <br />private Logger log4j;  <br />/**  <br />* prevents instantiation  <br />*/  <br />private EncapsulationLog4J()  <br />{  <br />log4j = LogManager.getLogger(EncapsulationLog4J.class);  <br />try  <br />{  <br />Properties pro = new Properties();  <br />InputStream is = getClass().getResourceAsStream(PROFILE);  <br />pro.load(is);  <br />PropertyConfigurator.configure(pro);  <br />}  <br />catch(IOException e)  <br />{  <br />BasicConfigurator.configure();  <br />e.printStackTrace();  <br />}  <br />}  <br />public void log(String level,Object msg)  <br />{  <br />log(level,msg,null);  <br />}  <br />public void log(String level,Throwable e)  <br />{  <br />log(level,null,e);  <br />}  <br />public void log(String level,Object msg,java.lang.Throwable e)  <br />{  <br />if(log4j != null)  <br />{  <br />log4j.log((Priority)Level.toLevel(level),msg,e);  <br />}  <br />}  <br />/**  <br />* Singleton Pattern  <br />*/  <br />static public EncapsulationLog4J getInstance()  <br />{  <br />return impl;  <br />}  <br />}  <br /> <br />http://dodomail.javaeye.com/blog/117603
          <br/>
          <span style="color:red;">
            <a href="http://mihuxiaozhu.javaeye.com/blog/148082#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 13 Dec 2007 14:44:16 +0800</pubDate>
        <link>http://mihuxiaozhu.javaeye.com/blog/148082</link>
        <guid>http://mihuxiaozhu.javaeye.com/blog/148082</guid>
      </item>
      <item>
        <title>Java学习之路</title>
        <author>mihuxiaozhu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mihuxiaozhu.javaeye.com">mihuxiaozhu</a>&nbsp;
          链接：<a href="http://mihuxiaozhu.javaeye.com/blog/144407" style="color:red;">http://mihuxiaozhu.javaeye.com/blog/144407</a>&nbsp;
          发表时间: 2007年11月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.java语法,j2se基础,基本的类库 <br />2.学习jsp+javabean. <br />3.学习servlet. <br />4.运用jsp+servlet+javabean开发一两个项目 <br />5.学习设计模式(不用太深入,在以后开发过程中逐步体会精髓) <br />6.学习一种MVC框架,比如(struts1.0,struts2.0,springMVC,JSF等等) <br />7.学习一种持久层框架,比如hibernate,ibatis等等 <br />8.学习业务层模式 Ioc依赖注射模式及其应用案例,比如springIOC <br />9.学习AOP思想比如SpringAOP或者AspectJ <br />10.学习大型企业应用集群,分布式计算,缓存应用,分布式事务处理,并发处理,单例和多例POOL性能解决方案
          <br/>
          <span style="color:red;">
            <a href="http://mihuxiaozhu.javaeye.com/blog/144407#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Wed, 28 Nov 2007 09:56:45 +0800</pubDate>
        <link>http://mihuxiaozhu.javaeye.com/blog/144407</link>
        <guid>http://mihuxiaozhu.javaeye.com/blog/144407</guid>
      </item>
  </channel>
</rss>