﻿<?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-insomnia,politic,proficient ,sensible.-随笔分类-不明白纪录</title><link>http://www.blogjava.net/youngturk/category/20290.html</link><description>The world is a fine place , and worth fighting for it.</description><language>zh-cn</language><lastBuildDate>Fri, 21 Dec 2012 20:29:54 GMT</lastBuildDate><pubDate>Fri, 21 Dec 2012 20:29:54 GMT</pubDate><ttl>60</ttl><item><title>在Eclipse中反编译Class文件的方法</title><link>http://www.blogjava.net/youngturk/archive/2012/12/21/393314.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Fri, 21 Dec 2012 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/12/21/393314.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/393314.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/12/21/393314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/393314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/393314.html</trackback:ping><description><![CDATA[学习中，需要反编译Java的class文件。我的开发工具是windows xp+Eclipse3.2.2+MyEclipse。我找到了jad反编译工具，在互联网上找到了一些很有用的安装步骤。下面记录了我的安装过程。 
<p><strong>　　一、下载</strong></p>
<p>　　1。下载 jad 工具，在官方网站没有下载到，在CSDN上可以下载。</p>
<p>　　2。下载插件 net.sf.jadclipse_3.3.0.jar。</p>
<p><strong>　　二、安装</strong></p>
<p>　　1。安装jad工具。下载后解压，然后将解压后的jad.exe文件复制到%JAVA_HOME%\bin目录下面(可以将jad.exe放到任意位置，只要记住其存放路径就好，下面要用到)。</p>
<p>　　2。安装插件。Eclipse中的插件安装可以参考：Eclipse使用技巧(三)Eclipse中插件的安装。</p>
<p>　　我用复制的方法：直接把net.sf.jadclipse_3.3.0.jar拷贝到%ECLIPSE_HOME%\plugins目录下。</p>
<p>　　把使用link的方法拷贝到下面：建立D：\Myplugins\net.sf.jadclipse_3.3.0\eclipse\plugins的目录结构，将jadclipse_3.2.4.jar放到plugins目录下面(注：其中D：\Myplugins为你自己定义的一个专门放置插件的目录)。再在%ECLIPSE_HOME%\links目录下面建立一个net.sf.jadclipse_3.3.0.link文件(该文件名随便取)。文件里面内容为：path=D：/Myplugins/net.sf.jadclipse_3.3.0。</p>
<p><strong>　　三、配置</strong></p>
<p>　　1。启动Eclipse，打开Window-&gt;Preferences-&gt;Java-&gt;JadClipse，如果找到了JadClipse，即JadClipse插件被激活了。设置jad路径：</p>
<p>　　<img alt="" src="http://img1.51cto.com/attachment/201002/201002051265354776498.jpg" width="645" height="167" /></p>
<p>　　2。在Eclipse的Windows&#8212;&gt; Perference&#8212;&gt;General-&gt;Editors-&gt;File Associations中修改&#8220;*.class&#8221;默认关联的编辑器为&#8220;JadClipse Class File Viewer&#8221;。</p>
<p><strong>　　四、使用jad反编译</strong></p>
<p>　　1。在DOS窗口中，到class所在目录，直接运行 &gt;jad DB.class，将在该目录中生成DB.jad文件。运行 &gt;jad -sjava DB.class，将在该目录中生成DB.java文件</p>
<p>　　<img alt="" src="http://img1.51cto.com/attachment/201002/201002051265355718064.jpg" width="391" height="138" /></p>
<p>　　2。在Eclipse 工作台使用：</p>
<p>　　1)把class目录加入项目：(这一步许多文档都没有写到，花了我很多时间<img alt="" src="http://nihaiou.blog.51cto.com/editor/icons/etc_05.gif" width="19" height="19" />)</p>
<p>　　1.1)项目--〉属性--〉java buildpath--〉add class folder (如 a)--〉OK</p>
<p>　　1.2)a--〉import--〉General--&gt;File system--&gt;Browse--&gt;OK</p>
<p>　　2)双击class 文件，出现可爱的java文件，编译成功<img alt="" src="http://nihaiou.blog.51cto.com/editor/icons/etc_17.gif" width="19" height="19" />。</p>
<p>　　<img alt="" src="http://img1.51cto.com/attachment/201002/201002051265355380735.jpg" width="543" height="337" /></p>
<p><strong>　　五、批量反编译</strong></p>
<p>　　以下部分转载　菠萝大象的文章：</p>
<p>　　现在有人会说了，这样一个一个的看太麻烦了，我需要一次把一个JAR包下的所有class文件反编译成java源文件。这样的想法是可行的，还是使用jad工具。</p>
<p>　　3、批量反编译</p>
<p>　　因为之前我们已经将jad加入到了%JAVA_HOME%\bin中，只要配置了环境变量，我们就可以在命令行中方便的使用。在这里，大象还是以dom4j-1.6.1.jar为例来说明具体的操作步骤。</p>
<p>　　解压dom4j-1.6.1.jar和jaxen-1.1-beta-7.jar。为了方便，我将JAR包解压放到F盘根目录，在cmd中，进入到F盘根路径下，输入命令：jad -o -r -s java -d src org/**/*.class</p>
<p>　　我解释一下这些参数的含义：</p>
<p>　　-o：覆盖旧文件，而且不用提示确认。</p>
<p>　　-r：重新加载生成包结构。</p>
<p>　　-s：定义输出文件的扩展名。jad为默认扩展名，我们反编译后当然是要.java源文件了。</p>
<p>　　-d：输出文件的目录。src表示反编译后的所有文件都放在src目录下。</p><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " lang="EN-US" new="" times="">org/**/*.class</span><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " new="" times="">：<span lang="EN-US">org</span>是解压后的文件夹的名字，整个表示<span lang="EN-US">org</span>目录下的所有<span lang="EN-US">class</span>文件。你也可以写成这样<span lang="EN-US">**/*.class</span>，这表示当前目录及其子目录下所有的<span lang="EN-US">class</span>文件（包含所有的子目录）。</span><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " new="" times="">反编译<span lang="EN-US">dom4j-<ST1:CHSDATE isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">1.6.1</ST1:CHSDATE>.jar</span>必须得有<span lang="EN-US">jaxen-1.1-beta-7.jar</span>，因为<span lang="EN-US">dom4j</span>里面有对<span lang="EN-US">xpath</span>的调用，而这些东西都是引用<span lang="EN-US">jaxen</span>里的<span lang="EN-US">API</span>，如果不加则会有这样的错误：</span><br />&nbsp; 
<p sizcache07740589816272918="0" sizset="29"><a href="http://img1.51cto.com/attachment/201011/164826792.jpg" target="_blank" sizcache07740589816272918="0" sizset="29"><img border="0" alt="" src="http://img1.51cto.com/attachment/201011/164826792.jpg"  onchange onunload onselect onreset onsubmit /></a></p>
<div><br /><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " new="" times="">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000"><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " new="" times="">到此，关于反编译的内容全部说完了，不过我还想补充一点，有可能<span lang="EN-US">JAR</span>包中的<span lang="EN-US">class</span>文件不是老外的，而是我们自己写的，里面可能会有中文的情况，这时，虽然反编译通过了，但里面却是<span lang="EN-US">gb2312</span>形式的<span lang="EN-US">unicode</span>编码，因此我们还得做一个工作，将这些编码转换成中文。<br /></span><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " new="" times="">&nbsp;&nbsp;&nbsp;&nbsp;大象使用<span lang="EN-US">ant</span>脚本来完成这个工作，内容比较简单，加了注释，应该很好明白，脚本文件名为<span lang="EN-US">build.xml</span>，它放在<span lang="EN-US">src</span>目录下，和反编译所得的包处在同一层。</span></span></span><span style="font-family: 宋体; font-size: 10pt; mso-bidi-font-family: " new="" times=""><br /></span></div>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="GBK"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="decompile"</span><span style="color: #ff0000">&nbsp;basedir</span><span style="color: #0000ff">="."</span><span style="color: #ff0000">&nbsp;default</span><span style="color: #0000ff">="native2ascii"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义输出目录&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="build"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="build"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;清除输出目录&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="clean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${build}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;创建输出目录&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="init"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="clean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${build}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;编码转换&nbsp;reverse="true"为反向转换&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="native2ascii"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="init"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">native2ascii&nbsp;</span><span style="color: #ff0000">reverse</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;src</span><span style="color: #0000ff">="${basedir}"</span><span style="color: #ff0000">&nbsp;encoding</span><span style="color: #0000ff">="gb2312"</span><span style="color: #ff0000">&nbsp;dest</span><span style="color: #0000ff">="${basedir}/${build}"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span></div>
<div><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">&nbsp;&nbsp;&nbsp;&nbsp;有一个地方需要补充一下，在</span><span style="font-family: ; color: #0000ff; font-size: 10pt" lang="EN-US" courier="">native2ascii</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">元素中，</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">src</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">和</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">dest</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">这两个属性表示着路径。如果反编译后，</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">src</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">目录下，有多个不同的文件夹，这时使用</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">ant</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">来转换编码，请先想好要对哪些文件进行反编码；如果按上面的写法，将会把</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">src</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">目录下的所有文件夹中的所有文件进行反编码。假设，现在有</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">com</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">和</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">org</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">两个文件夹（其实是两个包），我只需要对</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">com</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">中的文件进行反编码，那么可以这样改写：</span><span style="font-family: ; color: navy; font-size: 10pt" lang="EN-US" courier=""><span style="color: #0000ff"><span style="font-family: ; font-size: 10pt" lang="EN-US" courier=""><span style="background-color: #ffffff"><span style="font-family: ; color: navy; font-size: 10pt" lang="EN-US" courier=""><span style="color: #0000ff"><span style="font-family: ; font-size: 10pt" lang="EN-US" courier="">src</span></span>=</span><span style="font-family: ; color: green; font-size: 10pt" lang="EN-US" courier="">"${basedir}/com" </span></span></span></span></span><span style="font-family: ; color: navy; font-size: 10pt" lang="EN-US" courier=""><span style="color: #0000ff"><span style="font-family: ; font-size: 10pt" lang="EN-US" courier=""><span style="background-color: #ffffff"><span style="font-family: ; color: navy; font-size: 10pt" lang="EN-US" courier=""><span style="color: #0000ff"><span style="font-family: ; font-size: 10pt" lang="EN-US" courier="">dest</span></span>=</span><span style="font-family: ; color: green; font-size: 10pt" lang="EN-US" courier="">"${basedir}/${build}/com"<br /></span></span></span></span></span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">&nbsp;&nbsp;&nbsp;&nbsp;其它的都不变。在</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">cmd</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">中进入到</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">src</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">路径下，输入</span><span style="font-family: ; color: black; font-size: 10pt" lang="EN-US" courier="">ant</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: " courier="">，回车。可以看到如下结果：</span><br /><br />&nbsp;</div>
<p sizcache07740589816272918="0" sizset="30"><a href="http://img1.51cto.com/attachment/201011/164847545.jpg" target="_blank" sizcache07740589816272918="0" sizset="30"><img border="0" alt="" src="http://img1.51cto.com/attachment/201011/164847545.jpg"  onchange onunload onselect onreset onsubmit /></a></p>
<div>&nbsp;</div>
<div>反编译的内容基本结束。</div><br /><img src ="http://www.blogjava.net/youngturk/aggbug/393314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-12-21 15:19 <a href="http://www.blogjava.net/youngturk/archive/2012/12/21/393314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE编程，存储过程，自学笔记（备份）转</title><link>http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 15 Nov 2012 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/391366.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/391366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/391366.html</trackback:ping><description><![CDATA[<p>--创建过程名称<br />--create procedure 存储过程名字 is begin<br />--create or replace procedure&nbsp; 如果有就替换掉<br />----------------------------------------------<br />案例1：<br />--创建一个表<br />create table mytest(name varchar2(30),passwd varchar2(30));<br />--创建过程<br />create procedure sq_pro1 is<br />begin<br />--执行部分<br />insert into mytest values('zgx','888666');<br />end；</p>
<p>-- / 斜线回车</p>
<p><br />----------------------------------------------<br />如何查看错误信息：<br />show error&nbsp; 回车</p>
<p>--调用存储过程<br />1.exec 过程名(参数1，2....);<br />2.call 过程名(参数1，2....);<br />---------------------------------------------------<br />set serveroutput on;打开输出选项<br />set serveroutput off;关闭输出选项<br />dbms_&nbsp; 是包名的意思！<br />案例2：<br />dbms_output.put_line('helloWorld');&nbsp; <br />-----------------<br />declare<br />&nbsp;v_ename varchar2(5);--定义字符串变量<br />begin<br />&nbsp;--into v_ename意思:把查询出来数据 赋值给 v_ename;&amp;no是执行的时候会弹出输入框<br />&nbsp;select ename into v_ename from emp where empno=&amp;no;<br />&nbsp;--||代表 连接符号；<br />&nbsp;dbms_output.put_line('用户名是：'||v_ename); <br />end;<br />-----------<br />案例3：<br />declare<br />&nbsp;v_ename varchar2(5);--定义字符串变量<br />&nbsp;v_sal number(7,2);--定义字符串变量<br />begin<br />&nbsp;--如果是多个字段，用逗号隔开，顺序必须一样！！<br />&nbsp;select ename,sal into v_ename,v_sal from emp where empno=&amp;no;<br />&nbsp;--||代表 连接符号；<br />&nbsp;dbms_output.put_line('用户名是：'||v_ename||'工资：'||v_sal); <br />end;<br />---------------------<br />--异常的捕获<br />exception<br />when no_data_found then --如果出现no_data_found异常就执行下一句<br />dbms_output.put_line('输入有误！');<br />end;<br />------------<br />过程：<br />案例4：<br />创建带输入参数的过程；<br />create procedure sp_pro3(spNma varchar2,newSal number) is<br />begin<br />&nbsp;update emp set sal=newSal where ename=spName;<br />end;<br />------------<br />函数：<br />函数用于返回特定的数据，当建立函数时，在函数头部要求有return语句；<br />案例5：<br />--输入雇员姓名，返回该雇员的年薪<br />--返回一个number类型；返回值名字是yearSal，类型是number(7,2);<br />create function sp_fun1(spName varchar2) return number is yearSal number(7,2);<br />begin<br />--执行部分<br />select sal*12+nvl(comm,0)*12 into yearSal from emp where enamee=spName;<br />return yearSal;<br />end;<br />调用函数中<br />--随便定义一个值<br />var abc number;<br />--掉用函数把结果赋值给 abc<br />call sp_fun1()'SCOTT' into:abc;<br />-------------<br />包<br />创建包：<br />--创建了一个包 sp_package<br />--声明该包里有一个过程update_sal<br />--生命该包里有一个函数annual_income<br />create package sp_package is<br />&nbsp;procedure update_sal(name,varchar2,newsal number);<br />&nbsp;function annual_income(name varchar2, return number;<br />end;<br />给包sp_package 实现包体--把定义包中的 过程和函数实现；<br />create package body sp_package is<br />procedure update_sal(name,varchar2,newsal number) is<br />begin<br />&nbsp;update emp set sal=newsal where ename=name;<br />end;<br />function annual_income(name varchar2)<br />return number isannual_salary number;<br />begin<br />select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;<br />return annual_salary;<br />end;<br />end;<br />--------------<br />调用包中的过程或函数<br />exec sp_package.update_sal('SCOTT','120');<br />---------------------<br />触发器<br />触发器是指隐含的执行的存储过程。当定义触发器时，必须要指定触发的时间和触发的操作，常用触发包括insert，pudate，delete语句，而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。<br />触发器是非常有用的，可维护数据库的安全和一致性。<br />---------<br />定义并使用变量<br />包括：<br />1.标量类型（scalar）<br />2.符合类型（）</p>
<p>---------<br />标量（scalar）-常用类型<br />语法：<br />identifier [constant] datatype [not null] [:=| default expr]<br />identifier:名称<br />constant：指定常量。需要指定它的初始值，且其值是不能改变的<br />datatype：数据类型<br />not null： 指定变量值不能为null<br />：= 给变量或是常量指定初始值<br />default 用于指定初始值<br />expr：指定初始值的pl/sql表达式，文本值、其他变量、函数等<br />------------<br />标量定义的案例<br />1.定义一个变长字符串<br />v_ename varchar2(10)<br />2.定义一个小数 范围 -9999.99~9999.99<br />v_sal number(6,2)<br />3.定义一个小数并给一个初始值为5.4 :=pl/sql的赋值号<br />v_sal2 number(6,2):=5.4<br />4.定义一个日期类型的数据<br />v_hiredate date;<br />5.定义一个布尔变量，不能为空，初始值为false<br />v_valid boolean not null default false;<br />---------------<br />如何使用标量<br />&nbsp;&nbsp; 定义好变量后，就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其他的编程语言，需要在等号前面加冒号(:=)</p>
<p>下面以输入员工号，显示雇员名称、工资、个人所得税(税率为0.03为例)。说明变量的使用，看看如何编写：</p>
<p>declare<br />c_tax_rate number(3.2):=0.03; --定义赋值<br />--用户名<br />v_ename varchar2(5);<br />v_sal number(7,2);<br />v_tax_sal number()7,2;<br />begin<br />--执行<br />select ename,sal into v_ename,v_sal from emp where empno=$no;<br />--计算所得税<br />v_tax_sal:=v_sal*c_tax_rate;<br />--输出<br />dbms_output.put_line('姓名是:'||v_ename||'工资：'||v_sal||'所得税：'||v_tax_sal);<br />end;<br />-----<br />标量（scalar）--使用%type类型<br />&nbsp;对于上面的pl/sql块有一个问题：<br />&nbsp;就是如果员工的姓名超过了5字符的话，就会有错误，为了降低pl/sql程序的维护工作量，可以使用%type属性定义变量，这样他会按照数据库列来确定你定义的变量的类型和长度。<br />看看怎么使用。<br />语法： 标识符名 表名.列名%type;</p>
<p>&nbsp;declare<br />&nbsp; v_ename emp.ename%type; --定义变量v_ename 和emp表中列名ename大小类型保持一致；<br />---<br />复合变量（composite）<br />用于存放多个值的变量。<br />包括：<br />1.pl/sql记录<br />2.pl/sql表<br />---------------<br />复合类型-pl/sql记录<br />&nbsp; 类似与高级语言的结构体，需要注意的是，当引用pl/sql记录成员时，必须要加记录变量作为前缀（记录变量.记录成员）<br />如下：<br />declare<br />--定义一个pl/sql记录类型是：emp_record_type，类型包括三个数据name，salary，title；该类型中可以存放三个类型的数据；<br />type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title&nbsp; emp.job%type);</p>
<p>--定义了一个sp_record变量，类型是emp_record_type<br />sp_record emp_record_type;</p>
<p>begin<br />select ename,sal,job into sp_record from emp where empno=7788;<br />dbms_output.put_line('员工名：'||sp_record.name); --显示定义emp_record_type类型中 name的值；<br />end;<br />end;<br />----------------<br />复合类型--pl/sql表<br />&nbsp;相当于高级语言中的数组。但是需要注意的是在高级语言中数组的下标不能为负数，而pl/sql是可以为负数的，并且表元素的下标没有限制。实例如下：<br />declare<br />--定义了一个pl/sql表类型sp_table_type，该类型是用于存放emp.ename%type类型的数组<br />--index by binary_integer标识下标是整数<br />type sp_table_type is table of emp.ename%type index by binary_integer;<br />--定义了一个sp_table变量，变量类型是sp_table_type<br />sp_table sp_table_type;<br />begin<br />--把查询出来的ename放到 table（0）下标为0的数据<br />select ename into sp_table(0) from emp where empno=7788;<br />dbms_output.put_lin('员工名：'||sp_table(0)); --要和存放下标一样<br />end;<br />说明：<br />sp_table_type&nbsp; 是pl/sql表类型<br />emp.ename%type 指定了表的元素的类型和长度<br />sp_table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为pl/sql表变量<br />sp_table(0)&nbsp;&nbsp;&nbsp; 表示下标为0的<br />---------------<br />参照变量<br />参照变量是指用于存放数值指针的变量。通过使用参照变量，可以使用得应用程序共享相同对象，从而降低占用的空间。在编写pl/sql程序时，可以使用游标变量和对象类型变量两种参照变量类型<br />游标变量用的最多<br />-----------<br />参照变量---游标变量<br />使用游标时，当定义游标时不需要指定相应的select语句，但是当使用游标时需要指定select语句，这样一个游标就与一个select语句结合了。<br />如下<br />1.请使用pl/sql编写一个块，可以输入部门号，并显示该部门所有员工姓名和他的工资。<br />declare<br />&nbsp;--定义游标类型<br />&nbsp;type sp_emp_cursor is ref cursor；<br />&nbsp;--定义一个游标变量<br />&nbsp;test_cursor sp_emp_cursor；<br />&nbsp;--定义变量<br />&nbsp;v_ename emp。ename%type；<br />&nbsp;v_sal emp。sal%type；<br />begin<br />--执行<br />--打开一个游标test_cursor和一个select结合<br />open test_cursor for select ename,sal from emp where deptno=&amp;no;<br />--循环取出<br />loop<br />&nbsp;--fetch就是取出。取出test_cursor中的数据放到 v_ename,v_sal里面去；<br />&nbsp;fetch test_cursor into v_ename,v_sal；<br />&nbsp;--判断是否test_cursor为空<br />&nbsp;exit when test_cursor%notfound；<br />&nbsp;dbms_output.put_line('名字：'||v_ename||'工资：'||v_sal);<br />end loop；<br />end；</p>
<p><br />2.在1。基础上，如果某个员工的工资低于200元，就增加100元。<br />declare<br />&nbsp;--定义游标类型<br />&nbsp;type sp_emp_cursor is ref cursor；<br />&nbsp;--定义一个游标变量<br />&nbsp;test_cursor sp_emp_cursor；<br />&nbsp;--定义变量<br />&nbsp;v_ename emp。ename%type；<br />&nbsp;v_sal emp。sal%type；<br />begin<br />--执行<br />--打开一个游标test_cursor和一个select结合<br />open test_cursor for select ename,sal from emp where deptno=&amp;no;</p>
<p>--循环取出<br />loop<br />&nbsp;--fetch就是取出。取出test_cursor中的数据放到 v_ename,v_sal里面去；<br />&nbsp;fetch test_cursor into v_ename,v_sal；<br />&nbsp;if v_sal&lt;200 then <br />&nbsp;update emp set sal=sal+100 where ename=v_ename;<br />&nbsp;end if;<br />&nbsp;--判断是否test_cursor为空<br />&nbsp;exit when test_cursor%notfound；<br />&nbsp;dbms_output.put_line('名字：'||v_ename||'工资：'||v_sal);<br />end loop；<br />end；</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>----------<br />条件分支语句<br />if--then，<br />if--then--else，<br />if--then--elsif--else</p>
<p>----<br />循环语句<br />loop --end loop；至少会执行一次。<br />create or replace procedure sp_pro6() is<br />--定义赋值<br />v_num number:=1;<br />begin<br />loop<br />&nbsp;insert into users1 values(v_num,spName);<br />&nbsp;--判断是否要退出循环<br />&nbsp;exit when v_num=10;<br />&nbsp;--自增<br />&nbsp;v_num:=v_num+1;<br />end loop;<br />end;</p>
<p><br />-------------<br />循环语句-while先判断后执行<br />create or replace procedure sp_pro6() is<br />--定义赋值<br />v_num number:=11;<br />begin<br />while v_num&lt;=20 loop<br />&nbsp;insert into users1 values(v_num,spName);<br />&nbsp;v_num:=v_num+1;<br />end loop;<br />end;<br />------------------<br />循环语句--for循环（不建议）<br />begin<br />&nbsp;for i in reverse 1。。10 loop<br />&nbsp;insert into users1 values（i，'aaa'）；<br />&nbsp;end loop;<br />end；<br />-------<br />循环语句--goto,null循环（不建议）<br />declare <br />&nbsp;i int:=1;<br />begin<br />&nbsp;loop<br />&nbsp;dbms_output.put_line('输出i='||i);<br />&nbsp;if i=10 then<br />&nbsp;goto end_loop;<br />&nbsp;end if;<br />&nbsp;i:=i+1;<br />&nbsp;end loop;<br />&nbsp;&lt;&lt;end_loop&gt;&gt;&nbsp; --到i到10后直接跳到该标记<br />dbms_output.put_line('循环结束');<br />end;<br />---------------------------<br />无返回值的存储过程（有输入参数）<br />&nbsp;<br />create table book(<br />&nbsp;bookId number;<br />&nbsp;bookName varchar2(100);<br />&nbsp;publishHouse varchar2(50);<br />);<br />--编写过程<br />--in表示这是一个输入参数，不写默认是in<br />--out 表示一个输出参数<br />create or replace procedure sp_pro7(spBookId in number，spbookName in varchar2,sppublishHouse in varchar2) is<br />begin<br />&nbsp;insert into book values(spBookId,spbookName,sppublishHouse);<br />end;</p>
<p>---------------<br />有返回值的存储过程（有输入和输出参数）</p>
<p>create or replace procedure sp_pro8(ename in number，spName out varchar2) is<br />begin<br />&nbsp;--spName自动返回 因为他是out<br />&nbsp;select ename into spName from emp where empno=spno;<br />end;<br />----------------<br />有返回值是集合数组的存储过程（有输入和输出参数）<br />1.建立一个包<br />--创建包 里面定义一个游标类型；<br />create or replace package testpackage as<br />type test_cursor is ref cursor;<br />end testpackage；<br />2.建立存储过程。<br />create or replace procedure sp_pro8(spNo in number，p_cursor out testpackage.test_cursor) is<br />begin<br />&nbsp;--spName自动返回 因为他是out<br />&nbsp;open p_cursor for select * from emp where deptno=spNo;<br />end;</p>
<p>－－－－－－－－－－－－<br />oracle的分页&nbsp; rn是别名<br />select t1.*，rownum rn from(select * from emp) t1;//多加一个列记录个数<br />select t1.*，rownum rn from(select * from emp) t1 where rownum&lt;10; <br />select * from (select t1.*，rownum rn from(select * from emp) t1 where rownum&lt;10) where rn&gt;=6;</p>
<p>编写oracle的分页 <br />--建立一个包<br />create or replace package testpackage as<br />type test_cursor is ref cursor;<br />end testpackage；<br />--建立存储过程<br />create or replace procedure fenye<br />(tableName in varchar2,<br />pageSize in number, --一页显示几条记录<br />pageNow in number,&nbsp; --显示哪一页<br />myrows out number, --总记录数<br />myPageCount out number,--总页数<br />p_cursor out testpackage.test_cursor --返回的记录集<br />) is<br />--定义部分<br />--定义sql语句 字符串<br />v_sql varchar2(1000);<br />--定义两个整数<br />v_begin number:=(pageNow-1)*pageSize+1;<br />v_end number:=pageNow*pageSize;<br />begin<br />--执行部分<br />v_sql:='select * from (select t1.*，rownum rn from(select * from '||tableName||') t1 where rownum&lt;10'||?||') where rn&gt;='||?||';';<br />--把游标和sql语句关联起来<br />open p_cursor for v_sql;</p>
<p>--计算myrows<br />v_sql:='select count(*) from '||tableName||'';<br />--执行sql，并把返回值，赋值给myrows;<br />execute immediate v_sql int myrows;<br />--计算myPagecount<br />if mod(myrows,pageSize)=0 then --mod()取余数<br />myPageCount:=myrows/pageSize;<br />else<br />myPageCount:=myrows/pagesize+1;<br />end if;</p>
<p>--关闭游标<br />--close p_cursor;<br />end;</p>
<p><br />------------------------<br />例外的分类<br />1.预定义例外用于处理常见的oracle错误<br />2.非预定义例外用于处理预定义例外不能处理的例外&nbsp; 6.53<br />3.自定义例外用于处理与oracle错误无关的其他情况</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />------------------------------------------------<br />-----------------------------------------------<br />-------ＪＡＶＡ中-调用无返回值的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用无返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?,?)}") // ?代表存储过程参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;cs.setString(2,'java调用存储过程');<br />&nbsp;cs.setString(3,'人民出版社');<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;<br />}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>------------------------------------------------<br />-----------------------------------------------<br />------ＪＡＶＡ中--调用有回值的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//第一个?输入参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;//给第二个？输出值赋值<br />&nbsp;cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出返回值,<br />&nbsp;String name=cs。getString(2);<br />&nbsp;System.out。println("名称是："+name);<br />}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>------------------------------------------------<br />-----------------------------------------------<br />-------ＪＡＶＡ中-调用有回值是多个 数组2011-12-5的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//第一个?输入参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;//给第二个？输出值赋值<br />&nbsp;cs.registerOutParameter(2,oracle.jdbc.OracleTypes.cursor); //类型是cursor游标<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出返回值（结果集）<br />&nbsp;ReaultSet rs=(ResultSet)cs.getObject(2); //2是第二？<br />&nbsp;while(rs.next())<br />&nbsp;{<br />&nbsp; int =rs。getInt(1); <br />&nbsp; String name=rs。getString(2);<br />&nbsp; System.out。println("名称是："+name);<br />&nbsp;<br />&nbsp;}</p>
<p>}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}<br />------------------------------------------------<br />-----------------------------------------------<br />------ＪＡＶＡ中--调用有回值的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//第一个?输入参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;//给第二个？输出值赋值<br />&nbsp;cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出返回值,<br />&nbsp;String name=cs。getString(2);<br />&nbsp;System.out。println("名称是："+name);<br />}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>------------------------------------------------<br />-----------------------------------------------<br />-------ＪＡＶＡ中-测试分页调用存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 分页存储过程名称(?,?,?,?,?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//?输入参数<br />&nbsp;cs.setString(1,'表名'); //表名<br />&nbsp;cs.setInt(2,5); //一页显示几条记录<br />&nbsp;cs.setInt(3,1); //显示第几页<br />&nbsp;//?输出参数<br />&nbsp;//注册总记录数<br />&nbsp;cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);<br />&nbsp;//注册总页数<br />&nbsp;cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);<br />&nbsp;//注册返回的结果集<br />&nbsp;cs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR); //类型是cursor游标</p>
<p>&nbsp;<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出总记录数<br />&nbsp;int rowNum=cs.getInt(4);//4表示参数中第四个？<br />&nbsp;//总页数<br />&nbsp;int pageCount=cs.getInt(5);<br />&nbsp;//返回的记录结果<br />&nbsp;ReaultSet rs=(ResultSet)cs.getObject(6);<br />&nbsp;while(rs.next())<br />&nbsp;{<br />&nbsp; int =rs。getInt(1); <br />&nbsp; String name=rs。getString(2);<br />&nbsp; System.out。println("名称是："+name);<br />&nbsp;<br />&nbsp;}</p>
<p>}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>A . 嵌套表 </p>
<p>1. 声明数组类型 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 </p>
<p>2. 创建存储过程 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 该例子存储过程是在包中创建的,包名 arraydemo <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure testArray(resNumber in tab_array,procResult out tab_array) is <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procResult := new tab_array(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i in 1..resNumber.Count loop <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procResult.EXTEND; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procResult(i) := resNumber(i) || 'lucifer' || i; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end loop; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; </p>
<p>3. Java调用代码 <br />&nbsp;&nbsp;&nbsp; //必须使用Oracle的连接和Statement,使用了连接池的必须通过一些方法获取原始的连接 <br />&nbsp;&nbsp;&nbsp; OracleConnection conn = null; <br />&nbsp;&nbsp;&nbsp; OracleCallableStatement stmt = null; <br />&nbsp;&nbsp;&nbsp; String[] param = { "1001", "1002", "1006" }; <br />&nbsp;&nbsp;&nbsp; stmt =(转换类型) conn.prepareCall("{call arraydemo.testArray(?,?)}"); <br />&nbsp;&nbsp;&nbsp; // 类型名必须大写 <br />&nbsp;&nbsp;&nbsp; ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn); <br />&nbsp;&nbsp;&nbsp; stmt.setARRAY(1, new ARRAY(descriptor,conn,param)); <br />&nbsp;&nbsp;&nbsp; stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY"); <br />&nbsp;&nbsp;&nbsp; stmt.execute(); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ARRAY array = stmt.getARRAY(2); <br />&nbsp;&nbsp;&nbsp; Datum[] data = array.getOracleArray(); <br />&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; data.length; i++) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(i + " : " + new String(data.shareBytes())); <br />&nbsp;&nbsp;&nbsp; } <br />4 . 注意的问题及尚未解决的问题 <br />&nbsp;&nbsp;&nbsp; 抛出:Non supported character set: oracle-character-set-852 异常---解决:添加 nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录下 <br />&nbsp;&nbsp;&nbsp; 待解决问题: <br />&nbsp;&nbsp;&nbsp; a) 如何调用在包声明的自定义类型 <br />&nbsp;&nbsp;&nbsp; b) 比较不同声明类型的优缺点,及使用场合 <br />&nbsp;&nbsp;&nbsp; 嵌套表其它应用:http://zhouwf0726.itpub.net/post/9689/212253 </p>
<p>B . 索引表 <br />C . 内置数组 <br />D . 游标方式</p><img src ="http://www.blogjava.net/youngturk/aggbug/391366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-11-15 11:28 <a href="http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sap是什么</title><link>http://www.blogjava.net/youngturk/archive/2007/05/04/115321.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Fri, 04 May 2007 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2007/05/04/115321.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/115321.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2007/05/04/115321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/115321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/115321.html</trackback:ping><description><![CDATA[<p>??</p>
<img src ="http://www.blogjava.net/youngturk/aggbug/115321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2007-05-04 15:54 <a href="http://www.blogjava.net/youngturk/archive/2007/05/04/115321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不明白</title><link>http://www.blogjava.net/youngturk/archive/2007/03/02/101522.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Fri, 02 Mar 2007 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2007/03/02/101522.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/101522.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2007/03/02/101522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/101522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/101522.html</trackback:ping><description><![CDATA[
		<p>int 转换为String?<br />var表示右边任何类型。<br /><font size="3">当把一个connection设为setAutoCommit(false),它只能产生一个preparedStatement。<br />摆脱尴尬的集中场合和几种方式？<br /></font></p>
		<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 id="Code_Closed_Image_111845" onclick="this.style.display='none'; Code_Closed_Text_111845.style.display='none'; Code_Open_Image_111845.style.display='inline'; Code_Open_Text_111845.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" />
				<img id="Code_Open_Image_111845" style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_111845.style.display='none'; Code_Closed_Image_111845.style.display='inline'; Code_Closed_Text_111845.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" />
				<span id="Code_Closed_Text_111845" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">保留小数点位数</span>
				<span id="Code_Open_Text_111845" style="DISPLAY: none">
						<br />
						<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
						<span style="COLOR: #008080">1</span>
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #000000">DecimalFormat df </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> DecimalFormat(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">###.###</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080">2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Double d2 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> Double.valueOf(df.format(d1));<br /></span>
						<span style="COLOR: #008080">3</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> d2.doubleValue();</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/youngturk/aggbug/101522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2007-03-02 17:49 <a href="http://www.blogjava.net/youngturk/archive/2007/03/02/101522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>