athrunwang

          紀(jì)元
          數(shù)據(jù)加載中……

          Java壓縮技術(shù)(一) ZLib 轉(zhuǎn)貼 Snowolf的意境空間! http://snowolf.iteye.com/blog/465433

               摘要: Snowolf的意境空間!轉(zhuǎn)貼:http://snowolf.iteye.com/blog/465433應(yīng)好友需要,整理一下Java的壓縮算法,先從ZLib開始。 相關(guān)鏈接: Java壓縮技術(shù)(一) ZLib Java壓縮技術(shù)(二) ZIP壓縮——Java原生實(shí)現(xiàn) Java壓縮技術(shù)(三) ZIP解壓縮——Jav...  閱讀全文

          posted @ 2011-12-26 09:50 AthrunWang 閱讀(585) | 評(píng)論 (0)編輯 收藏
          Java驗(yàn)證碼

               摘要: Java生成驗(yàn)證碼圖片 1.Servlet生成驗(yàn)證碼圖片 1 package com.logcd.servlet; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics2D; 6 import java.awt.image.BufferedImage; 7 import ...  閱讀全文

          posted @ 2011-12-06 10:36 AthrunWang 閱讀(2772) | 評(píng)論 (3)編輯 收藏
          dom4j對(duì)xml文件進(jìn)行更新操作

          dom4j是一個(gè)Java的XML API,類似于jdom,用來(lái)讀寫XML文件的。dom4j是一個(gè)非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開放源代碼的軟件,可以在SourceForge上找到它 地址。如今你可以看到越來(lái)越多的Java軟件都在使用dom4j來(lái)讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包, Hibernate用它來(lái)讀寫配置文件。

          今天項(xiàng)目需要對(duì)已存在的xml文件進(jìn)行更新,對(duì)比之下,感覺dom4j還是比較適合的,現(xiàn)在將代碼貼上,方便以后參考

          /**
          * 將訂單信息寫入xml文件
          *
          @param map
          *
          @throws DocumentException
          *
          @throws IOException
          */
          public void writeXML(Map map) throws DocumentException, IOException{

          if(map != null && map.get("respCode").equals("0000")){//訂單提交成功,未付款
          //將訂單信息寫入文件
          File inputXML=new File("e:/orderList.xml");
          //使用 SAXReader 解析 XML 文檔 orderList.xml
          SAXReader saxReader=new SAXReader();
          Document document=saxReader.read(inputXML);

          Element orders=document.getRootElement();//根節(jié)點(diǎn)

          Element order = orders.addElement("order");//訂單節(jié)點(diǎn)

          Element merchantId = order.addElement("merchantId");//商戶ID
          merchantId.setText(map.get("merchantId").toString());

          Element transType = order.addElement("transType");//訂單狀態(tài)
          transType.setText(map.get("transType") == null ? "00":map.get("transType").toString());

          Element merchantOrderId = order.addElement("merchantOrderId");//訂單ID
          merchantOrderId.setText(map.get("merchantOrderId").toString());

          Element merchantOrderTime = order.addElement("merchantOrderTime");//訂單時(shí)間
          merchantOrderTime.setText(map.get("merchantOrderTime").toString());

          Element merchantOrderAmt = order.addElement("merchantOrderAmt");//訂單金額
          merchantOrderAmt.setText(map.get("merchantOrderAmt").toString());


          Writer writer = new FileWriter(inputXML);
          OutputFormat format= OutputFormat.createPrettyPrint();//格式化
          XMLWriter xmlWriter = new XMLWriter(writer,format);
          xmlWriter.write(document);
          xmlWriter.close();
          }
          }

          posted @ 2011-12-06 10:34 AthrunWang 閱讀(189) | 評(píng)論 (0)編輯 收藏
          maven環(huán)境快速搭建

          第一步:配置maven環(huán)境

           

          將下載文件解壓,然后設(shè)置maven環(huán)境

          如果你配置過(guò)jdk的話,這里對(duì)你應(yīng)該不難。如我的maven環(huán)境為:F:\maven\apache-maven-3.0.3

          我的電腦-----屬性----高級(jí)-----環(huán)境變量-----環(huán)境變量-----新建

          變量名:M2_HOME

          變量值:F:\maven\apache-maven-3.0.3

          找到path 

          在環(huán)境變量值尾部加入:;%M2_HOME%\bin;---前面注意分號(hào)

          當(dāng)然,你也可以直接在path 路徑下加入:;F:\maven\apache-maven-3.0.3\bin  只是上面的方式更優(yōu)雅一點(diǎn)。

          我新建立

          打開命令提示符(開始---運(yùn)行---cmd,檢查我們的java環(huán)境和maven環(huán)境是否有誤。

           

           

          第二步:修改倉(cāng)庫(kù)位置

           

          修改我們倉(cāng)庫(kù)地址,倉(cāng)庫(kù)用于存放我們項(xiàng)目所依賴的所有jar包。

          我的倉(cāng)庫(kù)路徑:F:\maven\repo----這個(gè)路徑是我自己創(chuàng)建,你可以將路徑創(chuàng)建在任何位置。

          我們打開…\apache-maven-3.0.3\conf\目錄下的setting.xml文件,設(shè)置成我們創(chuàng)建的倉(cāng)庫(kù)路徑

          下面我們用一個(gè)命令驗(yàn)證一下。打開命令提示符,輸入:mvn help:system 

          該命令會(huì)打印出所有的java系統(tǒng)屬性和環(huán)境變量。這些信息對(duì)我們?nèi)粘5木幊坦ぷ骱苡袔颓摇?/span>

          如果運(yùn)行的過(guò)程中沒有錯(cuò)誤,打開我們倉(cāng)庫(kù)(F:\maven\repo)會(huì)發(fā)現(xiàn)里面多了一些文件。這些文件就是我們從maven的中央倉(cāng)庫(kù)下載到本地倉(cāng)庫(kù)的。

           

          第三步:創(chuàng)建maven項(xiàng)目

          創(chuàng)建一個(gè)我們自己的項(xiàng)目。

          我們通過(guò)maven命令行方式創(chuàng)建一個(gè)項(xiàng)目

          mvn archetype:create -DgroupId=com.chongshi.test -DartifactId=hello -DpackageName=com.chongshi.test -Dversion=1.0

           

          因?yàn)槭堑谝淮螛?gòu)建項(xiàng)目,所有依賴的jar包都要從maven的中央倉(cāng)庫(kù)下載,所以需要時(shí)間等待。等以后我們的本地倉(cāng)庫(kù)中積累了我們常用的jar包后,我們的開發(fā)將變得非常規(guī)范和方便。^_^!!

           

          借助下載jar包的時(shí)間,我們來(lái)了解一下pom.xml文件。

           

          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation
          ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>

          <groupId>com.chongshi.test</groupId>
          <artifactId>hello</artifactId>
          <version>1.0</version>
          <packaging>jar</packaging>

          <name>hello</name>
          <url>http://maven.apache.org</url>

          <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          </properties>

          <dependencies>
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
          </dependency>
          </dependencies>
          </project>

          Ø project:pom.xml文件中的頂層元素; 
          Ø modelVersion:指明POM使用的對(duì)象模型的版本。這個(gè)值很少改動(dòng)。
          Ø groupId:指明創(chuàng)建項(xiàng)目的組織或者小組的唯一標(biāo)識(shí)。GroupId是項(xiàng)目的關(guān)鍵標(biāo)識(shí),典型的,此標(biāo)識(shí)以組織的完全限定名來(lái)定義。比如,org.apache.maven.plugins是所有Maven插件項(xiàng)目指定的groupId。 

          Ø artifactId:指明此項(xiàng)目產(chǎn)生的主要產(chǎn)品的基本名稱。項(xiàng)目的主要產(chǎn)品通常為一個(gè)JAR文件。第二,象源代碼包通常使用artifactId作為最后名稱的一部分。典型的產(chǎn)品名稱使用這個(gè)格式: <artifactId>- <version>. <extension>(比如:myapp-1.0.jar)。 

          Ø version:項(xiàng)目產(chǎn)品的版本號(hào)。Maven幫助你管理版本,可以經(jīng)常看到SNAPSHOT這個(gè)版本,表明項(xiàng)目處于開發(fā)階段。 

          Ø name:項(xiàng)目的顯示名稱,通常用于maven產(chǎn)生的文檔中。 

          Ø url:指定項(xiàng)目站點(diǎn),通常用于maven產(chǎn)生的文檔中。 

          Ø description:描述此項(xiàng)目,通常用于maven產(chǎn)生的文檔中。

           

          對(duì)于一個(gè)項(xiàng)目中只有下面的一部分是是我們需要關(guān)注的:

          <groupId>com.chongshi.test</groupId>

           <artifactId>hello</artifactId>

           <version>1.0</version>

           

          第四步:編譯項(xiàng)目代碼

          我們的項(xiàng)目已經(jīng)創(chuàng)建完成。但我們點(diǎn)開目錄發(fā)現(xiàn),它并不是我們eclipse所需要的項(xiàng)目目錄格式。我們需要把它構(gòu)建成我們eclipse可以導(dǎo)入的項(xiàng)目。

          在命令提示符下進(jìn)入到我們的創(chuàng)建的項(xiàng)目目錄(F:\maven\hello)下,執(zhí)行:mvn clean compile

          Clean 告訴maven清理輸入出目錄target/,compile告訴maven編譯項(xiàng)目主代碼。

          不要急,我們又需要一段時(shí)間來(lái)下載,相關(guān)jar包。^_^!第一次用maven要學(xué)會(huì)淡定。

           

          項(xiàng)目是編譯完了,但項(xiàng)目的目錄結(jié)構(gòu)還不是我們想要的eclipse的項(xiàng)目結(jié)構(gòu),是不能導(dǎo)入到eclipse中的。所以,還需要執(zhí)行一個(gè)命令:mvn eclipse:eclipse

           

          命令執(zhí)行完成后就得我們需要的項(xiàng)目目錄了。

           

          第五步:導(dǎo)入eclipse工具

           

          打開的我們的eclipse工具。

          先配置maven倉(cāng)庫(kù)路徑

          Window----Perferences-----java-----Build Path-----Classpath Variables

          New一個(gè)變量的類路徑。

          Name :M2_REPO   注意這個(gè)名字必須要大寫。

          Path :F:/maven/repo  點(diǎn)擊“Folder…”找到有本地倉(cāng)庫(kù)的位置。

           

          下面,可以導(dǎo)入我的hello項(xiàng)目了。Eclipse如何導(dǎo)入項(xiàng)目,我這里就不說(shuō)了,如果你是個(gè)java開發(fā)人員的話。

           

          第六步:包的更新與下載

           

          打開項(xiàng)目發(fā)現(xiàn)我們junit 是3.8.1的,有點(diǎn)老了。那我想換成4.7的,如何通過(guò)maven的方式更換呢。其實(shí),很簡(jiǎn)單,打開我們項(xiàng)目下的的pom.xml文件。

          ……
          <dependencies>
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.1</version>
          <scope>test</scope>
          </dependency>
          </dependencies>
          ……

          更改變,junit的版本號(hào),然后重新執(zhí)行:mvn eclipse:eclipse  

          Maven 中央倉(cāng)庫(kù)地址:http://search.maven.org

           

          假如,我們想下載一個(gè)struts jar包。在搜索框內(nèi)搜索strruts ,會(huì)要列出中央倉(cāng)庫(kù)中的所有struts版本。

          列表的格式與我們pom.xml配置文件的格式是對(duì)應(yīng)的。

           

           

           

           

          我們?cè)趐om.xml中加入:

          <groupId>stuts</groupId>

           <artifactId>struts-scription</artifactId>

           <version>1.0.1</version>

          然后更新項(xiàng)目就可從中央倉(cāng)庫(kù)下載我們想要的任意jar包(必須是開源的包)

           

          繼續(xù)學(xué)習(xí)內(nèi)容:

          1. 如何創(chuàng)建一個(gè)web項(xiàng)目?

            如果想讓maven應(yīng)用到項(xiàng)目開發(fā)中,這個(gè)是必須的。

          2. 如何使用jeety?

            maven提供的一個(gè)容器,類似于tomcat

          3. 如何創(chuàng)建一個(gè)代理倉(cāng)庫(kù)?

            如果是團(tuán)隊(duì)開發(fā),這個(gè)很有必要,我們不可能每次都到中央倉(cāng)庫(kù)拿包,那樣很慢,如果開發(fā)人員A已經(jīng)下了某包,開發(fā)人員B還要下;創(chuàng)建代理倉(cāng)庫(kù),A第一次下的包會(huì)存入代理倉(cāng)庫(kù)中,B要用時(shí)直接從代理倉(cāng)庫(kù)取就行。

          posted @ 2011-12-06 10:32 AthrunWang 閱讀(325) | 評(píng)論 (0)編輯 收藏
          java環(huán)境變量配置——windows 平臺(tái)上

           1 windows xp下配置JDK環(huán)境變量:
          2 1.安裝JDK,安裝過(guò)程中可以自定義安裝目錄等信息,例如我們選擇安裝目錄為D:\java\jdk1.5.0_08;
          3
          4   2.安裝完成后,右擊“我的電腦”,點(diǎn)擊“屬性”;
          5
          6 3.選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量”;
          7
          8 4.在“系統(tǒng)變量”中,設(shè)置3項(xiàng)屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無(wú)所謂),若已存在則點(diǎn)擊“編輯”,不存在則點(diǎn)擊“新建”;
          9
          10 5.JAVA_HOME指明JDK安裝路徑,就是剛才安裝時(shí)所選擇的路徑D:\java\jdk1.5.0_08,此路徑下包括lib,bin,jre等文件夾(此變量最好設(shè)置,因?yàn)橐院筮\(yùn)行tomcat,eclipse等都需要依*此變量);
          11
          12
          13 Path使得系統(tǒng)可以在任何路徑下識(shí)別java命令,設(shè)為:
          14
          15 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
          16
          17   CLASSPATH為java加載類(class or lib)路徑,只有類在classpath中,java命令才能識(shí)別,設(shè)為:
          18
          19 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示當(dāng)前路徑)
          20
          21   %JAVA_HOME%就是引用前面指定的JAVA_HOME;
          22
          23 6.“開始”->;“運(yùn)行”,鍵入“cmd”;
          24
          25 7.鍵入命令“java -version”,“java”,“javac”幾個(gè)命令,出現(xiàn)畫面,說(shuō)明環(huán)境變量配置成功;
          26
          27 8.好了,打完收工。下面開始你的第一個(gè)java程序吧。

          posted @ 2011-12-06 10:20 AthrunWang 閱讀(137) | 評(píng)論 (0)編輯 收藏
          數(shù)字簽名是什么?

          今天,我讀到一篇好文章

          它用圖片通俗易懂地解釋了,"數(shù)字簽名"(digital signature)和"數(shù)字證書"(digital certificate)到底是什么。

          我對(duì)這些問(wèn)題的理解,一直是模模糊糊的,很多細(xì)節(jié)搞不清楚。讀完這篇文章后,發(fā)現(xiàn)思路一下子就理清了。為了加深記憶,我把文字和圖片都翻譯出來(lái)了。

          文中涉及的密碼學(xué)基本知識(shí),可以參見我以前的筆記

          ====================================================

          數(shù)字簽名是什么?

          作者:David Youd

          翻譯:阮一峰

          原文網(wǎng)址:http://www.youdzone.com/signature.html

          1.

          鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。

          2.

          鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。

          3.

          蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達(dá)到保密的效果。

          4.

          鮑勃收信后,用私鑰解密,就看到了信件內(nèi)容。這里要強(qiáng)調(diào)的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無(wú)法解密。

          5.

          鮑勃給蘇珊回信,決定采用"數(shù)字簽名"。他寫完后先用Hash函數(shù),生成信件的摘要(digest)。

          6.

          然后,鮑勃使用私鑰,對(duì)這個(gè)摘要加密,生成"數(shù)字簽名"(signature)。

          7.

          鮑勃將這個(gè)簽名,附在信件下面,一起發(fā)給蘇珊。

          8.

          蘇珊收信后,取下數(shù)字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實(shí)是鮑勃發(fā)出的。

          9.

          蘇珊再對(duì)信件本身使用Hash函數(shù),將得到的結(jié)果,與上一步得到的摘要進(jìn)行對(duì)比。如果兩者一致,就證明這封信未被修改過(guò)。

          10.

          復(fù)雜的情況出現(xiàn)了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時(shí),蘇珊實(shí)際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成"數(shù)字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進(jìn)行解密。

          11.

          后來(lái),蘇珊感覺不對(duì)勁,發(fā)現(xiàn)自己無(wú)法確定公鑰是否真的屬于鮑勃。她想到了一個(gè)辦法,要求鮑勃去找"證書中心"(certificate authority,簡(jiǎn)稱CA),為公鑰做認(rèn)證。證書中心用自己的私鑰,對(duì)鮑勃的公鑰和一些相關(guān)信息一起加密,生成"數(shù)字證書"(Digital Certificate)。

          12.

          鮑勃拿到數(shù)字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時(shí),再附上數(shù)字證書就行了。

          13.

          蘇珊收信后,用CA的公鑰解開數(shù)字證書,就可以拿到鮑勃真實(shí)的公鑰了,然后就能證明"數(shù)字簽名"是否真的是鮑勃簽的。

          14.

          下面,我們看一個(gè)應(yīng)用"數(shù)字證書"的實(shí)例:https協(xié)議。這個(gè)協(xié)議主要用于網(wǎng)頁(yè)加密。

          15.

          首先,客戶端向服務(wù)器發(fā)出加密請(qǐng)求。

          16.

          服務(wù)器用自己的私鑰加密網(wǎng)頁(yè)以后,連同本身的數(shù)字證書,一起發(fā)送給客戶端。

          17.

          客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發(fā)機(jī)構(gòu)"列表。客戶端會(huì)根據(jù)這張列表,查看解開數(shù)字證書的公鑰是否在列表之內(nèi)。

          18.

          如果數(shù)字證書記載的網(wǎng)址,與你正在瀏覽的網(wǎng)址不一致,就說(shuō)明這張證書可能被冒用,瀏覽器會(huì)發(fā)出警告。

          19.

          如果這張數(shù)字證書不是由受信任的機(jī)構(gòu)頒發(fā)的,瀏覽器會(huì)發(fā)出另一種警告。

          20.

          如果數(shù)字證書是可靠的,客戶端就可以使用證書中的服務(wù)器公鑰,對(duì)信息進(jìn)行加密,然后與服務(wù)器交換加密信息。

          (完)

          posted @ 2011-11-30 11:53 AthrunWang 閱讀(170) | 評(píng)論 (0)編輯 收藏
          Oracle中JDBC對(duì)BLOB和CLOB讀取的專用處理和通用處理

          設(shè)有表:
          create table blobimg(idintprimarykey,contentsblob);
          一、BLOB入庫(kù)的專用訪問(wèn):
          1)最常見于Oracle的JDBC示例中
          一般是先通過(guò)select...forupdate鎖定blob列,然后寫入blob值,然后提交。要用到特定的OracleBLOB類。
          Class.forName("oracle.jdbc.driver.OracleDriver");
          Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb","test","test");
          //處理事務(wù)
          con.setAutoCommit(false);
          Statementst=con.createStatement();
          //插入一個(gè)空對(duì)象
          st.executeUpdate("insertintoBLOBIMGvalues(1,empty_blob())");
          //用forupdate方式鎖定數(shù)據(jù)行
          ResultSetrs=st.executeQuery(
          "selectcontentsfromBLOBIMGwhereid=1forupdate");
          if(rs.next()){
          //使用oracle.sql.BLOB類,沒辦法了,變成專用的了
          oracle.sql.BLOBblob=(oracle.sql.BLOB)rs.getBlob(1).;
          //到數(shù)據(jù)庫(kù)的輸出流
          OutputStreamoutStream=blob.getBinaryOutputStream();
          //這里用一個(gè)文件模擬輸入流
          Filefile=newFile("d:\\proxy.txt");
          InputStreamfin=newFileInputStream(file);
          //將輸入流寫到輸出流
          byte[]b=newbyte[blob.getBufferSize()];
          intlen=0;
          while((len=fin.read(b))!=-1){
          outStream.write(b,0,len);
          }
          //依次關(guān)閉
          fin.close();
          outStream.flush();
          outStream.close();
          }
          con.commit();
          con.close();

           2)再厲害一點(diǎn)的,是通過(guò)調(diào)用DBMS_LOB包中的一些函數(shù)來(lái)處理,效率好像也不錯(cuò).
           不過(guò),要使用到存儲(chǔ)過(guò)程,用到專用類OracleCallableStatement。
           例:
          importjava.sql.*;
          importjava.io.*;
          importoracle.jdbc.driver.*;
          importoracle.sql.*;
          classTestBlobWriteByDBMS_LOB{

          publicstaticvoidmain(Stringargs[])throwsSQLException,
          FileNotFoundException,IOException
          {
          DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
          Connectionconn=
          DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora92","scott","tiger");
          conn.setAutoCommit(false);
          Statementstmt=conn.createStatement();
          stmt.execute("deletefromdemo");
          System.out.println("deletedfromdemo");
          stmt.execute("insertintodemo(id,theBlob)values(s_enr.nextval,empty_blob())");
          conn.commit();
          System.out.println("committed");
          ResultSetrset=stmt.executeQuery("SELECTtheBlobFROMdemowhereid=s_enr.currvalFORUPDATE");
          System.out.println("ExecutedQuery");
          if(rset.next())
          {
          System.out.println("Fetchedrow");
          BLOBl_mapBLOB=((OracleResultSet)rset).getBLOB(1);
          FilebinaryFile=newFile("e:\\free\\jo.jpg");
          FileInputStreaminstream=newFileInputStream(binaryFile);
          intchunk=32000;

          System.out.println("Chunk="+chunk);

          byte[]l_buffer=newbyte[chunk];
          intl_nread=0;

          OracleCallableStatementcstmt=
          (OracleCallableStatement)conn.prepareCall("begindbms_lob.writeappend(:1,:2,:3);end;");
          cstmt.registerOutParameter(1,OracleTypes.BLOB);
          while((l_nread=instream.read(l_buffer))!=-1)
          {
          cstmt.setBLOB(1,l_mapBLOB);
          cstmt.setInt(2,l_nread);
          cstmt.setBytes(3,l_buffer);
          cstmt.executeUpdate();
          l_mapBLOB=cstmt.getBLOB(1);
          }
          instream.close();
          conn.commit();
          rset.close();
          stmt.close();
          conn.close();
          }
          }
          }
           

          二、BLOB值讀取的通用處理:
          這個(gè)jdbc標(biāo)準(zhǔn)接口可以直接調(diào)用,因此比較簡(jiǎn)單,如下所示:
          Connectioncon=ConnectionFactory.getConnection();
          con.setAutoCommit(false);
          Statementst=con.createStatement();
          ResultSetrs=st.executeQuery("selectcontentsfromBLOBIMGwhereid=1");
          if(rs.next()){
          java.sql.Blobblob=rs.getBlob(1);
          InputStreamins=blob.getBinaryStream();
          //輸出到文件
          Filefile=newFile("d:\\output.txt");
          OutputStreamfout=newFileOutputStream(file);
          //下面將BLOB數(shù)據(jù)寫入文件
          byte[]b=newbyte[1024];
          intlen=0;
          while((len=ins.read(b))!=-1){
          fout.write(b,0,len);
          }
          //依次關(guān)閉
          fout.close();
          ins.close();
          }
          con.commit();
          con.close();

          三、BLOB值寫入的通用處理:
           這時(shí)要借助于PreparedStatement的動(dòng)態(tài)綁定功能,借用其setObject()方法插入字節(jié)流到BLOB字段。
          publicvoidinsertFile(Filef)throwsException{
          FileInputStreamfis=newFileInputStream(f,Connectionconn);
          byte[]buffer=newbyte[1024];
          data=null;
          intsept=0;intlen=0;
          while((sept=fis.read(buffer))!=-1){
          if(data==null){
          len=sept;
          data=buffer;
          }else{
          byte[]temp;
          inttempLength;
          tempLength=len+sept;
          temp=newbyte[tempLength];
          System.arraycopy(data,0,temp,0,len);
          System.arraycopy(buffer,0,temp,len,sept);
          data=temp;
          len=tempLength;
          }
          if(len!=data.length()){
          bytetemp=newbyte[len];
          System.arraycopy(data,0,temp,0,len);
          data=temp;
          }
          }
          Stringsql="insertintofileData(filename,blobData)value(?,?)";
          PreparedStatementps=conn.prepareStatement(sql);
          ps.setString(1,f.getName());
          ps.setObject(2,data);
          ps.executeUpdate();
          }

          四.CLOB讀取的通用處理
          publicstaticStringgetClobString(ResultSetrs,intcol){
          try{
          Clobc=resultSet.getClob(2);
          Readerreader=c.getCharacterStream():
          if(reader==null){
          returnnull;
          }
          StringBuffersb=newStringBuffer();
          char[]charbuf=newchar[4096];
          for(inti=reader.read(charbuf);i>0;i=reader.read(charbuf)){
          sb.append(charbuf,0,i);
          }
          returnsb.toString();
          }catch(Exceptione){
          return"";
          }
          }


          當(dāng)然還可以直接編寫B(tài)LOB存取的存儲(chǔ)過(guò)程供JDBC調(diào)用,那也非常方便。不過(guò)可能要用到外部LOB類型。

          posted @ 2011-11-22 11:31 AthrunWang 閱讀(1002) | 評(píng)論 (0)編輯 收藏
          win7內(nèi)存優(yōu)化【轉(zhuǎn)】

          減少windows7內(nèi)存占用的優(yōu)化方案 (內(nèi)存占用才285兆 比XP還省)

          具體方法如下:

          控制面板-->管理工具-->服務(wù) 
          禁用服務(wù)有: 
          HomeGroup Listener(家庭組共享功能,關(guān)掉照樣用局域網(wǎng)) 
          HomeGroup Provider(同上) 
          Ip Helper(經(jīng)常訪問(wèn)IPv6站點(diǎn)的不要禁) 
          Media Center Extender Service 
          Print Spooler(有打印機(jī)的不要禁) 
          Program Compatibility Assistant Service (程序兼容問(wèn)題的診斷,禁不禁都可) 
          Remote Registry 
          Windows Defender(裝了殺毒軟件的話, 禁用) 
          Windows Error Reporting Service 
          Windows Media Player Network Sharing Service 
          控制面板-->管理工具-->任務(wù)計(jì)劃程序 
          任務(wù)計(jì)劃程序庫(kù)--Microsoft--Windows--Media Center下 
          禁用的計(jì)劃任務(wù)有: 
          DispatchRecoverTasks 
          ehDRMinit 
          mcupdate 
          mcupdate_scheduled 
          PeriodicScanRetry 
          RecordingRestart 
          ReindexSearchRoot 
          控制面板-->管理工具-->自動(dòng)播放 
          取消“為所有媒體和設(shè)備使用自動(dòng)播放”。 
          控制面板-->系統(tǒng)-->高級(jí)系統(tǒng)設(shè)置(高級(jí)) 
          性能-->設(shè)置(視覺效果) 
          改為選擇自定義. 
          只勾選以下幾項(xiàng): 
          平滑滾動(dòng)列表框 
          平滑屏幕字體邊緣 
          啟用透明玻璃 
          啟用桌面組合 
          顯示半透明的選擇長(zhǎng)方形 
          顯示縮略圖,而不是顯示圖標(biāo) 
          在窗口和按鈕上使用視覺樣式 
          在桌面上為圖標(biāo)標(biāo)簽使用陰影 
          注:win7開機(jī)時(shí)有很多服務(wù)是稍后運(yùn)行的,所以兩三分鐘之后再看內(nèi)存占用情況

          posted @ 2011-11-18 11:02 AthrunWang 閱讀(524) | 評(píng)論 (0)編輯 收藏
          java 寫文件時(shí),輸入換行字符.

          用String   crlf=System.getProperty( "line.separator "),這個(gè)crlf就是一個(gè)回車換行符,這樣跨OS也不用怕了。不建議用硬編碼如\r\n。

          posted @ 2011-11-18 10:49 AthrunWang 閱讀(155) | 評(píng)論 (0)編輯 收藏
          synchronized和java.util.concurrent.locks.Lock的異同

          主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能 .

          主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。

          posted @ 2011-11-18 10:48 AthrunWang 閱讀(151) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共8頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 8 下一頁(yè) 
          主站蜘蛛池模板: 和平县| 北票市| 宿迁市| 错那县| 蒲江县| 翼城县| 襄城县| 普定县| 犍为县| 西乡县| 德昌县| 会理县| 大关县| 岳池县| 邵东县| 宁安市| 周至县| 石泉县| 抚州市| 长子县| 大新县| 金华市| 岳普湖县| 陇南市| 清远市| 五家渠市| 开封县| 扎鲁特旗| 祁东县| 武定县| 庄河市| 陇川县| 东宁县| 龙南县| 自贡市| 张家界市| 怀柔区| 满洲里市| 周口市| 铜陵市| 二连浩特市|