2007-06-29

在Ibatis中调用存储过程或存储的函数。
和调用sql语句不同的是需要设置入参和出参
这篇文章已经说的很详细了。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=28107
可是我配置的时候确怎么也得不到正确的结果,错误大致是“记录数太多”,查询了很多资料才发现原来Ibatis2.2之前是不支持存储过程返回CURSOR,所以请需要使用Ibatis调用存储过程并且获取记录集游标的同学注意了。下面帖一个我的配置:
-----------------------------------------------
<!-- 获取用户列表 -->
<resultMap id="rm_out_getUserList" class="java.util.HashMap">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="gname" column="gname" />
<result property="cname" column="cname" />
</resultMap>
<parameterMap id="pm_in_getUserList"
class="java.util.Map">
<parameter property="result" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="rm_out_getUserList" />
<parameter property="p_name" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN" />
<parameter property="p_gname" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN" />
<parameter property="p_cname" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN" />
</parameterMap>
<procedure id="getUserList"
parameterMap="pm_in_getUserList">
{? = call PCK_USER.F_GET_USER(?,?,?)}
</procedure>
----------------------------------------------
绿色部分要注意(配置的第一行),如果是要将结果集以map形式返回,一定要写HashMap。
google的document又变样子了.
左侧是一个树形的文件管理,右侧的主要部分列出了已有文件,顶部是一条菜单,越来越像一个资源管理器了!

2007-06-22

Ibatis中如何调用oracle存储的函数
如在oracle中有个package叫做PCK_VIEW,在PCK_VIEW里面有个F_GET_SITESNAPSHOT_TIME的函数有一个varchar2参数
-------------------------------------------
function F_GET_PARTNER_LIST(p_tmp varchar2)
return RecordSet
is
l_rs RecordSet;
begin
open l_rs for select partner from T_PARTNER order by UPPER(partner) asc;
return l_rs;
end F_GET_PARTNER_LIST;
-------------------------------------------
在ibatils里面配置调用是{ call PCK_VIEW.F_GET_SITESNAPSHOT_TIME(?) }
我确定参数都配置好了,但是调用的时候还是报错啊
-------------------------------------------
--- The error occurred in com/phoenixtv/stat/dao/ibatis/sql/realtime.xml. --- The error occurred while applying a parameter map. --- Check the stat.realtime.pm_in_getSiteSnapshotTime. --- Check the statement (update procedure failed). --- Cause: java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00221: 'F_GET_SITESNAPSHOT_TIME' is not a procedure or is undefined ORA-06550: line 1, column 7:
-------------------------------------------
怎么回事,明明数据库有这个函数啊?
但是我在jdbc中这段代码确可以调用
-------------------------------------------
Class.forName("oracle.jdbc.driver.OracleDriver");
conn =DriverManager.getConnection("jdbc:oracle:thin:@111.111.111.111:1521:stat","pass","pass");



//conn = DBConnection.ins.getConn("jdbc/StatDB");sdf.format(new Date())+1
//conn = DBConnection.ins.getConn("statistic");

cs = conn.prepareCall("{? = call PCK_VIEW.F_GET_SITESNAPSHOT_TIME(?)}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.setString(2,"");
cs.execute();
rs =(ResultSet) cs.getObject(1);
--------------------------------------------

2007-05-18

gmail中又添新服务了

gmail中又添新服务了。


在more下面列出了更多的服务,可以尝试一下哦。

2007-05-11

如何在IBatis中使用BLOB和CLOB

下面有一个例子在Ibatis中使用Custom Type Handler (CTH)操作BLOB(二进制字节)和CLOB(字符类型)数据类型。Ibatis2.09后提供了对BLOB和CLOB的支持,下面的例子是oracle上的但也可以用于任何支持Jdbc的数据库。如果用oracle你需要使用最新的ojbc14.jar。

创建表:
Report.sql
REPORT {
id varchar2(5),
name varchar2(25),
description varchar2(1000),
data BLOB
}

创建表对应的POJO:

Report.java
/*
* Report.java
*
* Created on March 23, 2005, 11:00 AM
*/
package reporting.viewer.domain;

/**
*
* @author Nathan Maves
*/
public class Report {

/**
* Holds value of property id.
*/
private String id;
/**
* Holds value of property name.
*/
private String name;
/**
* Holds value of property description.
*/
private String id;
/**
* Holds value of property data.
*/
private byte[] data;


//Standard accessors and mutators

public byte[] getData() {
return this.data;
}

public void setData(byte[] data) { this.data = data; }
}

iBatis配置文件:

Report.xml
<typeAlias alias="Report" type="reporting.viewer.domain.Report"/>

<resultMap class="Report" id="ReportResult"> <result column="id" property="id" /> <result column="name" property="name" /> <result column="description" property="description" /> <result column="data" property="data" jdbcType="BLOB"/> </resultMap>

<select id="getReportById" parameterClass="string" resultMap="ReportResult">
SELECT
*
FROM
REPORT
WHERE
id = #value#
</select>

<insert id="insertReport" parameterClass="Report">
INSERT INTO
REPORT (
id,
name,
description,
data
)
values (
#id#,
#name#,
#description#,
#data#
)
</insert>

<update id="updateReport" parameterClass="Report">
UPDATE REPORT set
name = #name#,
description = #description#,
data = #data#
WHERE
id = #id#
</update>
就这么多ok。
更多请看http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+use+a+BLOB+or+CLOB

svchost.exe占CPU 100%的解决方法


现象:

  1. 机器启动运行几分钟后 svchost.exe就会占系统cpu资源的100%
  2. 拔掉网线就好了,重连上网后一会儿:svchost.exe又占cpu资源的99%;

解决:

假设你已经使用了免费杀毒软件排除了病毒和已经使用防间谍软件排除了恶意软件的影响:
想办法清空C:WINDOWSSoftwareDistribution 目录下所有的文件重启机器即可
。

如果机器提示文件正在使用("Automatic Updates"服务正在运行)无法删除相应目录:

  • 则想办法打开控制面板==>管理工具==>服务,找到"Automatic Updates",设置成手动启动,
  • 重启后再删除 C:WINDOWSSoftwareDistribution。问题就解决了。
  • 然后再打开控制面板==>管理工具==>服务,找到"Automatic Updates",恢复成自动启动重启。

注意:重启后最好在上网条件比较好的地方让系统顺利完成一次系统自动更新。

推广: 遇到类似问题的应该挺多的,如果你也发现这个方法有用,请将 http://www.chedong.com/blog/archives/001286.html
这个链接加到你的blog里。
html代码: <a xhref="http://www.chedong.com/blog/archives/001286.html">svchost.exe</a>

原因分析:

先说说什么是svchost.exe:简单的说没有这个服务机器几乎就上不了网了。很多应用服务都是以来于这个接口RPC的,如果发现这个进程占了太多的CPU资源,

直接把系统的RPC服务禁用了会是一场灾难:因为连恢复这个界面的系统服务设置界面都无法使用了。恢复的方法需要使用注册表编辑器,找到 HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services >> RpcSs, 右侧找到Start属性,把它的值改为2再重启即可

造成svchost占系统CPU 100%的原因并非svchost服务本身:以上的情况是由于Windows Update服务下载/安装失败而导致更新服务反复重试造成的。而Windows的自动更新也是依赖于svchost服务的一个后台应用,从而表现为svchost.exe负载极高。 常发生这类问题的机器一般是上网条件(尤其是去国外网站)不稳定的机器,比如家里的父母的机器,往往在安装机器几个月以后不定期发生,每个月的第二个星期是高发期:因为最近几年MS很有规律的在每个月的第二个星期发布补丁程序)。

上面的解决方法并不能保证不重发作,但是为了svchost文件而每隔几个月重装一次操作系统还是太浪费时间了。

教训:spoolsv.exe和svchost.exe的问题都是应用遇到失败/例外情况后自动重试造成的,本想为用户节省时间的设计,但是重试的频度过高反而导致了和病毒一样的效果。

参考资料:

2007-04-28

股票&烧饼

先帖一段

------------------------------------

假设一个市场,有两个人在卖烧饼,有且只有两个人,姑且称他们为烧饼甲、烧饼乙。
假设他们的烧饼价格没有物价局监管。
假设他们每个烧饼卖一元钱就可以保本(包括他们的劳动力价值)
假设他们的烧饼数量一样多。
——经济模型都这样,假设需要很多。
再假设他们生意很不好,一个买烧饼的人都没有。这样他们很无聊地站了半天。
甲说好无聊。
乙说好无聊。
看故事的你们说:好无聊。
这个时候的市场叫做很不活跃!
为了让大家不无聊,甲对乙说:要不我们玩个游戏?乙赞成。
于是,故事开始了。。。。。。
甲花一元钱买乙一个烧饼,乙也花一元钱买甲一个烧饼,现金交付。
甲再花两元钱买乙一个烧饼,乙也花两元钱买甲一个烧饼,现金交付。
甲再花三元钱买乙一个烧饼,乙也花三元钱买甲一个烧饼,现金交付。
。。。。。。

于是在整个市场的人看来(包括看故事的你)烧饼的价格飞涨,不一会儿就涨到了每个烧饼60元。但只要甲和乙手上的烧饼数一样,那么谁都没有赚钱,谁 也没有亏钱,但是他们重估以后的资产“增值”了!甲乙拥有高出过去很多倍的“财富”,他们身价提高了很多,“市值”增加了很多。
这个时候有路人丙,一个小时前路过的时候知道烧饼是一元一个,现在发现是60元一个,他很惊讶。
一个小时以后,路人丙发现烧饼已经是100元一个,他更惊讶了。
又一个小时以后,路人丙发现烧饼已经是120元一个了,他毫不犹豫地买了一个,因为他是个投资兼投机家,他确信烧饼价格还会涨,价格上还有上升空间,并且有人给出了超过200元的“目标价”(在股票市场,他叫股民,给出目标价的人叫研究员)。
在烧饼甲、烧饼乙“赚钱”的示范效应下,甚至路人丙赚钱的示范效应下,接下来的买烧饼的路人越来越多,参与买卖的人也越来越多,烧饼价格节节攀升,所有的人都非常高兴,因为很奇怪:所有人都没有亏钱。。。。。。
这个时候,你可以想见,甲和乙谁手上的烧饼少,即谁的资产少,谁就真正的赚钱了。参与购买的人,谁手上没烧饼了,谁就真正赚钱了!而且卖了的人都很后悔——因为烧饼价格还在飞快地涨。。。。。。
那谁亏了钱呢?
答案是:谁也没有亏钱,因为很多出高价购买烧饼的人手上持有大家公认的优质等值资产——烧饼!而烧饼显然比现金好!现金存银行能有多少一点利息啊?哪比得上价格飞涨的烧饼啊?甚至大家一致认为市场烧饼供不应求,可不可以买烧饼期货啊?于是出现了认购权证。。。。。。
有人问了:买烧饼永远不会亏钱吗?看样子是的。但这个世界就那么奇怪,突然市场上来了一个叫李子的,李子曰:有亏钱的时候!那哪一天大家会亏钱呢?
假设一:市场上来了个物价部门,他认为烧饼的定价应该是每个一元。(监管)
假设二:市场出现了很多做烧饼的,而且价格就是每个一元。(同样题材)
假设三:市场出现了很多可供玩这种游戏的商品。(发行)
假设四:大家突然发现这不过是个烧饼!(价值发现)
假设五:没有人再愿意玩互相买卖的游戏了!(真相大白)
如果有一天,任何一个假设出现了,那么这一天,有烧饼的人就亏钱了!那谁赚了钱?就是最少占有资产——烧饼的人!
----------------------------------------------