Oracle CLOB/BLOB empty和null是不一样的

如何判断某LOB字段当前值是empty还是null?

select length(lob_col_name) from table where xxx;

如果是empty, 返回0, 是null的话, 返回null.

怎么在sqlplus中 insert empty lob?

insert empty_clob() into table(lob_col_name) 

insert empty_blob() into table(lob_col_name) 

怎么在JDBC中insert empty lob?

statement.setClob(index, oracle.sql.CLOB.getEmptyCLOB())

statement.setBlob(index, oracle.sql.CLOB.getEmptyBLOB())

怎么在JDBC中判断是 null Clob 还是 empty Clob?

无论是Oracle的CLOB.isEmptyLob还是JDBC的Clob.isEmptyLob都不靠谱, 需要用 Clob.length==0来判断, 需要注意: 是 length() 函数, 而不是 getLength() 函数  

if(value.isEmptyLob() || value.length()==0){

}

判断是否是 null, 直接用 JDBC的 Resulset.wasNull函数就可以了

我的环境是: Oracle 10G, ojdbc6.jar

smithfox Wednesday 27 April 2011 at 4:04 pm | | Java | Two comments

代替Toad和plsql developer的免费软件 tora

Home: http://torasql.com/    只有11M大小.

在windows, 下载一个oracle instance client包  http://www.oracle.com/technetwork/topics/winsoft-085727.html

比如 unzip 到  D:\oracle   作为instance client根目录,

需要设置 两个系统环境变量:

ORACLE_HOME=D:\oracle

Path=xxxxxx;%ORACLE_HOME%

TNS_ADMIN=%ORACLE_HOME%\network\admin

最后将tora安装目录下的oci.dll删除(或是更名)

将平时到到的数据库tns全部配置在 %ORACLE_HOME%\network\admin\tnsnames.ora文件中, 就可以开始用tora.

smithfox Wednesday 27 April 2011 at 3:54 pm | | other | Four comments
Used tags: , ,

[备忘] swf swc swz RSLs ant

[本文原创链接: http://www.smithfox.com/?e=135 , 转载请保留此声明, 谢谢 ]

只要做Flex项目, 终有一天你要涉及到RSLs, 要和swf, swc, swz文件打交道. 希望这篇文章能帮助大家理清楚这些文件的用途和关系.

RSLs全称是Runtime Shared Libraries, 可见RSL就是"库", 它是Adobe flash平台的二进制模块化技术, 目的类似于动态链接库(DLL, so), 但实现技术的细节是完全不一样. 本文先介绍几种文件格式, 再介绍用Ant编译swc,swf文件时的要点和一些注意事项.

Read More

smithfox Thursday 21 April 2011 at 9:58 pm | | UI | Eight comments
Used tags: , , , ,

[思考] 我的flex code是在补data-drive的破洞吗?

因为 zrong 的comments, 使我想到: 之前的内容严重偏题, 所以将tree的例子删除了, 并且对 "破洞" 的例子加了更加详细的说明.

这篇文章写了很长时间了, 一直没有发表, 感觉很幼稚. "我的地盘我做主" , 所以就发了, 哈哈!!

Flex高举 "绝对纯粹的Model和View的分离" 大旗, 让人有一种 "这个世界终于清静了"的感觉.

再也不用象传统JSP/PHP/ASP那样 "UI标签和业务数据混杂在一起" 由后台推送到前台了, 而且比Ajax使用起来更舒服!

然而, Flex将所有的官方组件都做成了 "一切由data来驱动view". 可能又走向了另一个极端!

Read More

smithfox Wednesday 20 April 2011 at 9:11 pm | | UI | Five comments

[备忘] 从客户端看 ORA-01555 问题

[本文原创链接: http://www.smithfox.com/?e=133 , 转载请保留此声明, 谢谢 ]

有关 Oracle的经典错误 ORA-01555 ,  网上已经有许多的文章了, 不过大都是从DBA的角度来看这个问题的, 内容主要是介绍原理和后台解决方案. 本文是作为一个Oracle的client访问者角度去考虑问题. 一个client, 没有权限去改后台的配置, 有时候连查看后台Server的设置都比较麻烦. 一个client, 必须了解ORA-01555对client的影响细节是什么, 才能决定怎样去从client端尽量避免这个问题.

Read More

smithfox Wednesday 20 April 2011 at 11:28 am | | other | Three comments
Used tags: , , ,

[思考] 设计模式 or 问题模式 ?

[本文为 http://www.smithfox.com/?e=132 原创的一点思考, 转载请保留此声明]

设计模式?! 惭愧! 到现在, 我也记不全23种GoF设计模式, 在实际工作中应用, 又能对的上号的也就6,7种. 更可怕的是, 在面试中经常问到的 "类工厂" 模式, 我到现在都没有用过.

跳过这个让人尴尬的问题, 给大家介绍一个工作方式, www:

Read More

smithfox Friday 15 April 2011 at 5:30 pm | | other | Six comments

[备忘] MXML中正则表达式的expression需要转义

比如想: 数字, 字母, 以及 下划线为合法输入, 并且输入长度限定: 最少1, 最长8

这样不行:

<mx:RegExpValidator source="{fitem_hostname}" flags="g" property="text" expression="^\w{1,8}$" />

这样才行:

<mx:RegExpValidator source="{fitem_hostname}" flags="g" property="text" expression="^\w\{1,8\}$" />

()[] | 都不用转义, 只有 {}需要

提醒: 只是在MXML文件中写代码时需要做reg expression的转义, 如果你的 reg expression是和某个 textInput.text 绑定, 运行时从编辑框中输入的, 那么不需要转义, 因为那时已经和MXML文件没有关系了.这也是 网上很多的 flash做的 正则表达式验证器 没有做转义,也可以正常工作的原因.

AS3文件我没有做验证, 不过从MXML一惯的表现来看, 我想应该AS3不需要转义. 毕竟AS3是Adobe自己定义的语法, 而MXML必须遵守 XML 的限制.

附送一个非常有用的 AS3正则表达式 tester   http://www.gskinner.com/RegExr/ , 上面有很多来自社区的非常有用的常见的表达式, 你自己还可以提交, 还可以给别人的 reg打分

smithfox Thursday 14 April 2011 at 10:04 am | | UI | Five comments

[备忘] AS3中String转换成Boolean

AS3中String转换成Boolean的规则和Java不一样, 最可靠的方法是:

var s:String="true";

var f:Boolean = (s=="true");//这个判断符合绝大部分程序业务逻辑: str为null, 为空, 或是任何非 "true"都表示 false

仅做if判断也需要这样   if( s=="true" )

下面都不行:

var f:Boolean = new Boolean(str);

var f:Boolean = str as Boolean;

AS3中, 对布尔值的转换, 规定所有的非空字符串都是true. (谢谢zrong!)

smithfox Wednesday 13 April 2011 at 11:10 am | | UI | Six comments

[备忘] Java和C之间的通讯

Java和C之间完全可以用二进制报文通讯, 只要注意几点, 就不必担心 String, Int类的组装和解析问题.

Read More

smithfox Friday 08 April 2011 at 10:00 am | | Java | Six comments
Used tags: , ,

[思考] snapshot and replication

snapshot在各个领域都有类似的概念. 

当讨论设计一个系统时, 尤其是需要提高效率的系统时, 往往会提出snapshot, 大家都会想到snapshot的好处.

但是我发现一个很有意思的现象是: 大家很容易忽略snapshot的前提: copy-on-write. 这种机制的说白了就是:
平时就将snapshot一点一点copy好, 到你用的时候当然很快.

这点很象一个社会现象:  大家只看到某位成功人士的光环, 却完全忽略了这个同学很多年的辛苦努力.

Read More

smithfox Thursday 07 April 2011 at 5:28 pm | | other | Six comments
Used tags: ,

[思考] 广义继承的本质是default

说明: 一切的 "思考" 的前提都是 "我认为"

OOP的 inherit 已经非常熟悉了, 我问自己: 继承解决的最本质的问题是什么? 是复用吗?

事实证明: 想着复用(下个版本复用, team内复用, 公司复用, 更广泛的复用)的东西, 绝大部分都不会被复用.

有多少东西的设计原始目的就是冲着复用来的? 

从实用的角度出发, 我认为继承的本质应该是 "default", 将复用作为继承的亮点宣传, 给我的感觉就是OOP的广告词!

Read More

smithfox Wednesday 06 April 2011 at 4:08 pm | | other | Five comments

闭包的理解

在网上看了半天关于闭包的解释, 还是一团雾水. 都是扯什么匿名函数, first class, 作用域.

其实我只想知道 闭包 能解决什么问题, 终于在IBM develop上看到两篇文章说的比较清楚一点, 总结一下备忘

Read More

smithfox Friday 01 April 2011 at 5:38 pm | | Java | Six comments
Used tags: ,

为什么callback 要比 event 消耗更少的内存

event的冒泡机制, 会在冒泡的各个阶段生成不同的event对象, 是通过调用Event类(或是自定义的Event类)的clone方法.

这样做的原因是, 首先event内部需要改currentTarget对象, 如果事件整个阶段只有一个Event对象就不行了.

而且Event对象会被传到用户自定义的侦听器事件处理中, 如果只有一个Event对象, 则无法预知用户将会怎么改动Event对象, 这将对事件后面的传播带来不可预知的影响.

smithfox Friday 01 April 2011 at 11:33 am | | UI | Two comments
Used tags: , ,