﻿<?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-Koska's BLOG-文章分类-Java</title><link>http://www.blogjava.net/baxiaopeng/category/12067.html</link><description>Tell me and I forget, Teache me and I remember, Involve me and I  learn.</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 15:17:27 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 15:17:27 GMT</pubDate><ttl>60</ttl><item><title>Oracle 10g 中处理Clob大字段</title><link>http://www.blogjava.net/baxiaopeng/articles/54484.html</link><dc:creator>Koska</dc:creator><author>Koska</author><pubDate>Thu, 22 Jun 2006 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/baxiaopeng/articles/54484.html</guid><wfw:comment>http://www.blogjava.net/baxiaopeng/comments/54484.html</wfw:comment><comments>http://www.blogjava.net/baxiaopeng/articles/54484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baxiaopeng/comments/commentRss/54484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baxiaopeng/services/trackbacks/54484.html</trackback:ping><description><![CDATA[本文主要讲解<br /> 1、在Oracle 10g中的新的，方便处理Clob 大字段的 JDBC Api<br /> 2、以及一个java 中处理大字段的一个示例程序<br /><br />A、什么是Clob<br />LOBs (Large Ojbects) 用来存储没有结构的数据，比如大文本内容，图像文件，或是视频等等。<br />  &middot;Oracle里有3种LOB,BLOB(Binary LOB),CLOB(Character LOB),和NCLOB(National Character LOB).<br />  &middot;每一个LOB对象会存储成为一个系统文件，被称为BFILEs.<br />B、处理Clob<br />在10g 之前Oracle 提供了从java.sql.CLOB扩展的oracle.sql.CLOB对象来处理。从10g以后Oracle的jdbc加入了新的API, OraclePreparedStatement增加了新的Api.OraclePreparedStatement.setStringForClob (),这个方法没有<br />OraclePreparedStatement.setString()这个方法的32765的长度限制。正如你想象的一样，OraclePreparedStatement.getString(),这个方法照旧，还是一样可以从CLOB字段取得完整的内容。<br />C、示例程序<br />方法一：标准的jdbc api<br /> 注意，前边提到的 setStringForClob 方法，在标准的 jdbc Api 里面是没有,这里需要把一个 SetBigStringTryClob 属性设置到数据库连接，这样setString()这个方法就会试图用CLOB方式来处setString.<br /> a、准备数据库<br />    CREATE TABLE clob_tab (clob_col CLOB);<br /> b、创建数据库连接<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import oracle.jdbc.OracleDriver;<br />import java.util.Properties;<br />..........          <br /><br />// 定义数据库连接变量<br />String url      = &quot;jdbc:oracle:thin:@localhost:1521:orcl&quot;;<br />String user     = &quot;scott&quot;;<br />String password = &quot;tiger&quot;;<br /><br />// 准备创建数据库连接的属性<br />Properties props = new Properties();<br />props.put(&quot;user&quot;, user );<br />props.put(&quot;password&quot;, password);<br />props.put(&quot;SetBigStringTryClob&quot;, &quot;true&quot;);<br />//注意，这是有必要的<br /><br />// 加载数据库驱动<br />DriverManager.registerDriver(new OracleDriver());     <br /> <br />// 获得数据库连接<br />Connection conn = DriverManager.getConnection( this.url, this.props );<br /><br />  c、小试:<br />PreparedStatement pstmt = conn.prepareStatement(<br />                                  &quot;INSERT INTO clob_tab VALUES(?)&quot;);<br /><br />//读入大文本<br />String str = this.readFile(&quot;bigFile.txt&quot;);<br /><br />//用setString方法来把大文本写入Clob字段<br />//要确保在 SetBigStringTryClob 属性已经设置<br />pstmt.setString(1, str);<br />pstmt.executeUpdate();<br /><br />方法二：非jdbc标准,Oracle api方式<br />import java.sql.*;<br />import java.io.*;<br />import java.util.*;<br />import oracle.jdbc.*;<br />import oracle.jdbc.pool.*;<br />..........<br /><br />// sql<br />String sql = &quot;INSERT INTO clob_tab VALUES(?)&quot;;<br />      <br />// 读入大文本(大于 32765 字节). <br />//readFile() 只是一个方法用来读取文本，返回字符串<br />String str = this.readFile(&quot;bigFile.txt&quot;);<br /><br />// 新建 OraclePreparedStatement , 注意比较这里<br />opstmt = (OraclePreparedStatement)conn.prepareStatement(sql);<br /><br />// 调用 setStringForClob 方法来写入Clob<br />opstmt.setStringForClob(1,str);<br /><br />// 执行<br />opstmt.executeUpdate();<br />...........<br /><br /><br />D、用getString()读取Clob<br />ResultSet.getString()方法并没有 32765 字节的限制，以下就是读取CLOB字段的方法<br /><br />.....<br />PreparedStatement pstmt = null;<br />    <br />ResultSet rset = null;<br />.......<br /><br /><br />// 执行Sql,返回结果集<br />String sqlCall = &quot;SELECT clob_col FROM clob_tab&quot;;<br />pstmt= conn.prepareStatement(sqlCall);<br /><br />rset = pstmt.executeQuery();<br />     <br />String clobVal = null; <br />      <br />// 读取CLOB字段<br />while (rset.next()) {<br />  clobVal = rset.getString(1);<br />  System.out.println(&quot;CLOB length: &quot;+clobVal.length());     <br />}<img src ="http://www.blogjava.net/baxiaopeng/aggbug/54484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baxiaopeng/" target="_blank">Koska</a> 2006-06-22 14:03 <a href="http://www.blogjava.net/baxiaopeng/articles/54484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将Tomcat设置为服务</title><link>http://www.blogjava.net/baxiaopeng/articles/53973.html</link><dc:creator>Koska</dc:creator><author>Koska</author><pubDate>Tue, 20 Jun 2006 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/baxiaopeng/articles/53973.html</guid><wfw:comment>http://www.blogjava.net/baxiaopeng/comments/53973.html</wfw:comment><comments>http://www.blogjava.net/baxiaopeng/articles/53973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baxiaopeng/comments/commentRss/53973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baxiaopeng/services/trackbacks/53973.html</trackback:ping><description><![CDATA[in.bat<br /><br />set CATALINA_HOME=D:\gongzuo\sxyh_website\tomcat<br />set CATALINA_BASE=D:\gongzuo\sxyh_website\tomcat<br />set JAVA_HOME=C:\jdk1.4<br />set CATALINA_OPTS=-Xms128m -Xmx256m <br />set MAINCLASS=org.apache.catalina.startup.BootstrapService<br />set SERVICE_NAME =Opendata2<br /><br />&quot;%CATALINA_HOME%\bin\tomcat.exe&quot; -install %SERVICE_NAME% %JAVA_HOME%\jre\bin\server\jvm.dll %CATALINA_OPTS% -Djava.class.path=&quot;%CATALINA_HOME%\bin\bootstrap.jar;%JAVA_HOME%\lib\tools.jar&quot; -Dcatalina.home=&quot;%CATALINA_HOME%&quot; -Dcatalina.base=&quot;%CATALINA_BASE%&quot; -start %MAINCLASS% -params start -stop %MAINCLASS% -params stop -out &quot;%CATALINA_HOME%\logs\%SERVICE_NAME%_out.log&quot; -err &quot;%CATALINA_HOME%\logs\%SERVICE_NAME%_err.log&quot; <br /><br />un.bat<br /><br />set SERVICE_NAME=Opendata2<br />tomcat -uninstall %SERVICE_NAME%<img src ="http://www.blogjava.net/baxiaopeng/aggbug/53973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baxiaopeng/" target="_blank">Koska</a> 2006-06-20 14:05 <a href="http://www.blogjava.net/baxiaopeng/articles/53973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式原则详解 </title><link>http://www.blogjava.net/baxiaopeng/articles/53355.html</link><dc:creator>Koska</dc:creator><author>Koska</author><pubDate>Fri, 16 Jun 2006 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/baxiaopeng/articles/53355.html</guid><wfw:comment>http://www.blogjava.net/baxiaopeng/comments/53355.html</wfw:comment><comments>http://www.blogjava.net/baxiaopeng/articles/53355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baxiaopeng/comments/commentRss/53355.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baxiaopeng/services/trackbacks/53355.html</trackback:ping><description><![CDATA[这篇文章,不需要你一次就看懂,如果你真的能一次都看懂,我想设计模式对于你来说已经没什么难度了..因为设计模式就是要体现这些原则的,你可以把设计原则看做是一门语言,设计模式是由这些语言编码的程序..你既然已经明白,精通了语言,剩下的编码自然是很简单的事情,编码的越多则经验越多,经验越多则对原则的理解就越深...这是一个<span style="COLOR: red">学习领悟</span>的过程..
<p>     我希望这篇文章能帮助新人感受到<span style="COLOR: red">设计模式的乐趣</span>,避免重复编码....减少劳动量..如果你能在用心静静的体会文章的每个字,每段话的意思,这样可以避免走很多弯路...我以前学习设计模式的时候,就是因为忽略了原则,凭着感觉,看着书来学习设计模式,结果就是知其然而不知其所以然....如果你是初学设计模式,再了解了OOP的三大原则(封套,继承,多态)之后,请反复的结合原则,来学习设计模式..这样可以达到事半功倍的效果...<br />  <br />     <span style="COLOR: red">设计模式的核心原则是:"开-闭"原则(  Open - Closed Principle 缩写:OCP  ),一切的一切都是围绕着"开-闭"原则展开的..<br /></span>     意思是,在一个系统中,对于扩展是开放的,对于修改是关闭的,一个好的系统是在不修改源代码的情况下,可以扩展你的功能..而实现开闭原则的关键就是抽象化.<br />     在"开-闭"原则中,不允许修改的是抽象的类或者接口,允许扩展的是具体的实现类,抽象类和接口在"开-闭"原则中扮演着极其重要的角色..即要预知可能变化的需求.又预见所有可能已知的扩展..所以在这里"抽象化"是关键!!!</p><p>      <span style="COLOR: red">可变性的封闭原则:找到系统的可变因素,将它封装起来..</span>这是对"开-闭"原则最好的实现..不要把你的可变因素放在多个类中,或者散落在程序的各个角落..你应该将可变的因素,封套起来..并且切忌不要把所用的可变因素封套在一起..最好的解决办法是,分块封套你的可变因素!!避免超大类,超长类,超长方法的出现!!给你的程序增加艺术气息,将程序艺术化是我们的目标!!</p><p>      <span style="COLOR: red">里氏代换原则:任何基类可以出现的地方,子类也可以出现..</span>如果你通读过&lt;Java编程思想&gt;,我想你应该明白这个原则,在书中,Bruce Eckel 大师用了大量的章节来讲解"向上转型"和"向下转型",我想目的很清楚,不仅是要你明白类的型别,更重要的是要你明白父类与子类的关系..<br /><br />      <span style="COLOR: red">依赖倒转原则:要依赖抽象,而不要依赖具体的实现..</span>如果说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段..如果要达到最好的"开闭"原则,就要尽量的遵守依赖倒转原则..可以说依赖倒转原则是对"抽象化"的最好规范!!我个人感觉,依赖倒转原则也是里氏代换原则的补充..你理解了里氏代换原则,再来理解依赖倒转原则应该是很容易的..<br />  合成/聚合原则:要尽量使用合成/聚合原则,而不是继承关系达到软件复用的目的..此原则和里氏代换原则氏相辅相成的,两者都是具体实现"开-闭"原则的规范..违反这一原则:就无法实现"开-闭"原则..先来看看什么是合成,什么是聚合.</p><p>      <span style="COLOR: red">什么是合成?<br /></span>     合成:是指一个整体对依托他而存在的关系,例如:一个人对他的房子和家具,其中他的房子和家具是不能被共享的,因为那些东西都是他自己的..并且人没了,这个也关系就没了..这个例子就好像,乌鸡百凤丸这个产品,它是有乌鸡和上等药材合成而来的一样..也比如网络游戏中的武器装备合成一样,多种东西合并为一种超强的东西一样..<br />      <br />      <span style="COLOR: red">什么是聚合?<br /></span>      聚合:聚合是比合成关系的一种更强的依赖关系,聚合是一个整体对个体的部分,例如,一个奔驰S360汽车,对奔驰S360引擎,奔驰S360轮胎的关系..这些关系就是带有聚合性质的..因为奔驰S360引擎和奔驰S360轮胎他们只能被奔驰S360汽车所用,离开了奔驰S360汽车,它们就失去了存在的意义..在我们的设计中,这样的关系不应该频繁出现..这样会增大设计的耦合度..<br />      明白了合成和聚合关系,再来理解合成/聚合原则应该就清楚了..要避免在系统设计中出现,一个类的继承层次超过3次..如果这样的话,可以考虑重构你的代码,或者重新设计结构..当然最好的办法就是考虑使用合成/聚合原则...<br /><br />      <span style="COLOR: red">迪米特法则:系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度</span>,因为在你的系统中,扩展的时候,你可能需要修改这些类,而类与类之间的关系,决定了修改的复杂度,相互作用越多,则修改难度就越大,反之,如果相互作用的越小,则修改起来的难度就越小..例如A类依赖B类,则B类依赖C类,当你在修改A类的时候,你要考虑B类是否会受到影响,而B类的影响是否又会影响到C类..如果此时C类再依赖D类的话,呵呵,我想这样的修改有的受了..<br /><br />     <span style="COLOR: red">接口隔离法则:这个法则与迪米特法则是相通的,</span>迪米特法则是目的,而接口隔离法则是对迪米特法则的规范..为了做到尽可能小的耦合性,我们需要使用接口来规范类,用接口来约束类.要达到迪米特法则的要求,最好就是实现接口隔离法则,实现接口隔离法则,你也就满足了迪米特法则...<br />     <br /> <br />       如果你能看这里,说明你已经对这些原则了有了感性的认识..这些原则是设计模式的核心,如果不能充分理解这些原则,是很难理解好设计模式的..</p><p>      如果第一遍看不懂,没关系,请<span style="COLOR: red"><strong>反复揣摩,细读每个字,每句话..</strong></span>对于这些原则,我也是看了N*N遍才明白的(这期间也没任何人指点过我,更每人讲的这么细,奖励自己一下先<img height="20" src="http://www.cnblogs.com/Emoticons/QQ/05.gif" width="20" border="0" />,汗啊)..我推荐看完原则之后,请看设计模式,看两三个模式,然后理解一下,自己动手把模式实现出来,再回头来看原则,你会感觉,你的模式一定是满足了其中的某些原则!!这是必然的!!只要你理解了原则,设计模式不难理解..就好比,有了内功基础的你,再来学习刀,剑,枪这些武器的时候,要比那些直接学习刀,枪,剑的人,快很多,效果也好很多...<br /></p><img src ="http://www.blogjava.net/baxiaopeng/aggbug/53355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baxiaopeng/" target="_blank">Koska</a> 2006-06-16 17:30 <a href="http://www.blogjava.net/baxiaopeng/articles/53355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4j基本使用方法</title><link>http://www.blogjava.net/baxiaopeng/articles/52000.html</link><dc:creator>Koska</dc:creator><author>Koska</author><pubDate>Sun, 11 Jun 2006 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/baxiaopeng/articles/52000.html</guid><wfw:comment>http://www.blogjava.net/baxiaopeng/comments/52000.html</wfw:comment><comments>http://www.blogjava.net/baxiaopeng/articles/52000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baxiaopeng/comments/commentRss/52000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baxiaopeng/services/trackbacks/52000.html</trackback:ping><description><![CDATA[Log4j由三个重要的组件构成：日志信息的优先级，日志信息的输出目的地，日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG，分别用来指定这条日志信息的重要程度；日志信息的输出目的地指定了日志将打印到控制台还是文件中；而输出格式则控制了日志信息的显示内容。 
<p>　　<strong>一、定义配置文件</strong></p><p>　　其实您也可以完全不使用配置文件，而是在代码中配置Log4j环境。但是，使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件（键=值）。下面我们介绍使用Java特性文件做为配置文件的方法：</p><p>　　1.配置根Logger，其语法为：</p><p>　　log4j.rootLogger = [ level ] , appenderName, appenderName, … </p><p>　　其中，level 是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别，优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 </p><p>　　2.配置日志信息输出目的地Appender，其语法为：</p><p>　　log4j.appender.appenderName = fully.qualified.name.of.appender.class <br />　　log4j.appender.appenderName.option1 = value1 <br />　　… <br />　　log4j.appender.appenderName.option = valueN </p><p>　　其中，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（将日志信息以流格式发送到任意指定的地方） </p><p>　　3.配置日志信息的格式（布局），其语法为：</p><p>　　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 </p><p>　　其中，Log4j提供的layout有以下几种： <br />　　org.apache.log4j.HTMLLayout（以HTML表格形式布局）， <br />　　org.apache.log4j.PatternLayout（可以灵活地指定布局模式）， <br />　　org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串）， <br />　　org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息） </p><p>　　Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下： %m 输出代码中指定的消息</p><p>　　%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL <br />　　%r 输出自应用启动到输出该log信息耗费的毫秒数 <br />　　%c 输出所属的类目，通常就是所在类的全名 <br />　　%t 输出产生该日志事件的线程名 <br />　　%n 输出一个回车换行符，Windows平台为“\r\n”，Unix平台为“\n” <br />　　%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921 <br />　　%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10) </p><p>　　<strong>二、在代码中使用Log4j</strong></p><p>　　1.得到记录器</p><p>　　使用Log4j，第一步就是获取日志记录器，这个记录器将负责控制日志信息。其语法为： </p><p>　　public static Logger getLogger( String name) </p><p>　　通过指定的名字获得记录器，如果必要的话，则为这个名字创建一个新的记录器。Name一般取本类的名字，比如： </p><p>　　static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )</p><p>　　2.读取配置文件 </p><p>　　当获得了日志记录器之后，第二步将配置Log4j环境，其语法为：</p><p>　　BasicConfigurator.configure ()： 自动快速地使用缺省Log4j环境。<br />　　PropertyConfigurator.configure ( String configFilename) ：读取使用Java的特性文件编写的配置文件。<br />　　DOMConfigurator.configure ( String filename ) ：读取XML形式的配置文件。</p><p>　　3.插入记录信息（格式化日志信息）</p><p>　　当上两个必要步骤执行完毕，您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方，其语法如下：</p><p>　　Logger.debug ( Object message ) ;<br />　　Logger.info ( Object message ) ;<br />　　Logger.warn ( Object message ) ;<br />　　Logger.error ( Object message ) ;</p><img src ="http://www.blogjava.net/baxiaopeng/aggbug/52000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baxiaopeng/" target="_blank">Koska</a> 2006-06-11 15:05 <a href="http://www.blogjava.net/baxiaopeng/articles/52000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>