﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-超越次元的追求-随笔分类-其他技术</title><link>http://www.blogjava.net/wolfsquare/category/5639.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 07:44:22 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 07:44:22 GMT</pubDate><ttl>60</ttl><item><title>小经验两则</title><link>http://www.blogjava.net/wolfsquare/archive/2006/08/03/61459.html</link><dc:creator>wolfsquare</dc:creator><author>wolfsquare</author><pubDate>Thu, 03 Aug 2006 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/wolfsquare/archive/2006/08/03/61459.html</guid><wfw:comment>http://www.blogjava.net/wolfsquare/comments/61459.html</wfw:comment><comments>http://www.blogjava.net/wolfsquare/archive/2006/08/03/61459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wolfsquare/comments/commentRss/61459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wolfsquare/services/trackbacks/61459.html</trackback:ping><description><![CDATA[1.Oracle 8i 下使用最新的oracle thin driver时用DatabaseMetaData获取主键等信息时,需要将<br />connection.getMetaData().getPrimaryKeys(connection.getCatalog(),null,tableName);<br />中的tableName转为大写,否则无法得到数据。<br /><br />2.正则表达式中,需要以","分割字符串,但是要分割的字串中含有","号,为了避免冲突,引入前置转义字符"\",这样的正则怎么写呢?<br />例如:<br />String txt = "STATE_COUNTY=kj\\\\,,ADDR_LINE1=l=j,ADDR_LINE2=mj\n\n,ADDR_LINE3=n\\,o,\n\nADDR_LINE4=\np";<br />需要把键值对切分出来:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> Pattern.compile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^\\\\],)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>这个是不行的,会将","号前一个字符消耗掉。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> Pattern.compile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">(?![\\\\]),)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>也不行<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Pattern p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Pattern.compile,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,(?![\\\\])</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>倒是可以,但是把转义字符放后面似乎有点诡异。<br />找了一个折衷办法,不切割使用正则获取"键=值"子串:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Pattern p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Pattern.compile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\w+\\s*=.*?[,]*.*?(?=,|$)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Pattern.DOTALL);</span></div>但是还是带来了子串中不能含有"="的问题。<br />最后查了一个JDK1.4 DOC,发现了一个反向的非匹配串写法:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Pattern p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Pattern.compile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">(?&lt;!\\\\),\\s*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>这样一来就解决了以上问题。<img src ="http://www.blogjava.net/wolfsquare/aggbug/61459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wolfsquare/" target="_blank">wolfsquare</a> 2006-08-03 09:54 <a href="http://www.blogjava.net/wolfsquare/archive/2006/08/03/61459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j配置简要说明</title><link>http://www.blogjava.net/wolfsquare/archive/2006/04/20/42242.html</link><dc:creator>wolfsquare</dc:creator><author>wolfsquare</author><pubDate>Thu, 20 Apr 2006 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/wolfsquare/archive/2006/04/20/42242.html</guid><wfw:comment>http://www.blogjava.net/wolfsquare/comments/42242.html</wfw:comment><comments>http://www.blogjava.net/wolfsquare/archive/2006/04/20/42242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wolfsquare/comments/commentRss/42242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wolfsquare/services/trackbacks/42242.html</trackback:ping><description><![CDATA[虽然以前一直在用log4j,但是对其配置不甚了了，突然间因为需解决某些问题，要理解log4j的配置，<br />然而用google搜了一下，却发现网上没有一个简单直观的说明，于是只好看log4j的官方介绍,终于<br />理解了log4j的配置用法，以下是我对log4j配置的一点认识，如有谬误还请不吝赐教.
<p>首先我们搞清楚log4j能干什么，简单来说就是提供一个记录不同级别信息内容的日志工具，<br />可以把不同级别，不同包路径的信息，以指定格式输出到多种设备（控制台，文件等）<br />在程序中，可以以以下方式来使用<br />   Log log = org.apache.commons.logging.LogFactory.LogFactory.getLog(yourClassName.class);<br />  log.debug("debug message -------------------");<br />  log.info("info message ******************");<br />  log.warn("warn message +++++++++++++++");<br />  log.error("error msg================="); <br />  <br />本文主要讲的是如何配置log4j，先让我们先看看一个典型的log4j配置：   </p><p>==========log4j.properties==================</p><p>log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n</p><p>log4j.appender.fileout=org.apache.log4j.RollingFileAppender<br />log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log<br />log4j.appender.fileout.MaxFileSize=10000KB<br />log4j.appender.fileout.MaxBackupIndex=10<br />log4j.appender.fileout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n</p><p>log4j.rootCategory=INFO, stdout, fileout<br />log4j.logger.com.wolfsquare.log2=DEBUG,stdout<br />===================================</p><p>这个文件可以划为三小块</p><p>===========第一块定义了一个名为 stdout 的appender和layout (appender,layout的概念后面再解释，目前先记着有这样两个名词)：</p><p>log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />定义stdout的实际输出实现类，从这个appender实现类名可以猜到，这个类是负责控制台输出的。<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />定义stdout的输出装饰器<br />log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n<br />装饰器参数配置</p><p><br />============第二块定义了一个名为 fileout 的appender和layout:<br />log4j.appender.fileout=org.apache.log4j.RollingFileAppender<br />同理可猜这个实现类是输出到文件的<br />log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log<br />log4j.appender.fileout.MaxFileSize=10000KB<br />log4j.appender.fileout.MaxBackupIndex=10<br />log4j.appender.fileout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n</p><p>============第三块定义了名字分别为rootCategory,log4j.logger.com.wolfsquare.log2的两个logger<br />log4j.rootCategory=INFO, stdout, fileout<br />log4j.logger.com.wolfsquare.log2=DEBUG,stdout</p><p>rootCategory logger是缺省的logger，记录所有的包的信息输出。<br />第二个logger是只输出指定包com.wolfsquare.log2下的日志信息。<br />那么INFO,DEBUG又是什么意思呢，他们是信息的分级标识，通过继承实现这个实现自定义级别的分级。<br />第三块配置两句的意思是这样的：<br />rootCategory 把所有类的INFO级别以上的信息输出到stdout和fileout两个appender中，<br />logger.com.wolfsquare.log2，把com.wolfsquare.log2包中的所有类（包括子包）DEBUG级别（含）以上的信息输出到stdout 中<br />一个logger可以输出到很多个设备中（appender）,如果需要增加输出设备则用分号分隔开appender名称即可。</p><p>输出信息的分类级别是DEBUG &gt; INFO &gt; WARN &gt; ERROR,信息细节由细到粗，指定输出某一级别的信息时，<br />过细的信息输出将会被忽略</p><p>如果一个配置中有多个logger，他们之间会有什么关系呢？答案是，在输出上，他们没有任何关系，都是独立运作的，<br />不相关的，但是在配置上，父包的配置会传给子包，如果子包没有另外定义配置的话。<br />例如上面配置文件中的两个logger：<br />log4j.logger.com.wolfsquare<br />log4j.logger.com.wolfsquare.log2</p><p>这里认为 log4j.logger.com.wolfsquare.log2 继承自 log4j.logger.com.wolfsquare，他们的配置声明如下：<br />log4j.rootCategory=INFO, stdout, fileout<br />log4j.logger.com.wolfsquare.log2=,stdout<br />注意第二句没有指定输出级别,那么根据配置继承规则会继承父logger的配置，在这里就是INFO。</p><p>同时需要强调的是，如果两个logger有继承关系，且输出到同一个appender，根据输出独立原则，那么将会出现两行一样的信息，<br />例如上面的两个logger定义会导致这样的情况。<br />最后以一幅图来概括：<br /><img src="http://java.mblogger.cn/upimgs/java.mblogger.cn/wolfsquare/2006-4/2006_420273.gif" /></p><img src ="http://www.blogjava.net/wolfsquare/aggbug/42242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wolfsquare/" target="_blank">wolfsquare</a> 2006-04-20 23:21 <a href="http://www.blogjava.net/wolfsquare/archive/2006/04/20/42242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改Tds驱动Url声明解决两个Sql Server问题</title><link>http://www.blogjava.net/wolfsquare/archive/2006/02/07/29748.html</link><dc:creator>wolfsquare</dc:creator><author>wolfsquare</author><pubDate>Tue, 07 Feb 2006 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/wolfsquare/archive/2006/02/07/29748.html</guid><wfw:comment>http://www.blogjava.net/wolfsquare/comments/29748.html</wfw:comment><comments>http://www.blogjava.net/wolfsquare/archive/2006/02/07/29748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wolfsquare/comments/commentRss/29748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wolfsquare/services/trackbacks/29748.html</trackback:ping><description><![CDATA[<P>问题1：JDBC Sql Server varchar的取出最大长度限制</P>
<P>环境： JDBC驱动inet tds驱动(版本不明),SQLServer2K</P>
<P>问题症状：对于数据库声明为varchar的长度大于256的字段，可以正常保存，但是无法取出多于256字符以后的内容</P>
<P>问题2：使用Hibernate映射时0长度字符串保存后，取出多加了一个空格</P>
<P>环境：inet tds驱动Hibernate2.1.8,SQL Server2K</P>
<P>问题症状：保存0长度字符串后，取出增加了多余的空格。</P>
<P>以上两个问题都是因为没有使用最新的通讯协议引起的，修改URL声明方式如下：</P>
<P>jdbc:inetdae7:127.0.0.1:1433?database=xxx</P>
<P>问题解决，收工。</P>
<P>ps:发现协议inetdae时，数据库字段为Null时，Hibernate取出声明为基本类型（例如boolean）的对象属性并不会报错，实际上在其他数据库如Oracle和新协议上是会报错的。为了避免此类问题出现，最好还是严格遵守：Hibernate声明对象的基本类型属性，一定不能在数据库端置为空值。</P>
<P>ps2:在解决以上问题中发现,Oracle居然对传人0长度字符串，会转为空值,不知道是为了节省空间还是别的什么理由。-_-!!!</P>
<P>（<STRONG><FONT color=#0000ff>全文完</FONT></STRONG>）</P><img src ="http://www.blogjava.net/wolfsquare/aggbug/29748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wolfsquare/" target="_blank">wolfsquare</a> 2006-02-07 08:49 <a href="http://www.blogjava.net/wolfsquare/archive/2006/02/07/29748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>