当柳上原的风吹向天际的时候...

真正的快乐来源于创造

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

2009年8月24日 #

人生转轨中,此博使命结束,今后停止更新此博。

何杨

2013年8月7日23:22:32
posted @ 2013-08-07 23:23 何杨| 编辑 收藏

加字段用这个,CS.TG表名,LINE2_TYPE字段名,CHAR(1)字段类型
ALTER TABLE CS.TG ADD COLUMN LINE2_TYPE CHAR(1);

要是加错了用以下语句删除:
alter table CS.TG drop column LINE2_TYPE;

删完了再更新或查询可能会遇到这个
DB2 sqlstate 57016 原因码 "7"

不用怕,也好解决
首先打开一个db2admin控制台
执行以下命令:
db2 connect to DBName user XXX 之后输入密码
然后输入:
db2 reorg table CS.TG
就OK了。

posted @ 2013-07-23 16:37 何杨 阅读(2261) | 评论 (0)编辑 收藏

// 首先与DB2数据建立连接(如:数据库名为dbname)
db2 connect to KOUE231 user ci2 using db2adin3

// 将del文件(如:数据文件名为T1.del,存放在c盘根目录下)导入到数据中指定的table中(如:table名为T1)
db2 import from c:\T1.del of del insert into T1
db2 import from c:\T2.del of del insert into T2
db2 import from c:\T3.del of del insert into T3
db2 import from c:\T4.del of del insert into T4
posted @ 2013-07-16 20:07 何杨 阅读(446) | 评论 (0)编辑 收藏

http://guanzhilibai.blog.163.com/blog/static/13587993201171953537784/

SQL3001C
打开输出文件时,发生 I/O 错误(原因 = 原因)。
SQL3002C
写入输出数据文件时,发生了 I/O 错误。
SQL3003C
关闭输出数据文件时,发生了 I/O 错误。
SQL3004N
filetype 参数无效。
SQL3005N
处理被中断。
SQL3006C
打开消息文件时,发生了 I/O 错误。
SQL3007C
写入消息文件时,发生了 I/O 错误。
SQL3008N
实用程序在连接到数据库时遇到了错误 错误。
SQL3009N
“操作字符串”参数无效或者太长。
SQL3010N
METHOD 参数无效。
SQL3011C
没有足够存储空间来处理此命令。
SQL3012C
发生了系统错误。
SQL3013N
filetmod 的长度超出可接受的范围。它应大于或等于 0 且小于或等于 8000。
SQL3014C
关闭消息文件时,发生了 I/O 错误。
SQL3015N
处理期间发生 SQL 错误 sqlcode。
SQL3016N
在文件类型的 filetmod 参数中找到意外的关键字 关键字。
SQL3017N
定界符无效,或使用多次。
SQL3018N
指定了句点作为字符串定界符。
SQL3019N
未在命令中指定“操作字符串”参数。
SQL3020N
用户无权运行指定的 Export 命令。
SQL3021N
用户无权对表 名称 运行指定的 Import 命令。
SQL3022N
处理“操作字符串”参数中的 SELECT 字符串时发生 SQL 错误 sqlcode。
SQL3023N
数据库名称参数无效。
SQL3024N
打开格式文件时,发生了 I/O 错误。
SQL3025N
指定文件名或路径的参数无效。
SQL3026N
msgfile 或 tempfiles 路径参数无效。
SQL3027N
读取格式文件时发生了 I/O 错误。
SQL3028N
导出方法指示符无效。它必须是“N”或“D”。
SQL3029N
未指定 filetype 参数。
SQL3030C
打开输入文件时,发生 I/O 错误(原因 = 原因)。
SQL3031C
读输入文件时,发生了 I/O 错误。
SQL3032N
LOAD/IMPORT 方法指示符对指定的文件类型无效。它必须是“N”、“P”或“缺省值”。
SQL3033N
目标规范中丢失诸如 INSERT、REPLACE、CREATE、 INSERT_UPDATE 或 REPLACE_CREATE 之类的关键字,或关键字拼写错误。
SQL3034N
目标规范中丢失关键字 INTO,或关键字拼写错误。
SQL3035N
目标规范中的 tablename 参数无效。
SQL3036N
目标规范中的 tcolumn-list 没有右圆括号。
SQL3037N
Import 处理期间发生 SQL 错误 sqlcode。
SQL3038N
“操作字符串”参数包含意外的字符。
SQL3039W
可供 DATA BUFFER 的 LOAD 使用的内存禁止完全 LOAD 并行性。将使用装入并行性 值。
SQL3040N
实用程序无法使用 选项名 参数中指定的文件名 文件名。原因码:原因码。
SQL3041N
指定的日期值在 Sybase 中不受支持。
SQL3042N
对 DATALINK 列指定的 LINKTYPE 无效。
SQL3043N
DATALINK 列的 DATALINK SPECIFICATION 无效。
SQL3044N
DATALINK 列的 DATALINK SPECIFICATION 带有重复的前缀规范。
SQL3045N
METHOD 参数中的 dcolumn 位置小于 1,或大于“定界”ASCII 码文件中的最大列数(1024)。
SQL3046N
METHOD 参数中的列数小于 1。
SQL3047N
METHOD 中指定的 LOAD/IMPORT 方法对“定界”ASCII 码文件无效。它必须是“P”或“缺省值”。
SQL3048N
输入文件中指定的列数比数据库的列数少,但其中一个数据库列不可为空。
SQL3049N
数据库列 名称 的数据类型 类型 与此格式文件不兼容,但数据库列不可为空。
SQL3050W
将在 IXF 文件代码页 文件代码页 与应用程序代码页 应用程序代码页 之间进行转换。
SQL3051W
已装入要装入 列名 中的数据,但是尚未执行从 IXF 文件代码页转换为应用程序代码页。
SQL3052N
缺少 类型 路径参数,但此参数是必需的。原因码:原因码。
SQL3053N
要导出至工作表格式文件的行数超过 8191。
SQL3054N
输入文件是无效的 PC/IXF 文件。该文件太短,无法包含有效的 H 记录。
SQL3055N
输入文件是无效的 PC/IXF 文件。不能将第一条记录中的长度字段转换为数值。
SQL3056N
输入文件是无效的 PC/IXF 文件。H 记录的长度字段中的值过小。
SQL3057N
输入文件是无效的 PC/IXF 文件。第一条记录中的输入字段不是 H。
SQL3058N
H 记录中的标识字段不是 IXF。
SQL3059N
H 记录中的版本字段无效。
SQL3060N
不能将 H 记录中的 HCNT 字段转换为数值,或其值超过范围。
SQL3061N
不能将 H 记录中的单字节和/或双字节代码页字段转换为数值,或值超出范围。
SQL3062N
不能将 H 记录中的双字节代码页字段转换为数值,或值超出范围。
SQL3063N
H 记录中的单字节代码页值 值-1 与应用程序的单字节代码页值 值-2 不兼容。未指定 FORCEIN 选项。
SQL3064N
H 记录中的双字节代码页值 值-1 与应用程序的双字节代码页值 值-2 不兼容。未指定 FORCEIN 选项。
SQL3065C
不能确定应用程序代码页的值。
SQL3066N
读取或寻找 T 记录时,到达文件末尾。
SQL3067N
不能将 T 记录中的长度字段转换为数值。
SQL3068N
T 记录的长度字段中的值太小。
SQL3069N
H 记录后的第一个非 A 记录不是 T 记录。
SQL3070N
A 记录中的长度字段超出范围。
SQL3071N
T 记录中的数据约定字段不是 C。
SQL3072N
T 记录中的数据格式字段不是 M。
SQL3073N
T 记录中的机器格式字段不是 PCbbb(其中 b = 空白)。
SQL3074N
T 记录中的数据位置字段不是 I。
SQL3075N
不能将 T 记录的 CCNT 转换为数值,或值超过范围。
SQL3076N
不能将 T 记录中的名称长度字段转换为数值,或值超过范围。
SQL3077N
T 记录中的 CCNT 字段中指定的 C 记录数 值 超过允许的最大值 最大值。
SQL3078N
不能将 A 记录中的长度字段转换为数值。
SQL3079N
不能将 C 记录中的长度字段转换为数值。
SQL3080N
C 记录的长度字段中的值太小。
SQL3081N
找不到足够的 C 记录。
SQL3082N
当读取或寻找 C 记录时,到达文件末尾。
SQL3083N
不能将列 名称 的 C 记录中的“D 记录标识”字段转换为数值。
SQL3084N
不能将列 名称 的 C 记录中的“D 记录位置”字段转换为数值。
SQL3085N
列 名称 的 C 记录中的“D 记录标识”和“D 记录位置”字段超出范围,或与前一个 C 记录不一致。
SQL3086N
未指定要装入数据库列 名称 的源列,或指定的源列不存在,但数据库列不可为空。
SQL3087N
指定要装入数据库列 名称 的源列无效,但该数据库列不可为空。
SQL3088N
指定要装入数据库列 名称 的源列与该数据库列不兼容,但数据库列不可为空。
SQL3089N
在期望 D 记录的地方找到非 D 记录。
SQL3090N
不能将 D 记录中的长度字段转换为数值。
SQL3091N
D 记录中的长度字段超出范围。
SQL3092N
D 记录中的标识字段未包含期望的值。
SQL3093N
输入文件是无效的 WSF 文件。
SQL3094N
找不到输入列 名称,但相对应的数据库列不可为空。
SQL3095N
指定的列位置 位置 不在有效范围 1 至 256 之内。
SQL3096N
数据库列 名称 的数据类型 类型 与任何 WSF 列类型都不兼容,但是该数据库列不可为空。
SQL3097N
WSF 记录中的记录长度字段对其记录类型无效。
SQL3098N
输入文件中的行号不在有效范围 1 至 8192 之内。
SQL3099N
输入文件中的列号不在有效范围 1 至 256 之内。
SQL3100W
输出 DEL 格式文件中的列号 列号(标识为 名称)长于 254 字节。
SQL3101W
第 行号 行的第 列号 列中有字符串定界符。
SQL3102W
METHOD 参数中的列数大于“操作字符串”(例如,“REPLACE into ...”)参数中的列数。
SQL3103W
METHOD 参数中的列数小于“操作字符串”(例如,“REPLACE into ...”)参数中的列数。
SQL3104N
EXPORT 实用程序 正在开始将数据导出至文件 名称。
SQL3105N
Export 实用程序已经完成导出 行数 行。
SQL3106N
格式化消息文件的消息时出错。
SQL3107W
消息文件中至少有一条警告消息。
SQL3108W
无法访问第 行号 行第 列号 列中的 DATALINK 值所引用的文件。原因码 = 原因码。
SQL3109N
实用程序正在开始从文件 名称 装入数据。
SQL3110N
实用程序已完成处理。从输入文件读了 数目 行。
SQL3111C
关闭输入数据文件时发生了 I/O 错误。
SQL3112W
指定的输入文件列数少于数据库列数。
SQL3113W
数据库列 名称 的数据类型 类型 与此格式文件不兼容。对该列插入了空值。
SQL3114W
未装入第 行号 行第 列号 列中 文本 后的某些数据。
SQL3115W
在第 行号 行第 列号 列中以 文本 开头的字段值比允许的最长表列还要长。该值被截断。
SQL3116W
第 行号 行第 列号 列中的字段值丢失,但是目标列不可为空。
SQL3117W
不能将第 行号 行第 列号 列中的字段值转换成 SMALLINT 值。装入了空值。
SQL3118W
不能将第 行号 行第 列号 列中的字段值转换成 SMALLINT 值,但目标列不可为空。未装入该行。
SQL3119W
不能将第 行号 行第 列号 列中的字段值转换成 INTEGER 值。装入了空值。
SQL3120W
不能将第 行号 行第 列号 列中的字段值转换成 INTEGER 值,但目标列不可为空。未装入该行。
SQL3121W
不能将第 行号 行第 列号 列中的字段值转换成 FLOAT 值。装入了空值。
SQL3122W
不能将第 行号 行第 列号 列中的字段值转换成 FLOAT 值,但目标列不可为空。未装入该行。
SQL3123W
不能将第 行号 行第 列号 列中的字段值转换成 PACKED DECIMAL 值。装入了空值。
SQL3124W
不能将第 行号 行第 列号 列中的字段值转换成 PACKED DECIMAL 值,但目标列不可为空。未装入该行。
SQL3125W
因为数据比目标数据库列长,所以第 行号 行第 列号 列中的字符数据被截断。
SQL3126N
远程客户机需要文件和目录的绝对路径。
SQL3128W
第 行号 行第 列号 列中包含 数据 的字段被截断为 DATE 字段,因为该数据比数据库列更长。
SQL3129W
已用空格填充了第 行号 行第 列号 列中包含 文本 的日期、时间或时间戳记字段。
SQL3130W
第 行号 行第 列号 列中包含 文本 的字段被截断为 TIME 字段,因为该数据比数据库列更长。
SQL3131W
第 行号 行第 列号 列中包含 文本 的字段被截断为 TIMESTAMP 字段,因为该数据比数据库列更长。
SQL3132W
列 列 中的字符数据将被截断成大小为 大小。
SQL3133W
第 行号 行第 列号 列中的字段包含无效的 DATALINK 值。装入了空值。
SQL3134W
第 行号 行第 列号 列中的字段包含无效 DATALINK 值,但目标列不可为空。未装入该行。
SQL3135N
METHOD 参数中的列数大于目标表中的列数。
SQL3137W
第 行号 行太短。至少丢失了一个已装入非可空列的输入值。未装入该行。
SQL3138W
在到达输入数据文件末尾之前,找不到结束字符串定界符。
SQL3139W
当实用程序与数据库断开连接时发生了错误 错误。
SQL3140W
不能将第 行号 行第 列号 列中的字段值转换成十进制浮点值。装入了空值。
SQL3141W
不能将第 行号 行第 列号 列中的字段值转换成十进制浮点值,但目标列不可为空。未装入该行。
SQL3142W
第 列号 列的列标题被截断为 240 字节。
SQL3143W
变长列 列号 的最大长度超过 240 字节这一限制。列的数据可能被截断。
SQL3144W
定长列 列号 的长度超过 240 字节这一限制。列的数据可能被截断。
SQL3145W
第 行号 行第 列号 列的数据被截断为 240 字节。
SQL3146N
第 行号 行第 列号 列的 DATE 或 TIMESTAMP 值超出范围。
SQL3147W
导出至工作表格式文件中的行超过 2048 行。
SQL3148W
未将输入文件中的行插入至表中。返回了 SQLCODE sqlcode。
SQL3149N
处理了输入文件中的 数值-1 行。已将 数值-2 行成功插入表中。拒绝了 数值-3 行。
SQL3150N
PC/IXF 文件中的 H 记录具有产品 产品,日期 日期 和时间 时间。
SQL3151N
因为指定了 FORCEIN 选项,所以将不执行从 H 记录中单字节代码页值 代码页 至应用程序 单字节代码页值 代码页 的数据转换。
SQL3152N
H 记录中的双字节代码页值 值 与应用程序的双字节代码页值 值 不兼容。因为指定了 FORCEIN 选项,所以将插入数据。
SQL3153N
PC/IXF 文件中的 T 记录具有名称 名称,限定符 限定符 和源 源。
SQL3154W
H 记录中的 HCNT 值与 T 记录中的 CCNT 值不兼容。将使用 T 记录中的 CCNT 值。
SQL3155W
列 名称 的 C 记录中名称长度字段无效。将不装入该列中的数据。
SQL3156W
列 名称 的 C 记录中的 NULL 字段无效。将不装入该列中的数据。
SQL3157W
列 名称 的 C 记录中的类型字段无效。将不装入该列中的数据。
SQL3158W
列 名称 的 C 记录中的单字节代码页字段无效。将不装入该列中的数据。
SQL3159W
列 名称 的 C 记录中的双字节代码页字段无效。将不装入该列中的数据。
SQL3160W
列 名称 的 C 记录中的列长度字段无效。将不装入该列中的数据。
SQL3161W
列 名称 的 C 记录中的精度字段无效。将不装入该列中的数据。
SQL3162W
列 名称 的 C 记录中的小数位字段无效。将不装入该列中的数据。
SQL3163W
浮点列 名称 的 C 记录中的列长度字段是空白。将使用值 00008。
SQL3164W
浮点列 名称 的 C 记录中的列长度字段无效。将不装入该列中的数据。
SQL3165W
列 名称 的 C 记录中的列类型字段 类型 无效。将不装入该列中的数据。
SQL3166W
未指定要装入 PC/IXF 列中的数据库列 名称,或者指定的 PC/IXF 列不存在。将插入空值。
SQL3167W
指定要装入到数据库列 名称 的 PC/IXF 列无效。将插入空值。
SQL3168W
指定要装入到数据库列 名称 的 PC/IXF 列与数据库列不兼容。将插入空值。
SQL3169N
FORCEIN 选项可用于支持 PC/IXF 列 名称 装入到数据库列 名称 中。
SQL3170W
在一行数据内到达文件末尾。未装入部分数据行。
SQL3171W
在列标题行中发现非标号记录。未处理该记录。
SQL3172W
找不到指定的输入列 名称。相应的数据库列将包含空值。
SQL3173N
对列 名称 插入的数据所包含的字符将总是比列宽少。
SQL3174W
数据库列 名称 的数据类型 类型 与任何 WSF 列类型都不兼容。将对此列插入空值。
SQL3175W
数据库行 行 列 列 的输入记录无效。
SQL3176W
WSF 文件中的第 行 行第 列 列的值超出日期值的范围。
SQL3177W
WSF 文件中第 行 行第 列 列的值超出时间值的范围。
SQL3178W
WSF 文件中数据库第 行号 行第 列号 列中的记录的类型对于表示时间值而言无效。
SQL3179W
输入文件中的行 行 丢失要插入到数据库中不可为空列的数据。未插入该行。
SQL3180W
将第 号码 张软盘插入驱动器 驱动器 中。
SQL3181W
在找到期望的结束记录之前,到达文件末尾。
SQL3182W
将第 号码 张软盘插入驱动器 驱动器 中。当前插入的软盘不是正确 的软盘,或延续软盘无效。
SQL3183W
filetmod 参数的多个定界符覆盖未由空白分隔。
SQL3184W
创建表时发生了 SQL 警告 SQLCODE。
SQL3185W
处理输入文件的第 行号 行中的数据时,发生前一个错误。
SQL3186W
未将数据装入数据库,因为日志已满或者耗尽了锁定空间。返回了 SQLCODE sqlcode。将尝试落实,如果落实成功,那么操作将继续。
SQL3187W
创建索引时出错。返回了 SQLCODE sqlcode。
SQL3188N
当擦除表的内容时出错。
SQL3189N
前一条消息涉及到具有列 列列表 的索引 名称。
SQL3190N
indexixt 选项对此 Import 操作无效。
SQL3191N
在第 行号 行第 列号 列中以 字符串 开头的字段与用户指定的 DATEFORMAT、TIMEFORMAT 或 TIMESTAMPFORMAT 不匹配。该行将被拒绝。
SQL3192N
在 filetmod 中,用户指定的以字符串 字符串 开头的格式 关键字 无效。
SQL3193N
不能更新指定的视图或具体化查询表。无法装入/导入(LOAD/IMPORT)至此视图,或者无法装入(LOAD)至此具体化查询表。
SQL3194N
指定的表是系统表。不能装入系统表。
SQL3195W
不能将驱动器 驱动器 中的软盘 编号 用于输出文件。插入 带有可写入的可用空间的格式化软盘。
SQL3196N
找不到输入文件。
SQL3197N
试图执行 Import 或 Export 的多个副本。
SQL3201N
指定的表不能被替换,因为有另一个表依赖于该表。
SQL3202N
LOAD 实用程序未能获取分区锁定。
SQL3203N
指定的目标不允许 INSERT_UPDATE 选项,因为它没有主键,或者所有列都在主键中。
SQL3204N
INSERT_UPDATE 选项可能不应用于视图。
SQL3205N
因为基本表有从属对象,所以指定的视图不能被替换。
SQL3206N
因为指定视图的定义涉及子查询,所以不能将其替换。
SQL3207N
提供了无效的表列表。原因码为 原因码。
SQL3208W
将数据从类型表导入常规表。
SQL3209N
带有 CREATE 选项的 Import 既不允许重命名子表名,也不允许重命名属性名。
SQL3210N
选项 选项 与 命令名 中的层次结构不兼容。
SQL3211N
LOAD 不支持类型表。
SQL3212N
对于带有 DATALINK 列的表或处于删除暂挂状态的表空间,当前不支持 LOAD 命令的 TERMINATE 选项。
SQL3213I
建立索引方式为 方式。
SQL3214N
LOAD 实用程序不支持延迟对带有唯一索引的表建立索引。
SQL3215W
当装入到表的 DMS 表空间中,而该表的索引对象与任何其他目标表的对象驻留在同一表空间中,且还指定了 COPY 选项时,LOAD 实用程序当前不支持 INCREMENTAL 建立索引方式。将改为使用 REBUILD 建立索引方式。
SQL3216W
表的索引对象在 LOAD 实用程序开始时与 INCREMENTAL 索引维护不兼容。此 LOAD 实用程序操作期间,不能执行按 INCREMENTAL 方式建立索引。将改为使用 REBUILD 建立索引方式。
SQL3217W
仅当使用 LOAD 来通过使用 INSERT INTO 操作追加数据时,才支持 INCREMENTAL 建立索引方式。当前 LOAD 操作是 操作。实用程序将使用建立索引方式 方式。
SQL3218C
LOAD 实用程序不能继续,因为它遇到了一个或多个破坏的索引文件。重新启动数据库并重新提交 LOAD 命令。
SQL3219N
LOAD 实用程序未能禁用对目标表的约束检查。
SQL3220W
在 目录名 目录中找不到卷 卷名。将该卷复制到此目录中,并继续 LOAD/IMPORT。
SQL3221W
...开始 COMMIT WORK。输入记录计数 = 计数。
SQL3222W
...对任何数据库更改的 COMMIT 都成功。
SQL3223N
未正确指定指向 参数 的类型指针的参数。
SQL3225N
RESTARTCOUNT 值或 SKIPCOUNT 值 值 大于文件中的行数(行数)。未装入任何行。
SQL3227W
记录标记 标记-1 指的是用户记录号 标记-2。
SQL3228N
对于带有 DATALINK 列的表,DEFERRED INDEXING 不受支持。
SQL3229W
第 行号 第 列号 列中的字段值无效。该行被拒绝。原因码:原因码。
SQL3230N
不支持从数据文件代码页 数据文件代码页 至数据类型 数据类型 的数据库代码页 数据库代码页 的代码页转换。
SQL3232W
写入文件 文件名 时出错。已改为使用 文件名。
SQL3233W
忽略了 XML 数据说明符(XDS)中的属性 属性名。原因码:原因码
SQL3234N
列 列号 的 XML 数据说明符(XDS)无效。属性名:属性名;字符号:字符号;原因码:原因码
SQL3235N
实用程序无法使用指定的 类型 的路径 路径名 参数。原因码:原因码。
SQL3236N
在 XMLVALIDATE 选项的 IGNORE 子句中指定了模式 模式名,但是 MAP 子句中的模式对的左边也存在该模式。
SQL3237N
所提供的 EXPORT 操作字符串无法与 XMLSAVESCHEMA 选项配合使用。原因码:原因码
SQL3238N
WSF 文件格式与 功能部件 不兼容。
SQL3239W
不会将模式信息包括在某些 XML 文档的 XDS 中。
SQL3240N
授权标识 授权标识 没有对受安全策略 策略名 保护的表运行实用程序所必需的 LBAC 凭证。
SQL3241W
在输入源中,第 行 行和第 列 列包含对目标表无效的安全标号。
SQL3242W
在输入源中,行 行 和列 列 包含对目标表无效的安全标号字符串。
SQL3243W
在输入源中,第 行 行和第 列 列中的安全标号字符串包含元素 元素,该元素不是安全标号组件 组件 的有效元素。
SQL3244W
在输入源中,行 行 和列 列 包含名为 安全标号名 的安全标号,但在保护目标表的安全策略 策略名 中找不到该安全标号。
SQL3245W
由于用户没有必需的 LBAC 凭证,因此无法将输入源中的行 行 和列 列 插入到目标表中。
SQL3250N
COMPOUND = 值 是无效的。原因码:原因码。
SQL3251N
在导入期间发生了多于 错误计数 个错误。
SQL3252N
LOAD METHOD 方法 选项与指定的文件格式不兼容。
SQL3253N
实用程序正在开始通过 SQL 语句 语句 来从数据库 数据库 装入数据。
SQL3254N
实用程序正在开始从数据库 数据库 中的表 模式.表名 装入数据。
SQL3255N
Load 实用程序在执行 SOURCEUSEREXIT 源用户出口 时出错。原因码为 原因。
SQL3256N
Load 实用程序在处理指定文件类型的数据时出错。
SQL3257N
Load 实用程序在处理指定文件类型中的数据时出错。原因码为 原因。在适用的时候,记录号是 记录号,列号是 列号。
SQL3260N
访问 LDAP 目录时,发生了意外错误。错误代码 = 错误代码。
SQL3261N
因为未指定必需的输入参数,所以 REGISTER LDAP 命令未成功完成。原因码 = 原因码。
SQL3262N
TCP/IP 服务名称 名称 无效。
SQL3263N
协议类型不受支持。
SQL3264N
未在 LDAP 中注册 DB2 服务器。
SQL3265N
LDAP 认证期间发生了意外错误。
SQL3266N
LDAP 用户密码不正确。
SQL3267N
授权标识 没有足够的权限来执行所请求的命令。
SQL3268N
LDAP 模式与 DB2 的当前发行版不兼容。
SQL3269N
因为 LDAP 服务器不可用,所以 DB2 无法访问 LDAP 目录中的信息。
SQL3270N
LDAP 用户的“专有名称”(DN)无效。
SQL3271N
未对当前登录用户定义 LDAP 用户的“专有名称”(DN)和/或密码。
SQL3272N
在 LDAP 目录中找不到节点 节点名。
SQL3273N
在 LDAP 目录中找不到数据库 数据库别名。
SQL3274W
已成功创建数据库。但是,未在 LDAP 目录中编目该数据库。SQLCODE = sqlcode。
SQL3275W
已成功删除数据库。但是,未在 LDAP 目录中取消编目该数据库。SQLCODE = sqlcode。
SQL3276N
得不到 LDAP 命名上下文。
SQL3277N
数据库 数据库别名 在 LDAP 目录中已存在。
SQL3278N
节点 节点 在 LDAP 目录中已存在。
SQL3279N
因为 LDAP 被禁用,所以命令未成功完成。
SQL3280N
尝试连接 DRDA 服务器失败。
SQL3281N
OSTYPE 参数无效。
SQL3282N
提供的凭证无效。
SQL3283W
成功更新了数据库管理器配置。然而,在 LDAP 目录中未更新协议信息。SQLCODE = sqlcode-值。
SQL3284N
nodetype 参数无效。
SQL3285N
因为不支持 LDAP,所以命令未成功完成。
SQL3300N
输入文件中的记录的顺序不正确。
SQL3301N
在输入文件的中间找到 BOF 记录。
SQL3302N
导入在任何数据前找到 EOF 记录。
SQL3303N
当在“操作字符串”参数中使用 CREATE 或 REPLACE_CREATE 关键字时,文件类型必须是 IXF。
SQL3304N
该表不存在。
SQL3305N
不能创建表,因为它已存在。
SQL3306N
当将行插入表时,发生 SQL 错误 sqlcode。
SQL3307N
METHOD 参数中的列数与“操作字符串”参数中的条目数不匹配,或者在 METHOD 参数中指定的列不存在。
SQL3308N
PC/IXF 列 名称 的代码页值与应用程序的代码页值不兼容。未指定 FORCEIN 参数。
SQL3309N
PC/IXF 文件中的列 名称 被定义为图形列。未指定 FORCEIN 参数。
SQL3310N
PC/IXF 文件中的列 名称 无效。
SQL3311N
此 PC/IXF 文件在 Import CREATE 方式下不受支持。原因码 = 原因码。
SQL3313N
磁盘已满。处理结束。
SQL3314N
A 记录中的日期和时间字段与 H 记录中的日期和时间字段不匹配。
SQL3315N
子类型为 C 的 A 记录中的卷字段无效。
SQL3316N
当关闭输入文件的一部分时,发生了 I/O 错误。
SQL3317N
filetmod 参数所指向的字符串包含冲突的信息。
SQL3318N
filetmod 参数中有重复关键字。
SQL3319N
创建表时发生 SQL 错误 sqlcode。
SQL3320N
filetmod 参数的关键字后面没有定界符或十进制小数点字符。
SQL3321C
未将数据导入数据库,因为日志已满或者耗尽了锁定空间。恢复不成功。返回了 SQLCODE sqlcode。
SQL3322N
发生操作系统信号量错误。
SQL3324N
列 名称 的类型为 类型,不识别该类型。
SQL3325W
第 行号 行中的所有列都是空值;WSF 数据文件将不包括该行。
SQL3326N
“操作字符串”参数中表名后面的列列表无效。
SQL3327N
发生系统错误(原因码 1 = 原因码-1 和原因码 2 = 原因码-2)。
SQL3330W
在第 行号 行中,字符字段的长度为奇数,但其目标数据库列为图形列。未装入该行。
SQL3331C
文件(或目录)的许可权设置不允许指定的访问。
SQL3332C
已达到最大打开文件数。
SQL3333C
文件或目录不存在。
SQL3334C
没有足够的存储器可用。
SQL3335C
文件系统已满。
SQL3337N
对服务器写数据时发生了 I/O 错误。
SQL3338N
读服务器上的临时消息文件时发生了 I/O 错误。
SQL3340N
未能对表的并行读访问执行装入。原因码 = 原因码。
SQL3341N
USE 选项提供了无效的表空间名。原因码 = 原因码。
SQL3342N
权限不够,无法使用 LOCK WITH FORCE 选项。
SQL3343N
在前滚失败的装入操作后不允许重新启动装入。
SQL3346N
忽略了 USE TablespaceName 选项。原因码 = 原因码。
SQL3400N
METHOD 中指定的方法对“非定界”ASCII 码文件无效。它必须是“L”(表示位置)。
SQL3401N
METHOD 中指定的方法对任何 filetype 均无效。
SQL3402N
对不可为空的列 名称 指定了起始/结束位置对,但两者的值均为零。
SQL3403N
用于插入到列 名称 中的起始/结束位置对无效。(开始 结尾)
SQL3404N
用于插入到列 名称 中的起始/结束位置对对数字无效。
SQL3405N
用于插入到列 名称 中的起始/结束位置对对日期无效。
SQL3406N
用于插入到列 名称 中的起始/结束位置对对时间无效。
SQL3407N
用于插入到列 名称 中的起始/结束位置对对时间戳记无效。
SQL3408W
用于插入到列 名称 中的起始/结束位置对定义了大于目标列的字段。数据可能被截断。
SQL3409W
用于插入到列 名称 中的起始/结束位置对定义了短于目标定长列的字段。将填充数据。
SQL3410N
用于插入到列 名称 中的起始/结束位置对对图形无效。
SQL3411W
第 行号 行第 列号 列中的字段值对图形列无效。插入了空值。
SQL3412W
第 行号 行第 列号 列中的字段值对图形列无效,但是目标列不可为空。 未插入该行。
SQL3413W
第 行号 行第 列号 列中的字段值对于目标列而言太短。插入了空值。
SQL3414N
找不到临时文件 文件名。
SQL3415W
未能将第 行号 行和第 列号 列中的字段值从输入数据文件的代码页转换为数据库的代码页。装入了空值。
SQL3416W
未能将第 行号 行和第 列号 列中的字段值从输入数据文件的代码页转换为数据库的代码页。未装入该行。
SQL3417N
开始结束位置对 对号 对代码页 代码页 无效。
SQL3418W
如果数据是使用 DB2 导出的,那么不应指定 NOCHARDEL 文件类型修饰符。提供此修饰符的目的是支持不具有字符定界符的供应商数据文件。
SQL3419W
供应商排序不支持指定的排序选项。将使用缺省 DB2 排序来继续 执行操作。
SQL3500W
在时间 时间戳记,实用程序在开始 阶段。
SQL3501W
由于禁用数据库正向恢复,因此表所驻留的表空间将不被置于备份暂挂状态。
SQL3502N
实用程序遇到了 数目 个警告,这超过了允许的最大警告数。
SQL3503W
实用程序已装入 行数 行,这等于用户指定的总行数。
SQL3504W
正在建立一致点。
SQL3505N
在 RECLEN 选项的 filetmod 中指定的长度不在有效范围 1 至 32767 之内。
SQL3506W
第 行号 行第 列号 列中空指示符中指定的值无效。将假设值为 'N'。
SQL3507N
对空指示符指定的列号不在有效范围 0 到 32767 之内,或空指示符参数无效。
SQL3508N
装入或装入查询期间,当访问类型为 文件类型 的文件或路径时出错。原因码:原因码。路径:路径/文件。
SQL3509W
实用程序已从表中删除了 数目 行。
SQL3510N
不能访问用于排序阶段的工作目录。
SQL3511W
第 行号 行第 列号 列中命名的文件找不到。装入了空值。
SQL3512W
找不到第 行号 行第 列号 列中命名的文件,但目标列不可为空。未装入该行。
SQL3513N
文件的代码页与数据库的代码页不匹配。不能装入此文件。
SQL3514N
发生了实用程序系统错误。函数代码:函数。原因码:原因码。错误代码:错误代码。
SQL3515W
在时间 时间戳记,实用程序已经完成了 阶段。
SQL3516N
实用程序未能按指定的那样重新启动 Load。
SQL3517N
从输入源读取了意外的记录。
SQL3518N
源中的数据与要装入的表不兼容。
SQL3519W
开始装入一致点。输入记录数 = 计数。
SQL3520W
“装入一致点”成功。
SQL3521N
未提供输入源文件 序号。
SQL3522N
当禁用日志保留和用户出口时,不能提供复制目标。
SQL3523W
消息文件中没有要检索的消息。原因码:返回码。
SQL3524N
选项 选项 具有无效值 值。
SQL3525N
选项-1 选项与 选项-2 选项不兼容。
SQL3526N
修饰符子句 子句 与当前装入命令不一致。原因码:原因码。
SQL3527N
FILETMOD 参数中对 CODEPAGE 选项指定的数字无效。
SQL3528W
可能将 CLP 命令中指定的定界符(列定界符、字符串定界符或小数点) 从应用程序代码页转换为数据库代码页。
SQL3529N
操作名称 操作在列 列号 中遇到不受支持的数据类型 数据类型。
SQL3530I
LOAD QUERY 实用程序正在分区 分区号 上监视 代理类型 进度。
SQL3531I
已发生 LOAD RESTART。
SQL3532I
Load 实用程序当前正处于 阶段 阶段。
SQL3533I
Load 实用程序当前正在构建第 编号 个索引(共 数值 个)。
SQL3534I
Load DELETE 阶段大概已完成 数值%。
SQL3535W
LOAD 命令参数 参数名 不再受支持;LOAD 实用程序将忽略它的值。
SQL3536N
系统临时表空间 表空间名 已满。
SQL3537N
执行 LOAD 实用程序期间,未能分配排序内存。
SQL3538N
因为多个 LOAD 正在使用同一临时文件路径,所以 LOAD QUERY 实用程序失败。
SQL3539N
因为至少已尝试了一次 LOAD TERMINATE,所以 LOAD RESTART 不能继续。
SQL3550W
第 行号 行第 列号 列中的字段值不是 NULL,但目标列已定义为 GENERATED ALWAYS。
SQL3551W
表至少包含实用程序将覆盖的一个 GENERATED ALWAYS 列。
SQL3600N
因为表 表名 是用户维护的具体化查询表或未处于设置完整性暂挂状态,所以 SET INTEGRITY 语句的 IMMEDIATE CHECKED 选项无效。
SQL3601W
该语句导致一个或多个表自动置于设置完整性暂挂状态。
SQL3602W
检查数据处理找到约束违例,并将它们移至异常表。
SQL3603N
通过 SET INTEGRITY 语句来检查数据处理时,发现涉及名为 名称 的约束或唯一索引的完整性违例。
SQL3604N
与 SET INTEGRITY 语句或 LOAD 实用程序中的表 表名 相对应的 异常表 异常表名 的结构不正确、此异常表已用唯一索引、约束、生成列或触发器定义,或者它处于设置完整性暂挂状态,或者它属于无效类型。原因码为 原因码。
SQL3605N
在 SET INTEGRITY 语句中指定的表 表名 未列示出来以进行检查,或者该表是指定了多次的异常表。
SQL3606N
检查的表数目与在 SET INTEGRITY 语句中指定的异常表数目不匹配。
SQL3608N
当父表或基础表 父表名 处于设置完整性暂挂状态或将使用 SET INTEGRITY 语句将其置于设置完整性暂挂状态时,不能使用 SET INTEGRITY 语句检查从属表 从属表名。
SQL3700W
设备 设备 已满。有 活动设备 个活动设备。请安装新介质,或执行适当的操作。
SQL3701W
指定了 lobpaths 参数,但此表未包含任何 LOB 或 Long 数据。此参数将被忽略。
SQL3702W
警告。接收到设备 设备 的 SQLCODE sqlcode。卸装将尝试在 没有此设备的情况下继续。
SQL3703W
已卸装并发送了类型为 类型 的总页数 yyy 中的 xxx 页,以便将它们写入目标介质。
SQL3704N
指定的 num_buffers 参数无效。
SQL3705N
指定的缓冲区大小参数无效。必须将缓冲区大小指定为 0,或在 8 和 250000 之间(包括 8 和 250000)。对于多个缓冲区,缓冲区总大小不能超过 250000。
SQL3706N
在 路径/文件 上遇到磁盘满错误。
SQL3707N
指定的排序内存大小参数 大小-1 无效。需要的最小大小为 大小-2。
SQL3783N
打开复制位置文件时出错。打开文件错误代码是 错误代码。
SQL3784W
在读复制位置文件时遇到无效数据。故障发生在第 行号 行处,错误类型是 错误类型。
SQL3785N
因为错误 sqlcode,所以在节点 节点号 上的时间 时间戳记 表 模式.表名 的装入恢复失败,更多信息 更多信息。
SQL3798W
为了继续装入恢复,对参数 参数 使用了无效值来调用前滚恢复 API。
SQL3799W
由于警告 sqlcode,因此在节点 节点号 上时间 时间戳记 表 模式.表名 的装入恢复暂挂,更多信息 更多信息。
SQL3802N
遇到无效停顿方式 停顿方式。
SQL3804N
索引无效。
SQL3805N
应用程序的状态或指定表的一个或多个表空间的状态禁止 loadapi 操作或 quiescemode 操作。原因码 =原因码。
SQL3806N
对于要装入的表,并非所有表约束都已关闭。
SQL3807N
实例或数据库 名称 停顿被暂挂。
SQL3808N
实例或数据库 名称 取消停顿被暂挂。
SQL3901N
发生了非严重系统错误。原因码为 原因码。
SQL3902C
发生了系统错误。不能进行进一步的处理。原因码 = 原因码。
SQL3910I
同步会话成功完成。
SQL3911I
测试同步会话成功完成。
SQL3912I
STOP 成功完成。
SQL3913I
已发出 STOP,但当前没有活动的同步会话。
SQL3914I
已发出用户中断。同步会话成功停止。
SQL3915I
在将结果上载至卫星控制服务器之前,发出了用户中断。将在 下一同步会话期间上载结果。
SQL3916I
接收到 STOP 请求。同步会话成功停止。
SQL3917I
在将结果上载至卫星控制服务器之前,接收到 STOP 请求。将在 下一同步会话期间上载结果。
SQL3918I
成功获取同步进度信息。
SQL3919I
在卫星可联系到卫星控制服务器之前,接收到 STOP 请求。同步成功停止。
SQL3920I
此卫星上的应用程序版本与可用于此卫星的组的应用程序版本不兼容。同步不能发生。
SQL3921I
在卫星控制服务器上,此卫星被禁用。同步不能发生。
SQL3930W
没有要执行的同步脚本。
SQL3931W
测试同步会话成功完成。但是,在卫星控制数据库中找不到卫星标识。
SQL3932W
测试同步会话成功完成。然而,卫星应用程序版本不是在 本地设置的,或者在卫星控制服务器上,此卫星的组不存在卫星应用程序版本。
SQL3933W
测试同步会话成功完成。但是,卫星的发行版级别不 受卫星控制服务器的发行版级别支持。
SQL3934W
测试同步会话成功完成。但是,在卫星控制服务器上,此卫星被禁用。
SQL3935W
测试同步会话成功完成。但是,在卫星控制服务器上,此卫星处于故障状态。
SQL3936W
没有进度信息可用。
SQL3937W
此卫星的应用程序版本与可用于此卫星的组的应用程序版本不匹配。
SQL3938W
脚本执行期间发出中断。同步会话已停止,但卫星可能处于不一致状态。
SQL3942I
已成功设置卫星的同步会话标识符。
SQL3943N
同步会话标识符超过最大长度(长度 个字符)。
SQL3944I
已成功复位卫星的同步会话标识符。
SQL3945I
成功检索到卫星的同步会话标识符。
SQL3946N
同步会话标识符操作失败。
SQL3950N
有同步会话活动。最多只能有一个同步会话处于活动状态。
SQL3951N
在本地找不到卫星标识。
SQL3952N
在卫星控制服务器上找不到卫星标识。
SQL3953N
在卫星控制服务器上,此卫星已被禁用。
SQL3954N
在卫星控制服务器上,此卫星处于故障状态。
SQL3955N
找不到卫星控制数据库名称或它的别名。
SQL3956N
此卫星的应用程序版本不是在本地定义的。
SQL3957N
由于通信故障而不能与卫星控制数据库连接:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3958N
同步会话期间出错:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3959N
由于通信故障而不能启动同步会话:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3960N
由于通信故障而不能将结果上载到卫星控制服务器:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3961N
不能对卫星控制服务器进行认证。
SQL3962N
由于数据库错误而未能启动同步:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3963N
因为数据库错误而不能上载结果:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3964N
因为卫星的发行版级别不受卫星控制服务器支持,所以同步失败。
SQL3965N
由于卫星控制服务器故障而不能下载同步脚本:SQLCODE=sqlcode,SQLSTATES=sqlstate,Tokens=标记-1,标记-2,标记-3。
SQL3966N
同步会话失败。原因码为 原因码。
SQL3967N
不能检索进度信息。
SQL3968N
因为脚本故障,所以同步未能成功完成。然而,结果被成功地 发送到了卫星控制服务器。
SQL3969N
因为在脚本执行期间接收到中断,所以同步失败。
SQL3970N
同步会话失败:SQLCODE sqlcode,SQLSTATE sqlatate。在位置 位置 检测到该错误。
SQL4001N
第 行 行上的列 列 中的字符 字符 无效。
SQL4002N
标记-1 和 标记-2 是未声明的主变量,两者都不能在单一 SQL 语句中用作描述符。
SQL4003N
第 行号 行上的 SQL 语句不受此版本的预编译器支持。
SQL4004N
程序包名无效。
SQL4005N
在第 行 行上,从位置 位置 开始找到无效标记 标记。
SQL4006N
结构嵌套层次太多。
SQL4007N
主结构 主结构 没有字段。
SQL4008N
即使在完全限定的情况下,也不能唯一地引用主变量 名称。
SQL4009N
数据长度表达式无效。
SQL4010N
“复合 SQL”语句的嵌套非法。
SQL4011N
“复合 SQL”语句中有无效 SQL 子语句。
SQL4012N
“复合 SQL”语句中有对 COMMIT 的无效使用。
SQL4013N
找到 END COMPOUND 语句,但前面没有 BEGIN COMPOUND 语句。
SQL4014N
复合 SQL 语法无效。
SQL4015N
预处理期间出错。
SQL4016N
找不到指定的预处理器。
SQL4017W
预处理已成功完成。
SQL4018W
开始处理预处理文件 预处理文件。
SQL4019W
完成处理预处理文件 预处理文件。
SQL4020N
'long' 主变量 标记-1 无效。转而使用“sqlint32”。
SQL4100I
标志程序使用 sqlflag-type SQL 语言语法来进行语法检查。
SQL4102W
在以文本 文本 开始的标记处发生 SQL 语法违规。
SQL4103W
数据定义语句不在 CREATE SCHEMA 语句中。
SQL4104W
有非标准嵌入式注释。
SQL4105W
发生 SQL 语法偏差。该语句不完整。
SQL4106W
标识符 标识符 多于 18 个字符。
SQL4107W
列 列 具有无效的长度、精度或小数位属性。
SQL4108W
指示符变量具有非精确数字数据类型,或带有非零小数位。
SQL4109W
SET FUNCTION SPECIFICATION 引用列 列。
SQL4110W
包含 列 的 VALUE EXPRESSION 不能包括运算符。
SQL4111W
COLUMN REFERENCE 丢失,或对 ALL 列函数 函数 无效。
SQL4112W
列 列 不唯一,需要限定。
SQL4113W
VALUE EXPRESSION 不能包含 SET FUNCTION SPECIFICATION。
SQL4114W
列 列 未标识当前作用域中的表列。
SQL4115W
包含 OUTER REFERENCE 列 列 的列函数不在 HAVING 子句的子查询中。
SQL4116W
SUM 或 AVG 函数的结果不能是字符串。
SQL4117W
运算符 运算符 在此上下文中无效。
SQL4118W
exptype EXPRESSION 正在比较不兼容的数据类型。
SQL4119W
LIKE 谓词中的操作数不是字符串。
SQL4120W
ESCAPE 字符必须是单字节字符串。
SQL4121W
WHERE 子句、GROUP BY 子句或 HAVING 子句对分组视图 模式名.视图 无效。
SQL4122W
模式名.名称 在 FROM 子句中出现多次。
SQL4123W
对于分组视图,FROM 子句中只允许引用一个表。
SQL4124W
在 WHERE 子句中,对从列函数派生的列 列 的引用无效。
SQL4125W
当 WHERE 子句带有列函数时,HAVING 子句必须包含 WHERE 子句。
SQL4126W
列 的 COLUMN REFERENCE 必须是 OUTER REFERENCE。
SQL4127W
列 列 在当前作用域内重复。
SQL4128W
列名 的 COLUMN REFERENCE 应该是分组列,或者应在列函数中指定。
SQL4129W
使用值为 * 的 SELECT LIST 时,表 模式名.表 的 DEGREE 应是 1。
SQL4130W
列函数对以表 模式名.表 开始的 TABLE EXPRESSION 无效。
SQL4131W
列 的 COLUMN REFERENCE 无效。
SQL4132W
多次指定 DISTINCT。
SQL4133W
COMPARISON PREDICATE 子查询不能包含 GROUP BY 或 HAVING 子句。
SQL4134W
COMPARISON PREDICATE 子查询不能标识分组视图。
SQL4135W
存在无效的 AUTHORIZATION IDENTIFIER 授权标识。
SQL4136W
表或视图 模式名.名称 已存在。
SQL4137W
COLUMN DEFINITION 丢失。
SQL4138W
目标的数据类型 类型-1 与源的数据类型 类型-2 不兼容。
SQL4139W
必须对 模式名.表 指定 VIEW COLUMN LIST。
SQL4140W
发生错误,导致标志程序停止。模块名 = 模块名。内部错误代码 = 错误代码。
SQL4141W
试图在模块 模块名 中生成消息 消息号 时出错。
SQL4142W
没有足够内存用于标志程序操作。内部错误代码 = 错误代码。
SQL4143W
释放标志程序内存时出错。内部错误代码 = 错误代码。
SQL4144W
在模块 模块名 中调用 FLAGGER 时发生内部错误。内部错误代码 = 错误代码。
SQL4145W
FLAGGER 访问系统目录期间出错。加标志操作仍然继续,以便只检查语法。SQLCODE = nnnSQLERRP = modname SQLERRD1 = nnn 创建程序 = 创建程序名 表 = 表名。
SQL4146W
发生内部错误导致,导致语义处理停止。模块名 = 模块名。内部错误代码 = 错误代码。
SQL4147W
无效标志程序版本号。
SQL4170W
必须将 列号 列声明成 NOT NULL。
SQL4171W
查看的表 模式名.表 必须是可更新的。
SQL4172W
列名数无效。
SQL4173W
在关闭游标 游标 之前,必须先对其进行声明。
SQL4174W
已声明游标 游标。
SQL4175W
在此上下文中,只有 * 或列名才有效。
SQL4176W
由以 模式名-1.表-1 开头的 QUERY EXPRESSION 和以 模式名-2.表-2 开头的 QUERY TERM 标识的表的描述必须相同。
SQL4177W
SORT SPECIFICATION 号码 在游标 游标 的 DEGREE 之外。
SQL4178W
表 模式名.表 是只读表。
SQL4179W
一定不能在 SEARCH CONDITION 中包含的任何子查询的 FROM 子句中标识表 模式名.表。
SQL4180W
表 模式名-1.表-1 不是在 DECLARE CURSOR 语句中指定的第一个表 模式名-2.表-2。
SQL4181W
TARGET SPECIFICATION 的数目与游标 游标 的 DEGREE 不匹配。
SQL4182W
INSERT 语句的目标表 模式名.表 也在 FROM 子句或子查询中。
SQL4183W
指定的列数与指定的值的数目不匹配。
SQL4184W
指定的列数与以表 模式名.表 开始的 QUERY SPECIFICATION 的 DEGREE 不匹配。
SQL4185W
在列 列 与 INSERT 或 UPDATE 项目之间,存在数据类型或长度不匹配。
SQL4186W
不能在此上下文中使用 GROUP BY 或 HAVING 子句,或标识分组视图。
SQL4187W
SELECT LIST 中指定的元素数应该与 SELECT TARGET LIST 中的元素数相匹配。
SQL4188W
UPDATE 语句的 SET 子句不允许列函数。
SQL4189W
不能对“非 NULL”列 列 指定 NULL。
SQL4190W
引用不识别的数据类型的主变量。该主变量位置是 位置。
SQL4191W
不识别 列名 列的数据类型。
SQL4192W
在目录中找不到表 模式名.表。
SQL4300N
未在此平台上安装或正确配置 Java 支持。
SQL4301N
Java 或 .NET 解释器启动或通信失败,原因码为 原因码。
SQL4302N
过程或用户定义的函数 名称(特定名称 特定名称)由于异常 字符串 而异常终止。
SQL4303N
Java 存储过程或用户定义的函数 名称,特定名称 特定名称 不能由外部名 字符串 来标识。
SQL4304N
Java 存储过程或用户定义的函数 名称(特定名称 特定名称)不能装入 Java 类 类,原因码为 原因码。
SQL4306N
Java 存储过程或用户定义的函数 名称(特定名称 特定名称)不能调用 Java 方法 方法,特征符为 字符串。
SQL4400N
授权标识 无权在 DB2 管理服务器上执行管理任务。
SQL4401C
DB2 管理服务器在启动期间遇到错误。
SQL4402W
DB2ADMIN 命令成功。
SQL4403N
命令的语法无效。
SQL4404N
DB2 管理服务器不存在。
SQL4405W
DB2 管理服务器已存在。
SQL4406W
已成功启动 DB2 管理服务器。
SQL4407W
已成功停止“DB2管理服务器”。
SQL4408N
因为 DB2 管理服务器是活动的,所以未将其删除。
SQL4409W
DB2 管理服务器已是活动的。
SQL4410W
DB2 管理服务器不是活动的。
SQL4411N
因为服务器实例不是 DB2 管理服务器,所以不允许请求的操作。
SQL4412N
DB2 管理服务器的登录用户帐户无效。
SQL4413W
用法:DB2ADMIN 创建、删除、启动或停止 DB2 管理服务器。
SQL4414N
DB2 管理服务器不是活动的。
SQL4701N
已超出最大分区数(最大数目)。
SQL4702N
由应用程序句柄 应用程序句柄、工作单元标识 工作单元标识 和活动标识 活动标识 所标识的活动不存在。
SQL4703N
无法取消由应用程序句柄 应用程序句柄、工作单元 工作单元标识 和活动标识 活动标识 所标识的活动。原因码 = 原因码。
SQL4704N
只能对数据库或服务超类 数据库或服务超类名称 定义一个工作操作集。
SQL4705N
在映射工作操作 工作操作名称 中指定的服务子类不能是缺省服务子类。
SQL4706N
对工作类 工作类名称 指定的范围无效。
SQL4707N
工作负载 工作负载名称 不能处理请求,因为该工作负载无权访问数据库或已被禁用。
SQL4708N
目前,此工作单元仅允许 COMMIT 或 ROLLBACK 语句。
SQL4709N
不能从工作负载 工作负载名称 的定义中删除最后一个连接属性。
SQL4710N
不能删除工作负载 工作负载名称,因为它未被禁用、出现了活动的工作负载或者具有相关联的阈值。
SQL4711N
不能删除阈值 阈值名称。该阈值未被禁用,阈值队列不为空,或者活动正在该阈值的控制下运行。
SQL4712N
已超过阈值 阈值名称。原因码 = 原因码。
SQL4713N
已超过数据库或服务超类的最大服务类数目。无法创建服务类 服务类名称。
SQL4714N
请求无法执行,因为服务类 服务类名称 已被禁用。
SQL4715N
无法在缺省服务类下创建服务子类。
SQL4716N
与外部工作负载管理器进行通信时出错。
SQL4717N
无法删除服务类 服务类名称,因为它包含子类、相关联的工作负载、工作操作集、工作操作、连接、活动或阈值,未被禁用或者是缺省服务类。原因码 = 原因码。
SQL4718N
缺省服务类 服务类名称 无法按照指定方式进行改变或关联。原因码 = 原因码。
SQL4719N
PREVENT EXECUTION 工作操作 工作操作名称 已应用于该活动,因此该活动未运行。
SQL4720N
指定的工作操作类型对于工作操作 工作操作名称 无效。原因码为 原因码。
SQL4721N
无法创建阈值 阈值名称(原因码 = 原因码)。
SQL4722W
阈值未创建,因为已存在某个具有匹配定义的阈值 对象名。
SQL4723N
已经对连接属性 连接属性 定义值 连接属性值,或者检测到该值重复。
SQL4724N
值 连接属性值 无法删除,因为它不是对连接属性 连接属性 定义的。
SQL4725N
已取消该活动。
SQL4728W
您对用户定义的服务类指定的优先级设置高于缺省系统服务类的优先级设置。
SQL4901N
由于先前的错误,需要重新初始化“预编译器服务”。
SQL4902N
函数 函数 的参数 n 中至少有一个字符无效。
SQL4903N
函数 名称 的参数 n 的长度无效。
SQL4904N
函数 函数 的参数 n 的指针无效。
SQL4905N
函数 函数 的参数 n 的值超出有效范围。
SQL4906N
对于前滚操作,指定的表空间名的列表是不完整的集合。
SQL4907W
已恢复数据库 名称,但是前滚操作包括的表空间列表中一个或多个表处于设置完整性暂挂状态。
SQL4908N
对数据库 名称 的前滚恢复指定的表空间列表在节点 节点列表 上无效。
SQL4909W
已成功完成前滚恢复,但是有一个或多个表空间使它们的表置于 DRP/DRNP 状态。检查管理通知日志,以了解有关节点 节点列表 的详细信息。
SQL4910N
溢出日志路径 日志路径 无效。
SQL4911N
主变量数据类型无效。
SQL4912N
主变量数据长度超出范围。
SQL4913N
已经使用了主变量标记标识。
SQL4914N
主变量标记标识无效。
SQL4915N
已调用“sqlainit”函数。
SQL4916N
尚未调用“sqlainit”函数。
SQL4917N
选项数组中的元素 号码 无效。
SQL4918N
函数“sqlainit”的 term_option 参数无效。
SQL4919N
函数“sqlacmpl”的 task_array 参数太小。
SQL4920N
函数“sqlacmpl”的 token_id_array 参数太小。
SQL4921N
由于所有数据库分区上当前正在进行先前的时间点恢复,因此前滚命令失败。
SQL4930N
绑定或预编译选项或选项值 选项名 无效。
SQL4940N
子句 子句是不允许的或者是必需的。
SQL4941N
SQL 语句为空白或是空的。
SQL4942N
该语句在主变量 名称 中选择了不兼容的数据类型。
SQL4943W
INTO 子句中的主变量数与 SELECT 子句中的项数不相等。
SQL4944N
更新或插入值是 NULL,但对象列不能包含空值。
SQL4945N
参数标记的使用无效。
SQL4946N
未定义游标或语句名 名称。
SQL4947W
遇到了 INCLUDE SQLDA 语句,但被忽略。
SQL4950N
包含用户定义的 SQLDA 的复合 SQL 语句在此环境中不受支持。
SQL4951N
函数 名称 的 sqlda_id 参数无效。
SQL4952N
函数 名称 的 sqlvar_index 参数无效。
SQL4953N
函数 名称 的 call_type 参数无效。
SQL4954N
函数 名称 的 section_number 参数无效。
SQL4970N
在数据库分区 数据库分区列表 上,对数据库 名称 执行的前滚恢复操作无法到达指定的停止点(日志末尾或时间点)。前滚恢复操作在处理日志文件 日志文件 时停止。
SQL4971N
先前停止时对节点 节点号 上的数据库 名称 的前滚恢复失败。必须停止前滚恢复。
SQL4972N
不能将节点节点号上的日志数据块数据块移至数据库日志路径。
SQL4973N
不能完成对数据库 名称 的正向恢复,因为节点 节点列表 上的日志信息与目录节点上的相应记录不匹配。
SQL4974W
ROLLFORWARD DATABASE QUERY STATUS 命令遇到了 sqlcode sqlcode。
SQL4975W
成功地取消了前滚操作。必须在节点 节点列表 上复原数据库或选择的表空间。
SQL4976N
不能在非目录节点上提交此命令。
SQL4977N
已删除表导出目录 目录 无效。
SQL4978N
不能访问已删除的表。
SQL4979W
无法导出已删除的表数据。
SQL4980N
在数据库 名称 上的恢复在数据库分区 数据库分区号 上遇到损坏的日志文件 日志文件。
SQL4981W
从已删除的表中导出了数据,但是,包含一个或多个数据分区的表空间未包括在前滚列表中。这些数据分区的数据将不会存在于导出目录中。
SQL4990N
SQL 语句中最多支持 数字 个文字。每个文字的长度最多为 值 字节。
SQL4994N
由于用户中断请求使得预编译结束。
SQL4997N
授权标识无效。
SQL4998C
应用程序状态出错;数据库连接已丢失。
SQL4999N
发生“预编译器服务”或“运行时服务”错误。
SQL5001N
授权标识 无权更改数据库管理器配置文件。
SQL5005C
系统错误。
SQL5010N
到数据库管理器配置文件的路径名无效。
SQL5012N
主变量 主变量 不是一个精确的数字数据类型。
SQL5018N
数据库管理器配置文件中,关于与工作站的最大远程连接数的条目(numrc)不在有效范围内。
SQL5020N
数据库管理器配置文件中,关于工作站的节点名的条目(nname)无效。
SQL5021N
在数据库管理器配置文件中,索引重新创建参数(INDEXREC)的输入值无效。
SQL5022N
在数据库配置文件中,索引重新创建参数(INDEXREC)的输入值无效。
SQL5025C
数据库管理器配置文件不是当前的。
SQL5028N
sysadm_group 的值必须是实例所有者的主组。
SQL5030C
发行版号无效。
SQL5035N
数据库要求迁移至当前发行版。
SQL5040N
另一进程正使用 TCP/IP 服务器支持所必需的其中一个套接字地址。
SQL5042N
其中一个通信协议服务器支持进程未能启动。
SQL5043N
对一个或多个通信协议的支持未能成功启动。 但是,成功启动了核心数据库管理器功能。
SQL5047C
没有足够内存来执行此功能。
SQL5048N
数据库服务器的发行版级别不支持数据库客户机的发行版级别。
SQL5050C
数据库管理器配置文件的内容无效。
SQL5051N
不能以模式 模式名 创建由 限定符 限定的对象。
SQL5055C
数据库配置文件的内容无效。
SQL5060N
指定的配置参数标记无效。
SQL5061N
将指向结构 sqlfupd 的无效指针传送给了“配置服务”。
SQL5062N
在 sqlfupd 结构中,将无效指针传送给了“配置服务”。
SQL5065C
数据库管理器配置文件中的节点类型值无效。
SQL5066W
已截断标记 标记名称 的数据库配置参数值。
SQL5070N
配置命令中的 count 参数无效。它必须大于 0。
SQL5075N
配置实用程序被中断。
SQL5076W
更新成功完成。 NOTIFYLEVEL 的当前值将导致某些运行状况监视器通知不被发送至通知日志。
SQL5077N
此服务器发行版的“配置顾问程序”不支持参数 参数。支持的参数包括 支持的参数。
SQL5081N
数据库配置文件中,关于缓冲池大小的条目(buffpage)不在有效范围内。
SQL5083N
数据库配置文件中,关于初始日志文件大小的条目(logfile)不在有效范围内。
SQL5091N
在数据库配置文件中,关于一个日志文件扩展大小的条目(logext)不在有效范围内。
SQL5092N
在数据库配置文件中,关于允许的最大日志文件扩展数(logmaxext)的条目不在有效范围内。
SQL5093N
数据库管理器配置文件中用于表示代理进程堆大小的条目不在有效范围之内。
SQL5099N
由数据库配置参数 参数 指示的值 值 无效,原因码为 原因码。
SQL5100N
数据库管理器配置文件中,关于允许的并发数据库数的条目太大。
SQL5101N
数据库配置文件中定义日志文件参数(logprimary 和 logsecond)的条目不在有效范围内。
SQL5102E
产品的版本 版本名 不支持 DB2 工作负载管理器(WLM)。
SQL5103N
数据库配置文件中,关于缓冲池大小的条目(buffpage)对最大活动应用程序数(maxappls)而言太小。
SQL5112N
配置参数 参数 的值必须是 0 或 1。
SQL5113N
不能对 Unicode 数据库更新 ALT_COLLATE。
SQL5120N
不能同时修改旧的和新的日志参数。
SQL5121N
数据库配置文件中,关于配置选项的条目无效。
SQL5122N
对数据库的访问因与机器有关的检查而无效。
SQL5123N
因为访问日志控制文件时发生 I/O 错误,所以不能配置数据库 名称。
SQL5124N
DB2 未能更新或复位一个或多个分区上的数据库配置。原因码为 原因码。
SQL5126N
试图修改数据库管理器配置参数 参数,此参数对节点类型 节点类型代码 无效。
SQL5130N
为配置参数 参数 指定的值不在有效范围 起始范围 到 结束范围 内。
SQL5131N
为配置参数 参数 指定的值不在有效范围内。有效范围是“-1”,或从 起始范围 到 结束范围 之间。
SQL5132N
配置参数 参数 为 NULL 或太长。最大长度是 最大长度。
SQL5133N
配置参数 参数 的值 值 无效。有效值集合是 值列表。
SQL5134N
配置参数 tpname 包含无效字符。
SQL5135N
maxlocks 和 maxappls 配置参数的设置值未使用所有锁定列表空间。
SQL5136N
数据库管理器配置文件中,关于缺省数据库路径(dftdbpath)的条目无效。
SQL5137N
数据库管理器配置文件中,关于诊断目录路径的条目(diagpath)无效。
SQL5140N
数据库管理器配置参数“authentication”中的条目必须是下列 其中之一:SERVER、CLIENT、DCE、 KERBEROS、SERVER_ENCRYPT、 DCE_SERVER_ENCRYPT 或 KRB_SERVER_ENCRYPT。
SQL5141N
配置参数 avg_appls 超出范围。有效范围为从 1 到 maxappls 的值。
SQL5142N
配置参数 agentpri 不在有效范围内。
SQL5144W
参数更新已生效,但是只有将数据库配置参数 SELF_TUNING_MEM 设置为 ON 之后才会进行自动参数的自调整。
SQL5145W
参数更新已生效,但是取消激活了 AUTOMATIC 内存参数的调整,这是因为参数数目不足或者已将缓冲池设置为 AUTOMATIC。
SQL5146W
当 参数-2 为 参数-3 时,必须将 参数-1 设置为 参数-3。而 参数-1 已设置为 参数-3。
SQL5147N
如果 参数-2 为 AUTOMATIC,那么不能将 参数-1 设置为 MANUAL。
SQL5148W
已成功地将数据库配置参数 配置参数 更新为 AUTOMATIC,但是,只有将数据库管理器参数 SHEAPTHRES 设置为 0 之后,配置参数 的自调整才会生效。
SQL5150N
对配置参数 参数 指定的值小于允许的最小值 最小值。
SQL5151N
对配置参数 参数 指定的值小于允许的最小值 最小值 且不是 -1。
SQL5152N
对配置参数 参数 指定的值大于允许的最大值 最大值。
SQL5153N
不能完成更新,因为将违反下列关系:条件。
SQL5154N
不允许为“authentication” 和 参数 请求的配置值组合。原因码 = 原因码。
SQL5155W
更新成功完成。SORTHEAP 的当前值可能对性能产生负面影响。
SQL5156N
数据库管理器配置参数“trust_allclnts”的值必须是下列其中一项:NO、YES 或 DRDAONLY。
SQL5160N
当前不允许更新 参数。必须在所有应用程序都与数据库断开连接之后,才能应用对此参数进行的新更新。
SQL5161N
在执行下一个 DB2START 命令之前,不允许更新 参数。
SQL5180N
DB2 未能读取联合配置文件 文件名。
SQL5181N
联合配置文件 文件名 中的第 行号 行的格式无效。
SQL5182N
尚未设置必需的环境变量 变量名。
SQL5185N
不支持至 服务器类型 数据源的传递。
SQL5500N
DB2 未能读取供应商配置文件 文件名。
SQL5501N
供应商配置文件 文件名 中的第 行号 行的格式无效。
SQL6000N
QMF 数据 的 DB2 转换。
SQL6001N
“数据库管理器”没有异常结束。
SQL6002N
必须同时指定程序名和 CS:IP 参数。
SQL6003N
CS:IP 参数无效。
SQL6004N
函数 返回了意外的返回码 代码。
SQL6005N
读已下载的 QMF 文件时出错。
SQL6006N
写入输出文件时出错。
SQL6007N
不能将第 行 行第 列 列中的十进制数转换为 ASCII。
SQL6008N
命令中指定的文件不处于 QMF 数据格式。
SQL6009N
从 QMF 导出的文件包含宽度 宽度 太长的列 名称。最大列宽是 4000 字节。
SQL6010N
下载的 QMF 文件带有 255 个以上的数据列。
SQL6011N
不能处理列 名称(第 列号 列)的数据类型 号码(类型文本)。
SQL6012N
对命令指定了太多参数。
SQL6013N
主机文件名 主机文件名 太长,或未以字母字符开头。
SQL6014N
无效命令语法,冒号(“:”)应跟随着关键字。
SQL6015N
不识别关键字。
SQL6016N
System/370 文件名 名称 的操作数太多。
SQL6017N
Import 消息记录 名称 中可能包含更多信息。
SQL6018N
未指定 S/370 文件名。
SQL6019N
通信短会话标识 标识 太长或无效。
SQL6020N
指定了导入选项,但未同时提供数据库名称。
SQL6021N
数据导入成功。
SQL6022N
系统数据库目录不被所有节点共享。
SQL6023N
用户没有在表 名称 上运行“获取表分区信息”实用程序的权限。
SQL6024E
未在节点 节点号 上定义表或索引 名称。
SQL6025N
不能将在节点 节点-1 上备份的数据库复原到节点 节点-2 上。
SQL6026N
不能将目录节点为 节点-1 的数据库复原到目录节点为 节点-2 的数据库。
SQL6027N
数据库目录路径 路径 无效。
SQL6028N
因为在本地数据库目录中找不到数据库 数据库名称,所以目录数据库失败。
SQL6030N
START 或 STOP DATABASE MANAGER 失败。原因码为 原因码。
SQL6031N
在 db2nodes.cfg 文件的第 行号 行上出错。原因码为 原因码。
SQL6032W
在 总数 个节点上尝试了启动命令处理。成功启动了 已启动的数目 个节点。已启动了 已启动的数目 个节点。未能启动 未启动的数目 个节点。
SQL6033W
在 总数 个节点上尝试了停止命令处理。成功停止了 已停止的数目 个节点。已停止了 已停止的数目 个节点。未能停止 未停止的数目 个节点。
SQL6034W
节点 节点 未被任何数据库使用。
SQL6035W
数据库 数据库 正使用数据库分区 分区名称。
SQL6036N
START 或 STOP DATABASE MANAGER 命令已在处理之中。
SQL6037N
已达到 START 或 STOP DATABASE MANAGER 超时值。
SQL6038N
未定义分区键。
SQL6039N
分区列 列号 当前定义为不可空。
SQL6040C
没有 FCM 缓冲区里用。
SQL6041C
没有 FCM 连接条目可用。
SQL6042C
没有 FCM 消息锚可用。
SQL6043C
没有 FCM 请求块可用。
SQL6044N
数据类型值为 数据类型值 和长度为 长度 的字符串表示法 字符串 的语法不正确。
SQL6045N
不支持长度为 数据类型长度 的数据类型 数据类型值。
SQL6046N
指定的 DROP NODE 操作无效。
SQL6047N
因为表 名称 没有分区键,所以不能重新分发数据库分区组。
SQL6048N
处理 START 或 STOP DATABASE MANAGER 期间发生通信错误。
SQL6049N
在下列数据库分区上找不到 数据库名称 数据库的日志控制文件:数据库分区列表。
SQL6050N
访问下列数据库分区上的 数据库名称 数据库的日志控制文件时发生了 I/O 错误:数据库分区列表。
SQL6051N
未对节点 节点列表 上的前滚恢复配置数据库 名称。
SQL6052N
不能前滚数据库 名称,因为它在节点 节点列表 上不处于前滚暂挂状态。
SQL6053N
文件 文件 中存在错误。原因码 = 原因码。
SQL6054N
归档文件 名称 不是节点 节点号 上的数据库 名称 的有效日志文件。
SQL6055N
归档文件 名称 不属于节点 节点号 上的数据库 名称。
SQL6056N
数据库分区组无法重新分发。原因码 = 原因码。
SQL6057N
归档文件 名称 与已复原的数据库 名称 不相关,或者与节点 节点号 上先前已处理的日志文件不相关。
SQL6058N
由于检索节点 节点号 上的数据库 名称 的日志文件 名称 时发生错误 错误,前滚恢复停止。
SQL6059N
传送至“前滚”实用程序的时间点必须大于或等于 时间戳记,因为节点 节点列表 上的数据库 名称 包含晚于指定时间的信息。
SQL6061N
因为节点 节点列表 上丢失了日志文件,所以数据库 名称 上的前滚恢复不能到达指定的停止点(日志结束或时间点)。
SQL6062N
不能完成对数据库 名称 前滚恢复,因为在节点 节点列表 上的日志信息与目录节点上的相应记录不匹配。
SQL6063N
由于更改了日志文件大小,因此节点 节点列表 上停止了对数据库 名称 进行前滚恢复。
SQL6064N
数据重新分发期间,发生 SQL 错误 sqlcode。
SQL6065N
写入文件 文件 时出错。
SQL6067W
ROLLFORWARD DATABASE QUERY STATUS 命令遇到 sqlcode sqlcode。
SQL6068W
已成功取消前滚操作。必须在节点 节点列表 上复原数据库。
SQL6069N
不能在非目录节点上提交 ROLLFORWARD DATABASE 命令。
SQL6071N
因为已将新节点添加至系统,所以不能处理请求的操作。在可以执行该操作之前,系统必须停止并重新启动。
SQL6072N
因为指定的节点已是活动的,所以带有 RESTART 选项的 DB2START 不能继续。
SQL6073N
“添加数据库分区”操作失败。SQLCODE = sqlcode。
SQL6074N
因为当前正在执行“创建数据库”或“删除数据库”操作,所以“添加节点”操作失败。
SQL6075W
“启动数据库管理器”操作已成功地添加了数据库分区。直到所有数据库分区都停止并再次启动之后,该数据库分区才会处于活动状态。
SQL6076W
警告!此命令将除去此实例在节点上的所有数据库文件。在继续之前,通过运行 DROP NODE VERIFY 命令确保在此节点上没有用户数据。
SQL6077W
db2stop DROP NODENUM 过程成功结束,但未能除去所有文件。请参阅文件 文件 以了解详细信息。
SQL6078N
db2stop DROP NODENUM 过程未能更新数据库 数据库名称 的数据库信息。
SQL6079W
已成功取消 db2stop DROP NODENUM 命令。
SQL6080W
“启动数据库管理器”操作已成功添加新节点,但尚未在该节点上创建数据库分区。在所有节点停止并再次启动之前,该节点不活动。
SQL6081N
通信错误导致 DB2STOP FORCE 命令在此节点上超时。
SQL6100N
数据文件中的分区映射与数据库的分区映射不同。
SQL6101N
此数据文件包含节点 节点-1 的数据,但 Load 实用程序与节点 节点-2 相连。
SQL6102W
保留参数 名称 以供将来使用。其值应设置为 缺省值。
SQL6103C
发生了意外的实用程序错误。原因码 = 原因码。
SQL6104N
Load 实用程序不支持创建索引。
SQL6105W
Load 实用程序已完成处理。装入后执行至某时间点的“前滚” 将不成功。如果要求数据库必须是可恢复的,那么现在进行数据库备份。
SQL6106N
指定了文件类型修饰符“NOHEADER”,但在其中定义了表的节点组不是单节点节点组。
SQL6107N
数据文件中的分区键信息不正确。
SQL6108N
在数据文件头中定义的分区键数(数值-1)与对表定义的分区键数(数值-2)不匹配。
SQL6109N
实用程序期望分区列 列名-1,但找到分区列 列名-2。
SQL6110N
实用程序期望列 列名-1 的分区列类型为类型 列类型-1,但是数据文件将其列示为类型 列类型-2。
SQL6111N
不能在 newlogpath 指定的路径下创建子目录。
SQL6112N
不能执行请求的更改。结果配置参数设置值无效。原因码为 原因码。
SQL6500W
Load 命令中的 RESTARTCOUNT 可能导致某些问题。
SQL6501N
未在装入命令中给定数据库名称。
SQL6502N
未指定数据文件的路径名(参数:data_path)。 
SQL6504N
配置文件中的输出节点列表规范(参数:outputnodes)有错。
SQL6505N
在装入命令中的分区数据库分区列表规范(参数:PARTITIONING_DBPARTNUMS)中有错误。
SQL6506N
程序未能从系统目录表中抽取表 表名 的分区键信息。
SQL6507N
配置文件中的检查级别(参数:check_level)无效。
SQL6508N
程序未能为 ftp 进程创建输出管道。
SQL6509N
程序无法为分区代理程序创建输入管道。
SQL6510N
程序未能在分区 分区号 的本地非 NFS 空间上创建临时目录。
SQL6511N
装入程序无法为分区 分区号 上的分区代理程序创建输出。
SQL6512N
装入程序无法为分区 分区号 上的合并代理程序创建输入管道。
SQL6513N
装入程序无法为分区 分区号 上的装入代理程序创建输入管道。
SQL6514N
程序不能读取节点配置文件:节点配置文件。
SQL6515N
程序在配置文件中找不到 Load 命令。
SQL6516N
程序未能与数据库 数据库名称 相连。
SQL6517N
装入程序无法从系统目录表中抽取分区列表,表 表名 就是在该分区列表中定义的。
SQL6518N
记录长度(Load 命令中的 reclen)无效。
SQL6519N
配置文件中的方式(参数:mode)方式 无效。
SQL6520N
程序未能为进程创建输出管道,该进程生成分割文件的头信息。
SQL6521N
此程序的配置文件 配置文件 不存在。
SQL6522N
程序在 Load 命令中找到输入数据文件的路径名。
SQL6523N
在节点配置(db2nodes.cfg)文件中未定义分区数据库分区列表(参数:PARTITIONING_DBPARTNUMS)中的元素 分区号。
SQL6524N
输出分区列表(参数:OUTPUT_DBPARTNUMS)中的元素 分区号 不是在其中定义表的分区列表的成员。
SQL6525N
程序不能读取输入数据文件 文件名。
SQL6526N
程序不能写入当前工作目录 当前工作目录。
SQL6527N
将在其中收集统计信息数据的分区(参数:RUN_STAT_DBPARTNUM)不是输出分区列表的成员。
SQL6528N
Load 命令中未指定记录长度。
SQL6529N
在装入命令中未指定“无标题”选项(noheader)。
SQL6530N
一个分区键的数据类型是浮点型或双精度型。
SQL6531N
程序未能复位表空间停顿。
SQL6532N
不能将 Load 命令中的 savecount 设为非零。
SQL6533N
不能将 Load 命令中的 restartcount 设为非零。
SQL6534N
.netrc 文件 netrc-文件 中有错误。
SQL6535N
方式 PARTITION_ONLY 或 ANALYZE 无效。
SQL6536N
程序 程序名 未能打开文件 文件名 以进行读取。
SQL6537N
程序 程序名 未能打开文件 文件名 以进行写操作。
SQL6538N
装入程序无法读取分区文件 分区文件。
SQL6539N
在工作环境中,在 命令列表 中至少有一个命令找不到。
SQL6540N
在装入命令中指定的文件类型 文件类型 无效。
SQL6550N
未能打开分区映射文件 映射文件名 以进行写操作。
SQL6551N
试图写入该分区映射文件时出错。
SQL6552N
尝试打开临时配置文件 文件名 以进行写操作时出错。
SQL6553N
尝试写入临时配置文件 文件名 时出错。
SQL6554N
试图远程执行进程时出错。
SQL6555N
Load 实用程序遇到意外通信错误。
SQL6556W
在文件 文件名 的末尾检测到不完整的记录。
SQL6557N
未能检索缺省节点号。
SQL6558N
该实用程序未能确定当前工作目录和/或驱动器。
SQL6559N
向 AutoLoader 实用程序提供了无效的命令行选项。
SQL6560N
节点 节点号 在 db2nodes.cfg 文件中未出现,该节点是用于分区的执行节点。
SQL6561N
用于装入的目标节点 节点号 不出现在节点组中。
SQL6562N
实用程序不能检索该实例名。
SQL6563N
未能检索当前用户标识。
SQL6564N
提供的密码无效。
SQL6565I
用法:db2xxld [-config config-file] [-restart] [-terminate] [-help]
SQL6566N
AutoLoader 配置文件中丢失了 LOAD 命令。
SQL6567N
在 AutoLoader 配置文件中多次出现了 选项名 选项。
SQL6568I
Load 实用程序现在正在分派所有的 请求类型 请求。
SQL6569I
AutoLoader 现在正在发出所有分割请求。
SQL6570I
AutoLoader 正在等待所有分割程序完成。
SQL6571I
Load 实用程序正在等待所有操作完成。
SQL6572I
LOAD 操作已在分区 节点号 上开始。
SQL6573I
已完成远程执行在分区 节点号 上的分割实用程序,远程执行代码为 代码。
SQL6574I
实用程序已从源数据中读取了 MB-数 兆字节。
SQL6575I
实用程序已从用户数据中读取 MB-数 兆字节。
SQL6576N
AutoLoader 实用程序遇到线程错误。原因码为 原因码,返回码为 返回码。
SQL6577N
AutoLoader 实用程序不支持装入命令中的 ROWCOUNT 选项。
SQL6578N
无效 AutoLoader 选项。仅可对 SPLIT_AND_LOAD 或 LOAD_ONLY 方式指定 RESTART/TERMINATE 选项。
SQL6579N
在 AutoLoader 配置文件中的 LOAD 命令无效。AutoLoader 的 RESTART 和 TERMINATE 选项分别用于执行 LOAD RESTART 和 LOAD TERMINATE 操作。
SQL6580I
在阶段 重新启动阶段 中,LOAD 正在节点 节点号 上重新启动。
SQL6581I
Load 在节点 节点号 上不能重新启动。
SQL6582I
不需要在节点 节点号 上重新启动 LOAD。
SQL6583N
分区键定义与分区数据库装入方式 装入方式 不兼容
posted @ 2013-07-16 20:03 何杨 阅读(3368) | 评论 (0)编辑 收藏

在命令行窗口输入db2cmd,再执行命令。
posted @ 2013-07-16 10:00 何杨 阅读(581) | 评论 (0)编辑 收藏

系统变成Win7后,因需要安装DB2 97版,但以前一蹴而就的过程却在90%处中断了,错误是DB29501E 如下图所示:


多次重试无效,同事也没有遇到过同样的错误,一筹莫展中,只好搁置先做别的。
在安装Install manager后,再试DB2重装,居然通过了。

估计是它们共享一个gre的原因,DB2自带的在Win7中运行不好,但Install Manager的可以。故先装Installl Manager再装DB2就OK了。
也许还有别的原因,但目前只能这样认为。

2013年7月16日9:35:07
posted @ 2013-07-16 09:35 何杨 阅读(931) | 评论 (0)编辑 收藏

对此只要在服务里启动DB2相关服务即可。

参考:http://hi.baidu.com/cf2928/item/70e61edf9539d99d270ae758

我在控制中心新建个数据库可是总出现这个样的问题:SQL4414N  “DB2 管理服务器”处于不活动状态。 


解释: 
除非“DB2 管理服务器”是活动的,否则不能处理请求。 
用户响应: 
通过发出命令 DB2ADMIN START 启动“DB2
管理服务器”,并重新发出请求。 
DB2主要的那2 个服务,
DB2DAS-DB2DAS00,DB2-DB2-0 主要是这2个服务,db2admin start这个是启动
SQL4409W  “DB2 管理服务器”,启动了DB2DAS-DB2DAS00服务
 创建新库和表了
posted @ 2013-07-15 21:25 何杨 阅读(471) | 评论 (0)编辑 收藏

WIN7下装DB2,启动任务中心、控制中心报DB2JAVIT:RC=9505。

解决方案:进入(计算机—>管理—>本地用户和组用户)把用户加入到DB2ADMNS或DB2USERS,重启后,即可解决。


参考:http://blog.163.com/dream11867@126/blog/static/2695265120121893417152/

posted @ 2013-07-15 21:13 何杨 阅读(1755) | 评论 (1)编辑 收藏

有人说会自动降频1078使用,试了,大忽悠,无效。
posted @ 2013-07-15 16:56 何杨 阅读(613) | 评论 (0)编辑 收藏

如图,其他语言系统自己参照:

posted @ 2013-07-15 16:54 何杨 阅读(357) | 评论 (0)编辑 收藏

    FROM:

http://blog.csdn.net/pangdingshan/article/details/7198760



   系统环境:windows 7 旗舰版

      软件版本:IBM DB2数据库(DB2_ESE_97_Win_x86)

      准备工作:关闭防火墙及杀软等安全防护软件

     本文是事后整理的,可以在循序上有些乱,有些步奏也是省略的,省略的都是选择默认选项

1.   运行安装目录下的  setup.exe 程序,点击“下一步”

2.    选择“我接受许可证协议中的全部条款”,点击“下一步”

3.  根据自己需求选择安装方式,我选择“典型安装”,点击“下一步”

4.   选择“在此计算机上安装DB2Enterprise Server Edition ” ,点击“下一步”

5.    更改安装路径,点击“下一步”

6.    默认选项,点击“下一步”

 

7.    设置密码,点击“下一步”

 

8. 不勾选“设置DB2服务器以发送通知”,点击“下一步”

9.    勾选“启动操作系统安全性”,点击“下一步”

10.   勾选“准备DB2工具目录”,点击“下一步”

 

11.  点击“下一步”,进行安装

  安装成功后会有提示



我安装的时候出现以下问题:
posted @ 2013-07-14 00:11 何杨 阅读(262) | 评论 (0)编辑 收藏

http://www.cnblogs.com/mingmingruyuedlut/archive/2011/11/04/2235630.html


1:

Internet Information Services 7.5

Error Summary

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

Detailed Error Information
Module IIS Web Core
Notification Unknown
Handler Not yet determined
Error Code 0x80070005
Config Error Cannot read configuration file due to insufficient permissions
Config File \\?\C:\Users\EricSun\Documents\Visual Studio 2010\WebSites\SSOAuthWebSite1\web.config
Requested URL http://10.2.5.153:10001/
Physical Path  
Logon Method Not yet determined
Logon User Not yet determined
Config Source
 -1:     0:  
Links and More InformationThis error occurs when there is a problem reading the configuration file for the Web server or Web application. In some cases, the event logs may contain more information about what caused this error.

View more information »

 

Cause:1) 没有向iis中注册.net framework(引起的原因之一:先安装了.net framework,后安装的iis)

    2) 没有对IIS中所配置的site有足够的操作权限(Modify权限)

Solution:

    1) 到C:\Windows\Microsoft.NET\Framework64\v2.0.50727下,

      用命令向iis中重新注册一下.net framework:aspnet_regiis -i

    2) IIS Manager --> Sites --> 相应的site --> 点击右键 --> Edit Permissions --> Security --> Group or user names --> Edit --> Add --> 添加赋予Full Control权限(实质上带有Modify的权限就可以)的Everyone用户

 


2:

Server Error in '/' Application.


Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.

Source Error:

Line 9:  	</connectionStrings> Line 10: 	<system.web> Line 11: 		<compilation debug="true" targetFramework="4.0"/> Line 12: 		<authentication mode="Forms"> Line 13: 			<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>


Source File: C:\Users\EricSun\Documents\Visual Studio 2010\WebSites\SSOAuthWebSite1\web.config    Line: 11


Version Information: Microsoft .NET Framework Version:2.0.50727.4963; ASP.NET Version:2.0.50727.4955

 

Cause:当前程序所运行的.NET Framework版本与IIS中相应site所设置的.NET Framework版本不相同

Solution:启动IIS Manager --> Application Pools --> 选择相应的Name(site) --> 点击右键 --> Advanced Settings --> (General).NET Framwork Version --> 由2.0更改到4.0即可

 

3:

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0016: Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ae25944\4afe0277\App_global.asax.ke894tgr.dll' -- 'Access is denied. '

Source Error:

 
[No relevant source lines]


Source File:    Line: 0


Show Detailed Compiler Output:

c:\windows\system32\inetsrv> "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /t:library /utf8output /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.Extensions\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Extensions.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.Services\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Web\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Web.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel\v4.0_4.0.0.0__b77a5c561934e089\System.ServiceModel.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Activities\v4.0_4.0.0.0__31bf3856ad364e35\System.Activities.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Activation\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Activation.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Activities\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Activities.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.ApplicationServices\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.ApplicationServices.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.WorkflowServices\v4.0_4.0.0.0__31bf3856ad364e35\System.WorkflowServices.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.IdentityModel\v4.0_4.0.0.0__b77a5c561934e089\System.IdentityModel.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll" /R:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.DynamicData\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.DynamicData.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll" /out:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ae25944\4afe0277\App_global.asax.ke894tgr.dll" /debug- /optimize+ /w:4 /nowarn:1659;1699;1701 /warnaserror-  "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ae25944\4afe0277\App_global.asax.ke894tgr.0.cs" "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ae25944\4afe0277\App_global.asax.ke894tgr.1.cs"   Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1 Copyright (C) Microsoft Corporation. All rights reserved.  error CS0016: Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\2ae25944\4afe0277\App_global.asax.ke894tgr.dll' -- 'Access is denied. ' 




Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

 

Cause:对Windows下的temp文件夹缺少操作权限

Solution: 将Windows下的temp文件夹 --> properties --> security --> create owner --> add --> 添加赋予Full Control权限的Everyone用户

 

4:

Server Error in '/' Application.


Login failed for user 'IIS APPPOOL\SSO1'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Login failed for user 'IIS APPPOOL\SSO1'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


Stack Trace:

[SqlException (0x80131904): Login failed for user 'IIS APPPOOL\SSO1'.]    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +6333696    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +412    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363    System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +53    System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout) +6348638    System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +6348553    System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +352    System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +831    System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +49    System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +6350358    System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +78    System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1938    System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +89    System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +6353246    System.Data.SqlClient.SqlConnection.Open() +300    System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext context, Boolean revertImpersonate) +150    System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation) +4679471    System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +3720151    System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +189    System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +202    System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +225    System.Web.UI.WebControls.Login.AttemptLogin() +166    System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +93    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +52    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3707 



Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

 

Cause:IIS中的Application pool中相应site的Identity类型错误

Solution: IIS Manager --> Application Pools --> 找到相应的site --> 左键选择Advanced Settings --> 将Process Model中的Identity类型换成LocalSystem

此问题(4)的解决方法可以详 见:http://blogs.microsoft.co.il/blogs/shlomo/archive/2009/11/09/system- data-sqlclient-sqlexception-login-failed-for-user-iis-apppool-defaultapppool.aspx

 

5:

 

Server Error in '/' Application.
--------------------------------------------------------------------------------

 

Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

 

Exception Details: System.TypeLoadException: Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

 

Source Error:

 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

 

Stack Trace:

 


[TypeLoadException: Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.]
System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) +0
System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName) +314
System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +95
System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +124
System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, XmlNode node, Boolean checkAptcaBit, Boolean ignoreCase) +76

 

[ConfigurationErrorsException: Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.]
System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, XmlNode node, Boolean checkAptcaBit, Boolean ignoreCase) +11355388
System.Web.Configuration.Common.ModulesEntry.SecureGetType(String typeName, String propertyName, ConfigurationElement configElement) +69
System.Web.Configuration.Common.ModulesEntry..ctor(String name, String typeName, String propertyName, ConfigurationElement configElement) +62
System.Web.HttpApplication.BuildIntegratedModuleCollection(List`1 moduleList) +301
System.Web.HttpApplication.GetModuleCollection(IntPtr appContext) +1332
Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleReflectionUtil.GetIntegratedModuleCollection(HttpApplication target, IntPtr appContext) +34
Microsoft.Web.Infrastructure.DynamicModuleHelper.CriticalStatics.Init(HttpApplication context) +264
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +546
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +325
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

 

[HttpException (0x80004005): Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309

 

 

 


--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

 

 

 

Cause:.Net Framework4先安装,IIS后安装,导致.Net Framework4.0没有注册到IIS中

 

Solution: 在Windows的文件夹里找到一个安装程序,在CMD里执行,具体如下:

      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -iru
      显示如下:
      Start installing ASP.NET (4.0.30319).
      ..........
      Finished installing ASP.NET (4.0.30319).
      这样就可以了。
 
此问题的更详细的原因请看: http://msdn.microsoft.com/zh-cn/library/k6h9cz8h.aspx
posted @ 2013-07-12 13:22 何杨 阅读(980) | 评论 (0)编辑 收藏

char* HcC21PrintPres::getStringFromDouble(double d){
    char  sbuf2[256];

    sprintf(sbuf2,"%.3f",d);// 保留位数自己可调

    for(;sbuf2[strlen(sbuf2) - 1] == '0';){
        sbuf2[strlen(sbuf2) - 1] = '\0';
        if(sbuf2[strlen(sbuf2) - 1] == '.'){
            sbuf2[strlen(sbuf2) - 1] = '\0';
            break;
        }
    }

    return sbuf2;
}
这种写法还是挺有意思的.
posted @ 2013-07-11 10:33 何杨 阅读(278) | 评论 (0)编辑 收藏

http://blog.csdn.net/masikkk/article/details/5634886

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。
  sprintf 是个变参函数,定义如下:
  int sprintf( char *buffer, const char *format [, argument] ... );
  除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:

  (1)格式化字符串上。

  printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。
  格式化数字字符串
  sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa。
  如:
  //把整数123 打印成一个字符串保存在s 中。
  sprintf(s, "%d", 123); //产生"123"
  可以指定宽度,不足的左边补空格:
  sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
  当然也可以左对齐:
  sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
  也可以按照16 进制打印:
  sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
  sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
  这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。
  sprintf(s, "%08X", 4567); //产生:"000011D7"
  上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。
  这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它:
  short si = -1;
  sprintf(s, "%04X", si);
  产生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底 是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。
  如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位):
  sprintf(s, "%04X", (unsigned short)si);
  就可以了。或者:
  unsigned short si = -1;
  sprintf(s, "%04X", si);
  sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。注意8 进制和16 进制都不会打
  印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。
  控制浮点数打印格式
  浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保
  留小数点后6 位数字,比如:
  sprintf(s, "%f", 3.1415926); //产生"3.141593"
  但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表
  示打印的宽度,n 表示小数点后的位数。比如:
  sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
  sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
  sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"
  注意一个问题,你猜
  int i = 100;
  sprintf(s, "%.2f", i);
  会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:
  sprintf(s, "%.2f", (double)i);
  第一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不 知道当年被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编 排的结果是否正确。
  

    (2)字符/Ascii 码对照

  我们知道,在C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,
  int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把
  这个类型叫做“byte”,然后现在就可以根据实际情况,使用byte 或short 来把char 通过typedef 定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII 字符。以下程序段把所有可见字符的ASCII 码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16 进制数增加”0X”前缀):
  for(int i = 32; i < 127; i++) {
  printf("[ %c ]: %3d 0x%#04X/n", i, i, i);
  }


  (3)连接字符串

  sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连
  接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时
  在它们中间插入别的内容,总之非常灵活)。比如:
  char* who = "I";
  char* whom = "CSDN";
  sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "
  strcat 只能连接字符串(一段以’’结尾的字符数组或叫做字符缓冲,null-terminated-string),但有时我们有两段字符缓冲区,他们并不是以 ’’结尾。比如许多从第三方库函数中返回的字符数组,从硬件或者网络传输中读进来的字符流,它们未必每一段字符序列后面都有个相应的’’来结尾。如果直接 连接,不管是sprintf 还是strcat 肯定会导致非法内存操作,而strncat 也至少要求第一个参数是个null-terminated-string,那该怎么办呢?我们自然会想起前面介绍打印整数和浮点数时可以指定宽度,字符串 也一样的。比如:
  char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
  char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
  如果:
  sprintf(s, "%s%s", a1, a2); //Don't do that!
  十有八九要出问题了。是否可以改成:
  sprintf(s, "%7s%7s", a1, a2);
  也没好到哪儿去,正确的应该是:
  sprintf(s, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
  这可以类比打印浮点数的”%m.nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:
  sprintf(s, "%.6s%.5s", a1, a2);//产生:"ABCDEFHIJKL"
  在许多时候,我们或许还希望这些格式控制符中用以指定长度信息的数字是动态的,而不是静态指定的,因为许多时候,程序要到运行时才会清楚到底需要取字 符数组中的几个字符,这种动态的宽度/精度设置功能在sprintf 的实现中也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度的常数数字的位置,同样,而实际的宽度或精度就可以和其它被打印的变量一样被提供出来,于是,上面的例子 可以变成:
  sprintf(s, "%.*s%.*s", 7, a1, 7, a2);
  或者:
  sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);
  实际上,前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值,比如:
  sprintf(s, "%-*d", 4, 'A'); //产生"65 "
  sprintf(s, "%#0*X", 8, 128); //产生"0X000080","#"产生0X
  sprintf(s, "%*.*f", 10, 2, 3.1415926); //产生" 3.14"


  (4)打印地址信息

  有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:
  sprintf(s, "%u", &i);
  不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:
  sprintf(s, "%08X", &i);
  然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:
  sprintf(s, "%p", &i);
  我觉得它实际上就相当于:
  sprintf(s, "%0*x", 2 * sizeof(void *), &i);


  (5)利用sprintf 的返回值

  较少有人注意printf/sprintf 函数的返回值,但有时它却是有用的,spritnf 返回了本次函数调用
  最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后,你无须再调用一次
  strlen 便已经知道了结果字符串的长度。如:
  int len = sprintf(s, "%d", i);
  对于正整数来说,len 便等于整数i 的10 进制位数。
  下面的是个完整的例子,产生10 个[0, 100)之间的随机数,并将他们打印到一个字符数组s 中,
  以逗号分隔开。
  #include
  #include
  #include
  int main() {
  srand(time(0));
  char s[64];
  int offset = 0;
  for(int i = 0; i < 10; i++) {
  offset += sprintf(s + offset, "%d,", rand() % 100);
  }
  s[offset - 1] = '/n';//将最后一个逗号换成换行符。
  printf(s);
  return 0;
  }
  设想当你从数据库中取出一条记录,然后希望把他们的各个字段按照某种规则连接成一个字
  符串时,就可以使用这种方法,从理论上讲,他应该比不断的strcat 效率高,因为strcat 每次调用
  都需要先找到最后的那个’’的位置,而在上面给出的例子中,我们每次都利用sprintf 返回值把这
  个位置直接记下来了。
  使用sprintf 的常见问题
  sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访
  问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通
  常用眼睛再把出错的代码多看几眼就看出来了。
  ?? 缓冲区溢出
  第一个参数的长度太短了,没的说,给个大点的地方吧。当然也可能是后面的参数的问
  题,建议变参对应一定要细心,而打印字符串时,尽量使用”%.ns”的形式指定最大字符数。
  ?? 忘记了第一个参数
  低级得不能再低级问题,用printf 用得太惯了。//偶就常犯。:。(
  ?? 变参对应出问题
  通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤
  其是对应”*”的那些参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你
  欺她太甚了(编译器是obj 和exe 的妈妈,应该是个女的,:P)。
  strftime
  sprnitf 还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也
  是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为
  了在出现问题时可以推卸责任吧。这里举个例子:
  time_t t = time(0);
  //产生"YYYY-MM-DD hh:mm:ss"格式的字符串。
  char s[32];
  strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));
  sprintf 在MFC 中也能找到他的知音:CString::Format,strftime 在MFC 中自然也有她的同道:
  CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅。

 

 

 

 

sprintf 用法总结(2009-08-25 09:36:24)标签:it   分类:C++
  sprintf,将各种类型的数据够造成字符串。

  sprintf是个变参函数,int sprintf(char *buffer,const char *format[,argument]...);除了前两个参数类型固定外,后面可以接任意多个参数,而它的精华,则在第二个参数:格式化字符串上。

  printf和sprintf都使用格式化字符串来指定串的格式,在格式串内部使 用一些以“%”开头的格式说明符(format specification)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的 字符串。

 一、格式化数字字符串

  sprintf最常见的应用之一莫过于把整数打印到字符串中,所以sprintf在大多数场合可以替代itoa.

    %-8d 代表宽度八位,左对齐(没有负号为右对齐),整数的十进制

  %x小写16进制  %X大写16进制

    符号扩展问题:参数压栈默认四字节,即8位16进制。应该让编译器做0扩展而不是符号扩展。

  如  sprintf(s,"%04X",(unsigned short)si);

    %o 8进制格式化字符串。

  控制浮点数打印格式,使用格式符"%f"控制,默认保留小数点后6位数字。

  %m.nf m表示打印的宽度,n表示小数点后的位数

  sprintf(s,"%m.nf",i)其中i 必须为浮点类型的

二、字符/ASCII码对照

  %c打印一个整数,可以看到整数所对应的ASCII值

  for(int i=32 ;i<127;i++)
  {
    printf("[%c]:%3d 0x%#04X/n",i,i,i);
  }

 #与%X合用时自动为16进制数增加“0X”前缀。

三、连接字符串

 可以在许多场合替代strcat,sprintf能够一次连接多个字符串。

 %s可以参照浮点数控制的%m.n m表示宽度,n表示从相应的字符串中最多取用的字符数,通常m没什么用。

  对于动态的,可以采用sprintf(s,"%.*s%.*s",7,a1,7,a2)或sprintf(s,"%.*s%.*s",sizeof(a1),a1,sizeof(a2),a2);  

四、打印地址信息

有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:
sprintf(s, "%u", &i);
不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:
sprintf(s, "%08X", &i);
然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:
sprintf(s, "%p", &i);
我觉得它实际上就相当于:
sprintf(s, "%0*x", 2 * sizeof(void *), &i);

五、返回值

返回了本次函数调用最终打印到字符缓冲区中的字符数目。
六、strftime

专门用于格式化时间字符串。需调用者指定缓冲区的最大长度。

strftime(s,sizeof(s),"%Y-%m-%d %H:%M:%S",localtime(&t));
posted @ 2013-07-10 15:31 何杨 阅读(229) | 评论 (0)编辑 收藏

http://sddhn.blog.163.com/blog/static/1281877920129191574926/


在DB2中从客户端访问服务器端的数据库时,不能直接用connect命令,而必须先建立通信node,再在node的基础上建立数据库连接。在命令行的具体操作如下:
->db2 catalog tcpip node ${nodeName} remote ${serverName} server ${portNumber} 
->db2 catalog db ${dbName} as ${dbAlias} at node ${nodeName} 
->db2 connect to ${dbAlias} user ${userName} using ${passWord}
->db2 terminate
说明:
${nodeName}:任意起的一个结点名,注意长度限制
${serverName}:远程数据库所在服务器名称或IP地址
${portNumber} :远程数据库端口号
${dbName}:远程数据库的名字
${dbAlias}:编目到本地后的数据库别名
${userName}:连接数据库用户名
${passWord}:连接数据库密码
其他相关一些重要的DB2命令
  1. 查看本地节点目录
  命令窗口中输入:db2 list node directory
  2. 编目一个TCP/IP节点
   命令窗口:db2 catalog tcpip node <node_name> remote <hostname|ip_address> server <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>

Eg: Open a command shell and input the commands below:

db2 catalog tcpip node koubeSvr remote 9.119.100.222 server 50000

db2 catalog db KOUBE23 as KOUBE23 at node koubeSvr

  3. 取消节点编目
  db2 uncatalog node <node_name>
  4. 查看系统数据库目录
  db2 list database directory
  5. 查看本地数据库目录
  db2 list database directory on <盘符>
  在本地数据库目录中有而系统数据库目录中没有的数据库不能访问,可以在控制中心中选中<数据库>右键单击选择添加,然后输入需要添加的数据库名称或者点击刷新按钮选择数据库,加入数据库后即可以访问。
  6. 编目数据库
  db2 catalog database <db_name> as <db_alias> at node <node_name>
  7. 取消数据库编目
  db2 uncatalog database <db_name>
  8. 测试远程数据库的连接
  db2 connect to <db_alias> user <user_id> using <password>
posted @ 2013-07-08 15:23 何杨 阅读(336) | 评论 (0)编辑 收藏

工具:
这个工具用于将ASM文件编译.
http://www.blogjava.net/Files/heyang/nasm-2.07-installer.rar

建议使用Notepad++书写asm,然后用命令行编译:
>nasm a.asm -o a.com

这个工具能将BIN写入软盘扇区:
http://www.blogjava.net/Files/heyang/FloppyWriter.zip

以下是一个例程:
%define _BOOT_DEBUG_
%ifdef _BOOT_DEBUG_
    org 0100h
%else
    org 07c00h
%endif
    mov ax,cs
    mov ds,ax
    mov es,ax
    call DispStr;
    jmp $;
DispStr:
    mov ax,BootMessage
    mov bp,ax
    mov cx,
32
    mov ax,01301h
    mov bx,000ch
    mov dl,
0
    
int 10h
    ret
BootMessage:    db 
"Hello,OS world!XXXXXX is here."
times 
510-($-$$) db 0;
dw 
0xaa55;
posted @ 2013-05-30 20:40 何杨 阅读(152) | 评论 (0)编辑 收藏

/**********************************************
* 获取相对于今天的日期
* 2013年4月29日22:21:23
*********************************************
*/
function GetDateStr(AddDayCount) {
    
var dd = new Date();
    dd.setDate(dd.getDate()
+AddDayCount);//获取AddDayCount天后的日期
    var y = dd.getFullYear();
    
    
var m = dd.getMonth()+1;//获取当前月份的日期
    m=parseInt(m,10);
    
if(m<10){
        m
="0"+m;
    }
    
    
var d = dd.getDate();
    d
=parseInt(d,10);
    
if(d<10){
        d
="0"+d;
    }
    
    
return y+"-"+m+"-"+d;
}

示例:
var today=GetDateStr(0);
var yesterday=GetDateStr(-1);
var thedaybeforeyesterday=GetDateStr(-2);

posted @ 2013-05-06 16:56 何杨 阅读(202) | 评论 (0)编辑 收藏

1.dom初始化
$(document).ready(
    function(){
        ...// 这里写初始化
    }
);

2.给所有class为channel的元素设定点击事件.
$('.channel').click(
     function(){
         ...
    }
);

3.给id=menuDiv下的ul下的li中的设定点击事件.
$("#menuDiv>ul>li>a").click{   
    function(){
         ...
    }
);
posted @ 2013-05-02 21:18 何杨 阅读(229) | 评论 (0)编辑 收藏

代码:
<div class="XXX">
    <img class="X" src="XX">
</div>

方法:
设置div与img等高,其height=line-height,这样Img就被DIV夹在中间了.
再设置div的margin-top=margin-bottom,这样上下外边距相等,img就随着div被夹在中间了.
posted @ 2013-04-30 21:10 何杨 阅读(339) | 评论 (0)编辑 收藏

1.调用new Object,如
var obj=new Object();
obj创建出来后没有任何属性或方法,需要手工进行添加
obj.property=XX;
obj.method=function(){...};

2.用大括弧{}来直接描述属性或方法
var obj={property01:value01,property02:value02,...};

3.自定义一个构建函数,然后用new来创建
function func(value01,value02,...,value0n){
     this.property01=value01;
     this.property02=value02;
     ...
     this.property0n=value0n;
}

var obj=new func(v1,v2,..,vn);
posted @ 2013-04-29 16:10 何杨 阅读(229) | 评论 (0)编辑 收藏

因为在click事件中,使用return false;语句,能让浏览器认为用户没有单击该链接,从而阻止该超链接跳转.
posted @ 2013-04-27 19:57 何杨 阅读(245) | 评论 (0)编辑 收藏

使高度自动,上部控制padding即可.
示例:
#XXX .XX .x{
      padding-top:20px;
      height:auto;
      ...
}

posted @ 2013-04-26 18:14 何杨 阅读(492) | 评论 (0)编辑 收藏

http://developer.51cto.com/art/201008/222367.htm

本文和大家重点讨论一下DIV高度自适应及注意问题,主要包括父div高度随子div的高度改变而改变和子div高度随父亲div高度改变而改变两种情况。

DIV高度自适应及注意问题

积累了一些经验,总结出一些关于div高度自适应的技巧,希望有助于大家,转载请标明出处,谢谢。

一、DIV高度自适应(父div高度随子div的高度改变而改变)

1、如果父div不定义height、子div均为标准流的时候,父div的height随内容的变化而变化,实现父div高度随子div的高度改变而改变。

代码: 

  1. <styletypestyletype="text/css"> 
  2. #aa{border:#000000solid5px}  
  3. #bb{border:#00ffffsolid5px;}  
  4. #cc{border:#0033CCsolid5px}  
  5. style> 
  6. <dividdivid="aa">父div  
  7. <dividdivid="bb">子divdiv> 
  8. <dividdivid="cc">子divdiv> 
  9. div> 

效果:IE、FF下一致

2、如果父div定义height,子div均为标准流的时候,在IE下父div的height随内容变化而变化,ff中则固定大小,如父div设置height:50px

代码: 

  1. <styletypestyletype="text/css"> 
  2. #aa{border:#000000solid5px;height:50px}  
  3. #bb{border:#00ffffsolid5px;}  
  4. #cc{border:#0033CCsolid5px}  
  5. style> 
  6. <dividdivid="aa">父div  
  7. <dividdivid="bb">子divdiv> 
  8. <dividdivid="cc">子divdiv> 
  9. div> 

IE效果

FF下效果

3、如果子div使用了float属性,此时已经脱离标准流,父div不会随内容的高度变化而变化,解决的办法是在浮动的div下面,加一个空div,设置clear属性both

未加空div代码: 

  1. <styletypestyletype="text/css"> 
  2. #aa{border:#000000solid5px;}  
  3. #bb{border:#00ffffsolid5px;float:left}  
  4. #cc{border:#0033CCsolid5px;float:left}  
  5. style> 
  6. <dividdivid="aa">父div  
  7. <dividdivid="bb">子divdiv> 
  8. <dividdivid="cc">子divdiv> 
  9. div> 

IE效果:

FF效果:

修改后代码: 

  1. <styletypestyletype="text/css"> 
  2. #aa{border:#000000solid5px;}  
  3. #bb{border:#00ffffsolid5px;float:left}  
  4. #cc{border:#0033CCsolid5px;float:left}  
  5. style> 
  6. <dividdivid="aa">父div  
  7. <dividdivid="bb">子divdiv> 
  8. <dividdivid="cc">子divdiv> 
  9. <divstyledivstyle="clear:both">div> 
  10. div> 

修改后效果:IEFF一致

4.另类的DIV高度自适应
原理:
padding-bottom将列拉长变的一样高,而负的margin-bottom又使其回到底部开始的位置,同时,溢出部分隐藏掉了。此方法必须加文档信息才能正常显示
代码: 


  1.  
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  3. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"> 
  4. <styletypestyletype="text/css"> 
  5. #aa{border:#000000solid5px;overflow:hidden;}  
  6. #bb{border:#00ffffsolid5px;float:left;  
  7. padding-bottom:100000px;margin-bottom:-100000px;}  
  8. #cc{border:#0033CCsolid5px;float:left;  
  9. padding-bottom:100000px;margin-bottom:-100000px;}  
  10. #dd{float:left}  
  11. style> 
  12. <dividdivid="aa"> 
  13. <dividdivid="bb">子divdiv> 
  14. <dividdivid="cc">子divdiv> 
  15. <dividdivid="dd">子div<br/><br/><br/><br/><br/>div> 
  16. div> 
  17.  

效果:


二、DIV高度自适应(子div高度随父亲div高度改变而改变)

在有边框的情况下,你会发现同一个div,在IE下的高度和在FF下的高度是不一样的,比如你设置了高度为100px的div,边框是 border:5px;IE的高度是5+5+空白区域=100px,而FF下高度是100px的div是不包括高度的,只是空白区域的高度,如下图黑框的 部分:


黑框的上方是对齐的,但是设置了同样的高度,效果却不一样,代码如下:

  1. <styletypestyletype="text/css"> 
  2.  
  3. #aa{border:#000000solid5px;height:100px;}  
  4.  
  5. #bb{border:#00ffffsolid5px;float:left;height:100%}  
  6.  
  7. #cc{border:#0033CCsolid5px;float:left}  
  8.  
  9. style> 
  10.  
  11. <dividdivid="aa"> 
  12.  
  13. <dividdivid="bb">子divdiv> 
  14.  
  15. <dividdivid="cc">子divdiv> 
  16.  
  17. div> 

如果没有设置边框,完全没有高度不一致的情况,子div适应父div很简单,如上面代码,只是在子div加了height:100%属性即可。如果 设置了边框,可以把子div的高度设置为比父div小上下边框高度的值,比如在此例中,可把#bb中height改为100-5-5=90px,结果在 IE和Mozilla中显示一致。

有一点要注意,如果父div是body的话,也就是说一个body套了一个div,让div适合body的大小的,必须设置body的高度才能实现子div随body改变而改变,body{height:100%}

posted @ 2013-04-25 16:18 何杨 阅读(237) | 评论 (0)编辑 收藏

适用于IE和FF

父Div中设置
    text-align:center;

子Div中设置:
    margin-left:auto:
    margin-right:auto;

    marigin:0 auto;

posted @ 2013-04-22 18:13 何杨 阅读(10088) | 评论 (1)编辑 收藏

select * from SYSCAT.REFERENCES  where constname = 'FK_SRT_ASSIGNMENTS_SMT_RESOURCES_01'
posted @ 2013-04-22 15:23 何杨 阅读(761) | 评论 (0)编辑 收藏

将一个字符串存入数据库并显示出来是一项简单任务,当字符串长度较短(新闻级别)时确实如此.
然而量变引起质变,当字符串长度增加到一定程度(小说级别)时,原有的对简短字符串的处理流程就需要做出一些变化了.下文将讨论这些变化的细节.

一.Web系统的基本情况
以下是某Web系统的基本情况:
前台JS框架:jQuery1.7.2 它确实贴心,比Dojo强,write less do more真不是空话
前后台信息传递方式:全部为Ajax异步处理 拒绝form提交
控制器:Spring3 MVC 很好 SpringMVC终将动摇Struts1/2的低位
Mapping:Hibernate3.2(C),SpringDAO(RUD)
后台DB:MySql5.2 它确实小巧方便,如果Oracle DB2跑在我的T410上那就开不了别的程序了

二.长文本向后台的传递
Web前台向后台传递数据的方式有get和post两种,它们之间有一些差别.就本文涉及的场景来说,差别主要在数据量的大小上,GET方式对传输的数据有大小限制,通常不能大于2KB;而使用POST方式传递的数据量比GET方式大得多,理论上不受限制.因此我采用了POST方式.
传递代码如下:
    var url='wisdom/add.do';

    $.post(
        url, 
        {title:
encodeURIComponent($("#title").val()),concept:
encodeURIComponent(
$(
"#concept").val())},
        function(data,textStatus){    
            
var status=$(data).find("status").text();
            
            
if(status=="ok"){
                ...

            }
            
else{
                
var text=$(data).find("text").text();
                alert(text);
            }
        }
    );
以上代码中,concept就是在textarea中的长文本,理论上长度是无限的,但实际应用中会受到数据库字段的限制.

三.服务器的设置
POST提交有长度限制,当超过时将会出错,可以配置maxPostSize参数来改变大小。
<Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443" maxPostSize="0"/>
当设置为零时,就没有长度限制了.

四.长文本在DB中的存储
首先需要考虑的数据库的字段,一般的varchar肯定是不够了;clob/blob容量是够,但查询时需要取出来转化一下,而这样速度上就受限了;一向比较贴心的MySql提供了一个LONGTEXT类型,它可以容纳4294967295byte的文字,而在使用上又如同文本一样,这成了我的首选,在后来的实际测试中,我发现它存储80万个汉字是没有问题的,100万也行,这就已经满足我的需求了,因此更大的测试没有再进行.
这个Web系统CRUD处理中,C是通过Hinernate完成的,因此在hbm.xml中进行设置就好了.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.ibm.heyang.domain">
    
<class name="Wisdom" table="collections_wisdom">
        
<id name="id" column="ID" >
            
<generator class="increment"/>
        
</id>
        
        
<property name="title" column="title" not-null="true"/>
        
<property name="concept" type="text">
            
<column name="concept" not-null="true" length = "16777216" />
        
</property>
    
        
<property name="conceptLength" column="conceptLength" />
        
<property name="addUserId" column="addUserId" />        
        
<property name="modifyTime" column="modifyTime"/>        
    
</class>
</hibernate-mapping>
以上粗体部分就是大文本字段的设置细节.
由于Hibernate是采用PreparedStatement,因此concept不需要进行转义和其它特殊处理.这给检索也带来了不少方便.

五.长文本的检索
由于插入数据库的文本就是原文,所以检索就是常规的检索,无须赘述.

六.长文本向前台的传递前的包装
在这个Web系统中,后台向前台传递的数据是以XML的型式往回传的,前台JS得到后再解析出来.
但长文本有一个特殊的地方就是内容无限制,比如违反XML规则的字符如<>等,这里就需要把它放在CDATA块里包起来后再向前传递.
如下:
        StringBuilder sb=new StringBuilder();
        
        sb.append(
"<title><![CDATA[");
        sb.append(StringUtils.isBlank(title)
?"-":title);
        sb.append(
"]]></title>");
                        
        sb.append(
"<concept><![CDATA[");
        sb.append(concept);
        sb.append(
"]]></concept>");
如果不这样处理一下,前台js就可能解析XML出错.

七.长文本的显示

将长文本显示给用户看可以采用textarea显示和网页显示,如果是前者那就没有特殊处理,直接放进去就行了,文本格式和存储前会一样,只是用户看起来不方便,需要用滚动条拖来拖去;而网页方式就好多了,用户舒适度好很多,但要求我们进行一些特殊的处理.

首先是CSS设置,这是为了保证文本不把DIV撑开,设置如下:
#concept{
    width
:900px;
    max-width
:900px;
    min-width
:900px;
    display
:inline-block;
    padding-top
:10px;
    
    color
:#7a7a7a;
    font-size
:14px; 
    font-weight
:normal;
    
    text-align
:left;
    
    word-wrap
: break-word; 
    word-break
: normal;
    
    -moz-binding
: url('./wordwrap.xml#wordwrap');/*FF only*/
    word-break
:break-all;
    white-space
: moz-pre-wrap;
}

其次,需要对文本处理一下,这样做的目的是把<>转义,另外把\n转化成<br>,空格转化成&nbsp;等,如果不这样做,文字会乱,阅读起来很觉不便.
以下是转化函数:
function makeText2Html(originalText){
    
    originalText
=originalText.replace("<","&lt;");
    originalText
=originalText.replace(">","&gt;");
    originalText
=originalText.replace(/\n/g,"<br/>");
    originalText
=originalText.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;");
    originalText
=originalText.replace(" ","&nbsp;");
    
    
return originalText;
}
以下是把XML中的长文本放到页面中:
$("#concept").html(getFormatedText($(data).find("concept").text()));

如果IE ONly的话,也可以把文本用<pre>标签包起来,这样就不用makeText2Html的辅助了.

以上就是对长文本的存储和显示的一些处理,由于作者水平有限,上文只是我的孔见,不当之处还请指出.
posted @ 2013-04-19 16:11 何杨 阅读(583) | 评论 (5)编辑 收藏

转载自:
http://www.cnblogs.com/Mygirl/archive/2012/03/27/2419971.html


     什么是HTTP长连接? HTTP长连接,与一般每次发起http请求或响应都要建立一个tcp连接不同,http长连接利用同一个tcp连接处理多个http请求和响应,也叫 HTTP keep-alive,或者http连接重用。使用http长连接可以提高http请求/响应的性能。

     使用http长连接有很多好处,包括:
更少的建立和关闭tcp连接,可以减少网络流量。 因为已建立的tcp握手,减少后续请求的延时。 长时间的连接让tcp有充足的时间判断网络的拥塞情况,方便做出下步操作。

    这些优点在使用https连接时更显著。可以减少多次建立高消耗的SSL/TLS握手。 在HTTP/1.1中,默认使用的是长连接方式。客户端默认服务端会保持长连接,即便返回错误响应;除非明确指示不使用长连接。同时,协议中也指定了客户 端可以发送关闭信号到服务端来关闭TCP连接。

    怎样是连接可以重用? 因为TCP是基于流的协议,所以HTTP协议需要有一种方式来指示前一个响应的结束和后一个响应的开始来重用已建立的连接。所以,它要求连接中传输的信息 必须有自定义的消息长度。自定义消息长度可以通过设置 Content-Length 消息头,若传输编码的实体内容块,则每个数据块的标明数据块的大小,而且响应体也是以一个特殊的数据块结束。

    若中间存在代理服务器将会如何? 因为长连接仅占用一条传输链路,所以代理服务器能否正确得与客户端和服务器端(或者其他代理服务器)发送长连接或非长连接的信号尤为重要。但是HTTP的 客户端或服务器端来看,代理服务器对他们来说是透明的,即便长连接是需要关注的。

     当前的JDK如何处理Keep-Alive? JDK同时支持HTTP/1.1 和 HTTP/1.0。 当应用程序读取完响应体内容后或者调用 close() 关闭了URLConnection.getInputStream()返回的流,JDK中的HTTP协议句柄将关闭连接,并将连接放到连接缓存中,以便后 面的HTTP请求使用。 对HTTP keep-Alive 的支持是透明的。但是,你也可以通过系统属性http.keepAlive和http.maxConnections以及HTTP/1.1协议中的特定的 请求响应头来控制。控制Keep-Alive表现的系统属性有:
    http.keepAlive=<布尔值> 默认: true 指定长连接是否支持
    http.maxConnections=<整数> 默认: 5 指定对同一个服务器保持的长连接的最大个数。
    影响长连接的HTTP header是: Connection: close 如果请求或响应中的Connection header被指定为close,表示在当前请求或响应完成后将关闭TCP连接。

     JDK中的当前实现不支持缓存响应体,所以应用程序必须读取完响应体内容或者调用close()关闭流并丢弃未读内容来重用连接。此外,当前实现在清理连接时并未使用阻塞读,这就意味这如果响应体不可用,连接将不能被重用。

    JDK1.5中的新特性 当应用接收到400或500的HTTP响应时,它将忽略IOException 而另发一个HTTP 请求。这种情况下,底层的TCP连接将不会再保持,因为响应内容还在等待被读取,socket 连接未清理,不能被重用。应用可以在捕获IOException 以后调用HttpURLConnection.getErrorStream() ,读取响应内容然后关闭流。但是现存的应用没有这么做,不能体现出长连接的优势。为了解决这个问题,介绍下workaround。
当响应体的状态码大于或等于400的时候,workaround 将在一定时间内缓存一定数量的响应内容,释放底层的socket连接来重用。基本原理是当响应状态码大于或等于400时,服务器端会发送一个简短的响应体来指明连接谁以及如何恢复连接。

   

下面介绍一些SUN实现中的特定属性来帮助接收到错误响应体后清理连接: 主要的一个是: sun.net.http.errorstream.enableBuffering=<布尔值> 默认: false

     当上面属性设置为true后,在接收到响应码大于或等于400是,HTTP 句柄将尝试缓存响应内容。释放底层的socket连接来重用。所以,即便应用不调用getErrorStream()来读取响应内容,或者调用 close()关闭流,底层的socket连接也将保持连接状态。
下面的两个系统属性是为了更进一步控制错误流的缓存行为: sun.net.http.errorstream.timeout=<int> in 毫秒 默认: 300 毫秒

     你如何做可以保持连接为连接状态呢? 不要忽略响应体而丢弃连接。这样会是TCP连接闲置,当不再被引用后将会被垃圾回收器回收。 如果getInputStream()返回成功,读取全部响应内容。如果抛出IOException ,捕获异常并调用getErrorStream() 读取响应内容(如果存在响应内容)。
即便你对响应内容不感兴趣,也要读取它,以便清理连接。但是,如果响应内容很长,你读取到开始部分后就不感兴趣了,可以调用close()来关闭流。值得注意的是,其他部分的数据已在读取中,所以连接将不能被清理进而被重用。
下面是一个基于上面建议的代码样例:

try
    URL a = new URL(args[0]); 
    URLConnection urlc = a.openConnection(); 
    is = conn.getInputStream(); 
    int ret = 0; 
    while ((ret = is.read(buf)) > 0) { 
      processBuf(buf); 
    }
    // close the inputstream
    is.close();
} catch (IOException e) {
    try {
        respCode = ((HttpURLConnection)conn).getResponseCode();
        es = ((HttpURLConnection)conn).getErrorStream();
        int ret = 0;
        // read the response body
        while ((ret = es.read(buf)) > 0) {
            processBuf(buf);
        }
        // close the errorstream
        es.close();
    } catch(IOException ex) {
        // deal with the exception
    }
}

  如果你预先就对响应内容不感兴趣,你可以使用HEAD 请求来代替GET 请求。例如,获取web资源的meta信息或者测试它的有效性,可访问性以及最近的修改。下面是代码片段:

URL a = new URL(args[0]);
URLConnection urlc = a.openConnection();
HttpURLConnection httpc = (HttpURLConnection)urlc;
// only interested in the length of the resource
httpc.setRequestMethod("HEAD");
int len = httpc.getContentLength();
posted @ 2013-04-10 21:16 何杨 阅读(266) | 评论 (0)编辑 收藏

看到很多童鞋讨论有关美剧学习英语到底有没有用,以及用哪部美剧练习,我在这里想说这只是一个参考,世界上没有绝 对的事情,究竟有没有用看个人,想必在校内上至少是高中生,大部分是大学生吧,如果你到现在还无法衡量自己的英语水平或者依旧被英语牵着鼻子走,我只能说 我很抱歉,我觉得这不仅是个人的悲哀更是中国教育的悲哀。如果你到现在连自己基本的评判标准的话,即使存在完美无缺的日志,你依旧照搬照抄,不适合自己的 实际情况,那一切皆为徒劳。就算这是学习英语的一条途径,有几个人能真的照着做呢?

  1. 不是所有的美剧都适合学英语

   如果喜欢看如《24小 时》这样的动作片, 那你基本会讲一口流利的”呯”"轰”"啊”之类的开枪爆炸声英语.如果你喜欢看如《豪斯医生》这种专业性很强的片子,那你基本会讲一些如 MRI,CT,Tumor之类的连自己都不明白的江湖郎中英语.如果看的是《越狱》,基本不用举手,别人就知道你是黑手党的了.不是所有剧都合适的,用来 学习的美剧,是要有一定对话量,生活化的,平民化的片子.   2. 开着字幕看是没有前途的

  很 多人喜欢开着字幕看,觉得会有参照更有帮助,其实这是在拖你的后腿.就像很多人结婚,喜欢找个比自己丑的伴娘,以为这样自己就进步了,事实上是被拖下水 了.中文是母语,对我们的眼球来说有无比强大的吸引力,只要在那里,你一定会看,就像放个美女在眼前,男人一定会看,不看的可能是老婆在一边,或是他爱人 也是个男人.一般人永远会不自觉通过中文字幕理解英语,而不是通过听懂-理解-记忆-重复,这样的过程学到英语.

  3.看一遍是不够的

   看 一遍根本不能叫学英语,充其量只能叫娱乐.如果是抱着学习的目的,必须反复看,精听,理解句子词语的意思,为我所用才行.如果看一遍,基本你就被情节彻底 打败了,或哭或笑,反复思考自己该拥有<HEROES>里的哪种超能力,担心下集可以下载前的日子该怎么过,哪还有心思管学英语这码事,哪怕 讲 的是柬埔寨语都无所谓.所以通过看个几遍,基本到了对剧情已经免疫的程度,如看老友记看到已经笑不出来了,那差不多可以洗干净耳朵仔细听了.

  给大家推荐几部我最喜欢用来正常学英语的美剧:

  1. 初级:Friends

  Friends是经典中的经典,对于英语初级水平的朋友来说,是突破发音和对话交流最好的美剧.整个剧都是人物间谈话,而且都很简短,没有长句,词汇非常简单,基本是plain english的典范.我发觉自己的英文有明显的提升,就是在看这部剧多达十遍后.

  2. 中级:Desperate Housewives

  这部剧讲述的是美国中产阶级的故事,所以用词和语言非常标准,相对于Friends有更多的长句和表达,非常适合中级水平的朋友学习.

  3. 高级:The West Wing

  这是关于美国白宫的政治题材美剧,整个剧基本都是对话,而且语速非常快,充斥着辩论和演讲,词汇也非常高级,听起来很有难度.如果能把这部剧都搞透了,真可以谢谢十八辈祖宗了.

通 过看美剧的方法,在2个月的时间内将《欲望都市》看了4至5遍,托福听力由原先的20分的水平升至了满分。她的做法就是,找到一部自己很喜欢的美剧,然后 先看一遍带中文字幕的。了解了大致的剧情,满足了自己休闲娱乐的好奇心,然后第二,三遍的时候开始看带双语字幕的,遇到不认识的生词,就停下来查一查,然 后记录。这样虽然比较费时,但是相比死气沉沉地不停地听抄听写,已经要生动很多。经过一段时间的积累,已经记了满满一本的生词和句型。这个时候,再去看第 四遍和第五遍,完全脱离拐杖,不带中英字幕。经过前面的积累,这时候再看情节已经轻松很多,并且能够深入理解每个人物在说这句对白时候的动机和理由,对语 言本身的理解也更深入了一步。于此同时,进行一下跟读。比如,听到一个人物的口语很好听,发音标准优雅,就刻意地进行一下模仿,体会一下她的语音、语调、 重音、节奏。这样在训练了听力的前提下,口语水平也会有大幅度地提升。要知道美剧当中的对白和旁白是最好的口语学习范本。

在看美剧学习语 言的时候要注意些什么?首先,注意发音。对于任何一门语言,语音是基础,它不仅包括单词的发音,还包括真实交际中词汇、习语的连读、失爆、弱化、浊化、重 音、缩读等一系列的音变形式。至于语调节奏,则是地道流利表达英语的润滑剂,没有接触过地道的外国人,没有和他们有过面对面的交谈,是很难感受到语调节奏 在表达思想中的巨大作用和强大震撼力的。因此要仔细地体会美剧之中,人物的发音和表达之中的语言习惯。其次,了解文化。语言是文化的载体,用词和句式使用 是否准确直接体现了对异国文化了解的程度。可以说,发音好其实只是与美国人的语言形似,如果能够掌握美国人的思维习惯和文化,用美国文化去思维,则可达到 神似的效果。这就是一种立体的学习方式,美剧则是这种学习方法最好的媒介。

一、准备好笔和纸,将笔放在鼠标旁边,将便笺放在屏幕和座椅之间,作好随时停顿和记录的预备动作。

二、只记录能引发自己内心感触和共鸣的语句和一些符合自身个性特色的句型及语法。

三、记录的时候最好不要分析思考和尝试记忆,待整个影片观看完毕之后,将统一回顾和整理。

四、一部章节或一部电影里面的典型句子和精彩对白记录完毕之后,一定要趁热打铁,想办法用上。(如通过写博客或者到英语角去操练。如果有参加培训班的话,一定不要放过任何能锻炼自己演讲口才的机会。)

五、 再告诉大家一个绝活:如果你发现了那种让自己百看不厌的经典英文影片,不妨通过全能音频转换通软件将它的MP3提取出来,然后到网站上下载完整的英文字 幕,再用LRC歌词编辑器将它做成同步显示歌词文本,放到自己的MP3或者电脑里,随时温习,处处操练。不知不觉这部影片的精髓尽入脑海,随时引用。从而 达到通过影视学英语的最终目的。


不少英语学习者都有这样的困惑:学了十几年的英语,通过了考试,能完全听懂标准语速的英语新闻广播,可就是听(看)不懂英语原版影视剧(无中文字幕),这使他们开始怀疑自己的听力能力。
    要解决这个问题,我们先来了解一下新闻英语和影视英语之间的区别。首先,两者在语体上有较大的区别。前者是书面语体的口头形式,用于正式的交际场合,经过 加工和润饰,比较文雅,是合乎标准的书面语言,因而使较多使用长句、复句、结构严谨的完整句。布局层次分明、逻辑关系严谨是它的主要特征。后者为口头语 体,以日常会话为基本形式,一般用于交际双方直接接触的场合,因而多使用短句、单句、省略句。随意性,不完整是它的主要特征。在英语学习过程中,我国的英 语学习者接触的绝大部分是书面语体。而在英语影视剧中,口头体的语言材料是最重要的特征,具体表现为口语中流行的惯用表达方式、俚语以...(未完)
posted @ 2013-04-08 21:48 何杨 阅读(201) | 评论 (0)编辑 收藏


阅读的时间:

1、早上5:30-6:00起床,有将近1小时的整块阅读时间,如果时间充足一点,会做些笔记.

2、包里放上7寸的阅读设备(以前是K3,这段时间换成NT),放上几十本排版不错的电子书,在有时间的时候看看,比如排队、等人、开会之类零散时间。

3、手机里放一些有声书,比如台湾的博客思听、每天八分钟、中医堂、百家讲坛,做车、做家务、身体锻炼时听听

4、睡前把所有事情都安排完,会拿本书在床上看上一会,然后睡觉。
5、所有读完第一遍,觉得不错的书,会开始读第二遍并做些笔记。
6、出差时如果周末有时间会找家环境好点的咖啡厅,看上半天或一天书。不出差如果周末有空闲时会去图书馆,带上笔记看上半天书,做个记录。
7、做飞机或动车时会准备二、三本纸制书,比较厚有些深度的那种,我发现自己在飞机上看书效果最好。看累了就做笔记或简评。
想多看点书的最有用的建议:就是关闭电脑、离开网络,有网络有电脑的地方永远会让你分心的
我看书效果最好的三个地方:飞机、图书馆、咖啡厅

-----------------------------------------------------------------------------------------------------------------------
总能在网上看到有人抱怨没有时间看书,在现在这个时代最影响注意力的东西就是网络,只要有了网络很容易浪费时间,不管是你用电脑、手机都是一样,点来点去,1个小时2个小时很快就没了,就在我在回答中说的,想多看点书最好的办法就是离开网络,下决心每天留出半小时或1小时的阅读时间,关电脑,关手机,开始看书,看完书做随手做些记录。

关于阅读设备:现在7寸的阅读器已经非常便宜了,K4和N2(Nook Simple Touch)也就700-800元左右,可以考虑买一个。放在包里,拷贝些电子书,有空的时间顺手就拿出来读一会。最好是E-Ink屏的,不要平板,平板什么都能做太容易分心了,我换成Nook Tablet之后,阅读的时间和数量要比K3少很多。

给个建议:最好不要在地铁或公交上用手机看书。颠簸中看小说、玩游戏,很容易引起视力功能尚未发育成熟的青少年视疲劳。一般来说,人们使用手机、平板电脑时,眼睛和屏幕的距离在20厘米左右,这样近距离且长时间地盯着屏幕看,容易使睫状肌产生疲劳,变成假性近视.,
在使用手持终端时,最好不要离屏幕太近,保持30厘米以上的距离最为适宜。同时尽量多眨眼,避免眼球过多地暴露在空气中,以减少眼部水分的蒸发。此外,应在休息时间经常站起来,活动活动颈部肌肉,最好找些有声书、Podcast或英语来听。

前二天在微博转的一句话:
每天花一点钟看10页有用的书,每年可看3600多页书,30年读11万页书。诸位,11万页书足可以使你成为一个学者了。可是,每天看三种小报也得费你一点钟的工夫;四圈麻将又得费你一点钟的光阴。看小报呢?还是打麻将呢?还是努力做一个学者呢?——胡适,纪念胡适先生逝世50周年。

就从今天开始培养你的阅读习惯吧,少上网、少玩会游戏,少聊天,少刷些豆瓣、微博,开始阅读。
posted @ 2013-04-06 22:37 何杨 阅读(181) | 评论 (0)编辑 收藏

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping package="com.ibm.heyang.XXX">
    
<class name="XXXClas" table="XXX_Table">
        
<id name="id" column="ID" >
            
<generator class="increment"/>
        
</id>
        
        
<property name="name" column="name" not-null="true"/>
        
<property name="content" type="text">
            
<column name="content" length = "16777216" />
        
</property>    
    
    
</class>
</hibernate-mapping>

以上length="16777216"
是关键,它会把字段对应到MySql的LONGTEXT类型.

以上是受到
http://sonyfe25cp.iteye.com/blog/830566
启发的.

posted @ 2013-04-02 23:18 何杨 阅读(5330) | 评论 (0)编辑 收藏

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 
<head>
  
<title> New Document </title>
  
<meta name="Generator" content="EditPlus">
  
<meta name="Author" content="">
  
<meta name="Keywords" content="">
  
<meta name="Description" content="">
 
</head>

 
<body>
  
 
</body>
</html>
<script type="text/javascript">
<!--
window.onload
=function(){
    
var member=new Object;

    member.age
=35;
    member.name
="Heyang";
    member.display
=function(){
        alert(
this.name+" "+this.age);
    };

    alert(getObjAllProperties(member,
"member"));
};

function getObjAllProperties(obj,objName){
    
var retval="";

    
for(var p in obj){
        retval
+=objName+"[\""+p+"\"]="+obj[p]+"\n";
    }

    
return
 retval;
}

//-->
</script>
posted @ 2013-03-20 12:34 何杨 阅读(663) | 评论 (0)编辑 收藏

一切原创性和先发性的事情都蕴涵一个基本原理,那就是当你真心去做的时候,上天的祝福也将随之而来.
posted @ 2013-03-13 14:11 何杨 阅读(194) | 评论 (0)编辑 收藏

关于让网页中的JavaScript函数自动执行,方法就多洛,但是万变不离其宗,下面给大家介绍一下!

  前提条件,网页中必须有JS函数代码,或者,使用文件导入的方法也行:

  在HTML中的Head区域中,有如下函数:

   <SCRIPT   LANGUAGE="JavaScript">  
  functionn MyAutoRun()
  {  
   //以下是您的函数的代码,请自行修改先!
   alert("函数自动执行哦!");   
  }   
  </SCRIPT>

  下面,我们就针对上面的函数,让其在网页载入的时候自动运行!

  ①第一种方法

  将如上代码改为:

   <SCRIPT   LANGUAGE="JavaScript">  
  functionn MyAutoRun()
  {  
   //以下是您的函数的代码,请自行修改先!
   alert("函数自动执行哦!");   
  }   
  window.onload=MyAutoRun; //仅需要加这一句
  </SCRIPT>

  ②第二种方法

  修改网页的Body为:

  <body onLoad="MyAutoRun();">

  或者改为:

  <body onLoad="javascript:MyAutoRun();">  

  ③第三种方法

  使用JS定时器来间断性的执行函数:

  setTimeout("MyAutoRun()",1000);   //隔1000毫秒就执行一次MyAutoRun()函数

  实现方法,将最上面的那JS函数,改为:

   <SCRIPT   LANGUAGE="JavaScript">  
  functionn MyAutoRun()
  {  
   //以下是您的函数的代码,请自行修改先!
   alert("函数自动执行哦!");   
  }   
  setTimeout("MyAutoRun()",1000); //这样就行拉
  </SCRIPT>

本文转载自:
http://blog.163.com/long_alfred/blog/static/188238279201161591355842/
posted @ 2013-03-12 17:50 何杨 阅读(364) | 评论 (0)编辑 收藏

1.我希望当初我有勇气过自己真正想要的生活,而不是别人希望我过的生活。
这是所有后悔的事中最常听到的。心理学上有个理论,较之那些我们做过的事,人们后悔的往往是那些没做的事。所以当人们在生命尽头往回看时,往往会发现有好多梦想应该实现,却没有实现。你的生活方式、你的工作、你的感情、你的伴侣,其实我们多少人过着的是别人希望你过的生活,而不是自己真正想要的生活——又可能,一直以来你把别人希望你过的生活当作是你想要的生活。当你疾病缠身时,才发现其实自己应该而且可以放下很多顾虑追求你要的生活,似乎已经晚了一点。

2.我希望当初我没有花这么多精力在工作上。
Ware说这是她照顾过的每一个男病人会说的话。因为工作,他们错过了关注孩子成长的乐趣,错过了爱人温暖的陪伴,这是他们最深的后悔与愧疚。其实对于现在的职业女性来说,这也将成为一个问题。黑马乐如果把你的生活变简单些,你也许会发现自己在做很多你以为你需要做其实不需要你做的事。腾出那些事占的空间,可能你会过得开心一点。

3.我希望当初我能有勇气表达我的感受。
太多的人压抑自己的感受与想法,只是为了“天下太平”,不与别人产生矛盾。渐渐他们就成了中庸之辈,无法成为他们可以成为的自己。其实,有很多疾病与长期压抑愤怒与消极情绪有关。也许当你直言不讳,你会得罪某些人。但可能从此以后因为你的中肯,你们不打不相识;又或者翻脸,正好让你摆脱这种需要你压抑自己感受才能维持的累人关系。不管哪一种结果,你都是赢家,不是吗?——不过当然,直言不讳还是有底线的。

4.我希望当初我能和朋友保持联系。
老朋友的好,我们总要到自己有事了的时候才会想到。多少人因为自己忙碌的生活忽略了朋友忽略了曾经闪亮的友情。很多人临终前终于放下钱、放下权,却放不下心中的情感与牵挂。朋友也好,爱人也罢,其实生命最后的日子里,他们才是我们最深的惦念。

5.我希望当初我能让自己活过开心点。
也许有点出乎意料,但这一条也在前5之中。很多人直到生命的最后才发现,“快乐是选择”。他们在自己既定习惯和生活方式中太久了,习惯了掩饰,习惯了伪装,习惯了在人前堆起笑脸。就像五月天的那首歌,“你不是真正的快乐,你的笑只是你给的保护色”。他们以为是生活让他们不快乐,其实是他们自己让自己不快乐了。

转载自:
http://qing.weibo.com/tj/a59767ce33002xpo.html
posted @ 2013-03-12 17:43 何杨 阅读(178) | 评论 (0)编辑 收藏

/****************************************************
 * toCurrency: convert a number to currency
 * @param value
 * @returns {String}
 *
 ***************************************************
*/
function toCurrency(money) {  
    
if (/[^0-9\.]/.test(money)){
        
return '0.00';
    }

    money 
= money.replace(/^(\d*)$/"$1.");
    money 
= (money + "00").replace(/(\d*\.\d\d)\d*/"$1");
    money 
= money.replace("."",");
    
var re = /(\d)(\d{3},)/;
    
while (re.test(money)) {
        money 
= money.replace(re, "$1,$2");
    }
    money 
= money.replace(/,(\d\d)$/".$1");

    
return '' + money.replace(/^\./"0.")+" ";
}
posted @ 2013-03-01 22:04 何杨 阅读(297) | 评论 (0)编辑 收藏

修补的代价太大了.
posted @ 2013-03-01 21:29 何杨 阅读(163) | 评论 (0)编辑 收藏

select
     TO_CHAR(A.CREATE_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS') as CREATE_TIMESTAMP
from
      table A

TO_CHAR是转化函数
YYYY-MM-DD HH24:MI:SS 是格式
 
posted @ 2013-03-01 13:22 何杨 阅读(6620) | 评论 (0)编辑 收藏

项目里又搞了个branch需要重新开个workspace下载去,嫌麻烦也得去做.
下载第一次,或许因为是网络问题,文件不全,IDE报错了.
于是删掉已经下载的,再来,一段时间后下好了,这回行,没错.
可是Build到75%就走不下去了.吃饭等,吃完还是75%!!
没招,心想是不是又下出问题了?于是再下一次,问题依旧.
以上时间耗费一下午了.
眼看要耽误进度,于是网络找钥匙,很多地方有说在Eclipse启动参数加上 -vmargs -Xmx512M.
如法炮制,涛声依旧.
都要气翻了.

没办法,换一个workspace,在重新来一边.好了!
估计还是第一遍下的文件搞坏了.
早知如此,何必耽误那么长时间.
posted @ 2013-02-24 18:19 何杨 阅读(1435) | 评论 (0)编辑 收藏

function convertMoney(value) {  
    var digital=Math.floor(value);
    var arr=digital.toString().split("").reverse();
    
    var t = "";  
    for(var i = 0; i < arr.length; i ++ ){  
      t += arr[i] + ((i + 1) % 3 == 0 && (i + 1) != arr.length ? "," : "");  
    }
    return t.split("").reverse().join("");
}
posted @ 2013-02-20 16:16 何杨 阅读(213) | 评论 (0)编辑 收藏

http://www.cnblogs.com/evilyang/archive/2012/02/17/2355218.html

一、使用场景

   服务端获得的DataTable转化为Json格式后传递给客户端dojo,dojo将json数据直接绑定在dojox.grid.DataGrid上

二、基本用法

1.客户端页面DataToJson.aspx返回一个Json数据

复制代码
    private void Json()
    {
        DataTable dt = this.GetData();
        string str = JsonHelper.DateTableToJson(dt);
        Response.Write(str);
        Response.End();
    }
复制代码
 2.利用ajax接受json数据

dojox.grid.DataGrid凭借dojo.data.ItemFileWriteStore可以轻松具有ajax功能

使用dojo.grid.DataGrid首先做如下准备工作

a.引入样式表

<link rel="Stylesheet" href="dojo-re/dojox/grid/resources/soriaGrid.css" />
b.引入所需库
dojo.require("dojo.parser");
dojo.require("dijit.form.Button"); 
dojo.require("dojox.grid.DataGrid");

dojo.require("dojo.data.ItemFileWriteStore");

dojo.require("dojox.layout.FloatingPane");
c.编写代码
复制代码
<script type="text/javascript">
        function Grid1() {
            var data = new dojo.data.ItemFileWriteStore({
                url: "DataToJson.aspx"
            });
            var structure = [
                { name: "用户名", field: "userName", width: "120px" },
                { name: "密码", field: "userPwd", width: "120px" },
                { name: "电子邮件", field: "email", width: "150px;" },
                { name: "博客", field: "blog", width: "150px" },
                { name: "生日", field: "birthday", width: "120px" },
                { name: "年龄", field: "age", width: "80px" },
                { name: "备注", field: "description", width: "120px" }
            ];
            var grid = new dojox.grid.DataGrid({
            store: data,
            structure:structure
            },"grid1");
            grid.startup();
        }
        function ShowFloatingPane() {
            var floatingPane = dijit.byId("dFloatingPane");
            floatingPane.show();
            Grid1();
        }
    </script>
复制代码

 所需HTML

复制代码
   <div >
        <div data-dojo-type="dojox.layout.FloatingPane" id="dFloatingPane"
           title
="A floating pane" data-dojo-props="resizable:true, dockable:true, title:'A floating pane'"
           style
="position:absolute;top:150px;left:400px;width:600px;height:400px; visibility:hidden">
             <div id="grid1" style="width:450px; height:350px"></div>
        </div>
    </div>
<div data-dojo-type="dijit.form.Button" data-dojo-props="label:'Show me', onClick:ShowFloatingPane"></div>
 
复制代码

 d.运行结果如下:

 

 三、继续完善DataGrid功能

1,增加搜索条件

query:{userName:"evilyang",id:"*"},

 2,隐藏一列,不显示

 {name:"密码",field:"userPwd",width:"100px",hidden:"true"}

3,为某一列增加一个样式名

 <style type="text/css">
    .name{ font-style:italic; font-size:14px; color:Red;}
    </style>
{ name: "用户名", field: "userName", width: "120px" ,classes:"name"}
 4,为某一列直接增加一个样式
{ name: "电子邮件", field: "email", width: "150px;",styles:"text-align:center;" },
5,固定前两列

更改structure结构,加入noscroll属性

复制代码
var structure = [{
                noscroll: true,
                cells: [
                { name: "用户名", field: "userName", width: "80px", classes: "name" },
                { name: "密码", field: "userPwd", width: "80px", hidden: "true" },
                { name: "电子邮件", field: "email", width: "150px;", styles: "text-align:center;" }    
                ]
            }, {
                cells: [
                { name: "博客", field: "blog", width: "120px" },
                { name: "生日", field: "birthday", width: "120px" },
                { name: "年龄", field: "age", width: "50px" },
                { name: "备注", field: "description", width: "120px" }
                ]
            }];
复制代码

 6,cell中的样式设置默认模式

defaultCell:{width:"80px",styles:"text-align:center;"},
 这样设置完后,每一列的属性就不必单独设置了

7, 其他属性

selectionMode: "extended", //none,single,multiple
loadingMessage: "请等待,数据正在加载中......",
 errorMessage: "对不起,你的请求发生错误!",
 columnReordering:true//此属性设置为true,可以拖拽标题栏,更换列顺序

new dojox.grid.cells.RowIndex({ name: "编号", width: "20px" })//加入自编号

四、数据显示高级功能

1, RowClick事件

复制代码
grid.on("RowClick", function(evt) {
                var idx = evt.rowIndex,
                    item = this.getItem(idx),
                    store = this.store;
                    content = dojo.byId("content");
                    content.innerHTML="you have clicked on rows " + store.getValue(item, "id");
          }, true);
复制代码

 2,SelectionChanged事件

复制代码
grid.on("SelectionChanged",dojo.hitch(grid, reportSelection), true);
function reportSelection() {
            var items = this.selection.getSelected(),
                        msg = "你选择了以下数据";
            var tmp = dojo.map(items, function(item) {
                return this.store.getValue(item, "id");
            }, this);
            var content = dojo.byId("content");
            content.innerHTML = msg + tmp.join(",");
           
        }
复制代码

五、显示效果如下图:


posted @ 2013-02-18 17:09 何杨 阅读(3862) | 评论 (0)编辑 收藏

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
<input id="decimalTxt" />&nbsp;
<button id="showBtn" >Click</button>
 </body>
</html>
<script type="text/javascript">
<!--
window.onload=function(){
    document.getElementById("showBtn" ).onclick=function(){
        var value=document.getElementById("decimalTxt" ).value;
        alert(toCurrency(value));
    };
};

function toCurrency(money) {  
   if (/[^0-9\.]/.test(money)){
        return '0.00';
    }

    money = money.replace(/^(\d*)$/, "$1.");
    money = (money + "00").replace(/(\d*\.\d\d)\d*/, "$1");
    money = money.replace(".", ",");
    var re = /(\d)(\d{3},)/;
    while (re.test(money)) {
        money = money.replace(re, "$1,$2");
    }
    money = money.replace(/,(\d\d)$/, ".$1");

    return '' + money.replace(/^\./, "0.");
}  
//-->
</script>
posted @ 2013-02-18 16:30 何杨 阅读(1105) | 评论 (0)编辑 收藏

<a href="#" style="cursor:default">aaa</a>    
default 默认光标(通常是一个箭头) auto 默认。浏览器设置的光标。
crosshair 光标呈现为十字线。
pointer 光标呈现为指示链接的指针(一只手) move 此光标指示某对象可被移动。
e-resize 此光标指示矩形框的边缘可被向右(东)移动。 ne-resize 此光标指示矩形框的边缘可被向上及向右移动(北/东)。
nw-resize 此光标指示矩形框的边缘可被向上及向左移动(北/西)。
n-resize 此光标指示矩形框的边缘可被向上(北)移动。
se-resize 此光标指示矩形框的边缘可被向下及向右移动(南/东)。
sw-resize 此光标指示矩形框的边缘可被向下及向左移动(南/西)。
s-resize 此光标指示矩形框的边缘可被向下移动(北/西)。
w-resize 此光标指示矩形框的边缘可被向左移动(西)。
text 此光标指示文本。
wait 此光标指示程序正忙(通常是一只表或沙漏)。
help 此光标指示可用的帮助(通常是一个问号或一个气球)。
posted @ 2013-02-01 10:56 何杨 阅读(804) | 评论 (0)编辑 收藏

http://www-01.ibm.com/support/docview.wss?uid=swg27014463
posted @ 2013-01-17 16:20 何杨 阅读(321) | 评论 (0)编辑 收藏

此函数相当于Oracle中的NVL且更方便,它完全可以取代SQL中的CASE.

用法:
COALESCE(A,B,C,D...);

说明:
若A为空;则取B,若B为空,则取C;...;依此类推.

用例:
        sb.append("    select ");
        sb.append("        COALESCE(t03.EMP_USER_NAME,'') as sellerName,");
        sb.append("        COALESCE(t03.EMP_LOTUS_MAIL,'') as sellerNotesMail,");
        sb.append("        COALESCE(t03.EMP_INTERNET_ID,'') as sellerIntranetId,");
        sb.append("        COALESCE(t04.BUSINESS_UNIT_NAME,'') as busiNessUnit,");
        sb.append("        COALESCE(t02.TOPT_JOB_ROLE_NAME,'') as jobRoleName,");
        sb.append("        t01.TERRITORY_NAME as territoryName");
        sb.append("    from");
        sb.append("        topt.territory  t01");
        sb.append("        left join topt.job_role   t02 on t01.ROLE_KEY=t02.ROLE_KEY  ");
        sb.append("           left join FRS.Resource    t03 on t01.EMP_UID=t03.RESOURCE_EMPLOYEE_UID");
        sb.append("        left join TOPT.BUSINESS_UNIT t04 on t01.BUSINESS_UNIT_KEY=t04.BUSINESS_UNIT_KEY        ");
        sb.append("    where ");
        sb.append("        t01.TERRITORY_KEY=? ");
        String sql = sb.toString();
posted @ 2012-12-24 14:34 何杨 阅读(3778) | 评论 (0)编辑 收藏

1.StringUtils.join
使用方法:
String result=StringUtils.join(arr,'','');
如果arr=["1","2","3","A","B","C"];
那么result="1,2,3,A,B,C";
这个用在in查询的场合很好.
如果要颠倒过来,用String[] arr=result.split(",");就好了.
当然,String.split也是一个非常实用的函数.

2.MessageFormat.format
使用方法:
String message = "Territory {0} has been transferred to Team {1}.";
Object[] params={"A1","B2"};
String transferMsg = MessageFormat.format(message,params);//Territory A1 has been transferred to Team B2.
这个函数用于预设空缺待填文本的场合很好.

posted @ 2012-12-24 14:29 何杨 阅读(260) | 评论 (0)编辑 收藏

 Select filed from schema.table where condition  fetch first 1024 rows only

与select top 同等效果.
posted @ 2012-12-20 20:20 何杨 阅读(289) | 评论 (0)编辑 收藏

编码调试过程中,常有Sql语句的调试任务,这种任务比较麻烦的一点在于需要手工将?替换成参数,如果参数有十来个就够让人头疼的.
为了减轻这种无谓的劳动,本人设计了一个类来代替完成这种累而又容易让人出错的活.
下面是代码:
package com.heyang;

import java.text.MessageFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 将SQL语句中的问号替换成参数
 * 此类用于调试SQL时减轻手工加入参数的劳动量
 * 
@author heyang@gmail.com
 *
 
*/
public class SqlCompletion{
    
// 输入的SQL语句
    private String sql;
    
    
// 输入的参数
    private String[] arr;
    
    
// 构造函数
    public SqlCompletion(String sql,Object[] params){
        
this.sql=sql;
        
        arr
=new String[params.length];
        
        
for(int i=0;i<arr.length;i++){
            arr[i]
="'"+params[i].toString()+"'";
        }
    }
    
    
/**
     * 取得将问号替换成参数的补全SQL
     * 
@return
     
*/
    
public String getCompletedSql(){
        Pattern p 
= Pattern.compile("\\?",Pattern.CASE_INSENSITIVE);

        Matcher m 
= p.matcher(sql);
        StringBuffer sb 
= new StringBuffer();

        
boolean result = m.find();
        
int index=0;

        
while (result) {
            m.appendReplacement(sb, 
"{"+index+"}");
            index
++;
            result 
= m.find();
        }
        m.appendTail(sb);
        String repSql
=sb.toString();

        
        
return MessageFormat.format(repSql,arr);
    }
    
    
// 测试
    public static void main(String[] args){
        Object[] params
={"c1","c2","c3","c4"};
        SqlCompletion s
=new SqlCompletion("select * from t where t.f1=? and t.f2=? and t.f3=? and t.f4=? ",params);
        System.out.println(s.getCompletedSql());        
    }
}

输出结果是:
select * from t where t.f1='c1' and t.f2='c2' and t.f3='c3' and t.f4='c4'

你可以把此类拷贝到你的项目中,只要标明我是原作者就行.
posted @ 2012-12-17 22:55 何杨 阅读(372) | 评论 (0)编辑 收藏

POI是Java对Office操作的常用工具包,网上资料有很多,但良莠不齐,临时便找边试容易耽误时间,故收集一些常用操作在这里以便查阅.

1.创建Sheet
Sheet sheet = workbook.createSheet();
workbook.setSheetName(0, "Sheet0");

2.设置列宽
static final int[] COLUMN_WIDTHS = new int[] { 4*3500, 2*3500, 5*3500,
            2*3500, 3*3500, 3*3500, 3500, 3*3500, 2*3800, 2*3500};
for (int colnum = 0; colnum < COLUMN_WIDTHS.length; colnum++) {
    sheet.setColumnWidth(colnum, COLUMN_WIDTHS[colnum]);
}

3.设置缺省行高
sheet.setDefaultRowHeight((short)360);

4.设置某一行行高
Row rowFirst = sheet.createRow(0);
rowFirst.setHeightInPoints(20.0f);

5.给单元格设置字体及下边框
Cell cell00 = rowFirst.createCell(0);
cell00.setCellValue("abc123");            

HSSFFont fontAriel12Bold = workbook.createFont();
fontAriel12Bold.setFontName("Arial");
fontAriel12Bold.setFontHeightInPoints((short)12);
fontAriel12Bold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
fontAriel12Bold.setColor(HSSFColor.RED.index);

HSSFCellStyle cell00FontStyle = workbook.createCellStyle();
cell00FontStyle.setBorderBottom(HSSFCellStyle.BORDER_THICK);
cell00FontStyle.setFont(fontAriel12Bold);
cell00.setCellStyle(cell00FontStyle);

6.给单元格设置背景色
HSSFCellStyle blueStyle = workbook.createCellStyle();
blueStyle.setBorderTop(HSSFCellStyle.BORDER_THICK);
blueStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
blueStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
blueStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
Cell cell=row9.createCell(0);
cell.setCellStyle(blueStyle);
posted @ 2012-12-14 17:45 何杨 阅读(283) | 评论 (0)编辑 收藏

sqlcode sqlstate 说明
000 00000 SQL语句成功完成

01xxx SQL语句成功完成,但是有警告
+012 01545 未限定的列名被解释为一个有相互关系的引用
+098 01568 动态SQL语句用分号结束
+100 02000 没有找到满足SQL语句的行
+110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统
+111 01590 为2型索引设置了SUBPAGES语句
+117 01525 要插入的值的个数不等于被插入表的列数
+162 01514 指定的表空间被置为检查挂起状态
+203 01552 使用非唯一的名字来解决命名的限定列
+204 01532 命名的对象未在DB2中定义
+206 01533 命名的列不在SQL语句中指定的任何表中存在
+218 01537 因为SQL语句引用一个远程对象,不能为该SQL语句执行EXPLAIN
+219 01532 命名的PLAN TABLE不存在
+220 01546 不正确定义PLAN TABLE,检查命名列的定义
+236 01005 SQLDA中的SQLN的值至少应于所描述的列的个数一样大
+237 01594 至少有一个被描述的列应该是单值类型,因此扩展的SQLVAR条目需要另外的空间
+238 01005 至少应有一个被描述的列是一个LOB,因此扩展的SQLVAR条目需要另外的空间
+239 01005 至少应有一个被描述的列应是单值类型,因此扩展的SQLVAR条目需要另外的空间
+304 01515 该值不能被分配给宿主变量,因为该值不再数据类型的范围之内
+331 01520 不能被翻译的字符串,因此被设置为NULL
+339 01569 由于与DB2 2.2版本的子系统连接,所以可能存在字符转换问题
+394 01629 使用优化提示来选择访问路径
+395 01628 设置了无效的优化提示,原因代码指定了为什么,忽略优化提示
+402 01521 未知的位置
+403 01522 本地不存在CREAT ALIAS对象
+434 01608 在DB2未来发布的版本中将不支持指定的特性,IBM建议你停止使用这些特性
+445 01004 值被CAST函数截取
+462 01Hxx 由用户定义的函数或存储过程发出的警告
+464 01609 命名的存储过程超出了它可能返回的查询结果集的个数限制
+466 01610 指定由命名的存储过程返回的查询结果集的个数。成功完成
+494 01614 由存储过程返回的结果集的个数超过了由ASSOCIATE LOCATORS语句指定的结果集定位器的个数
+495 01616 因为倒台SQL的成本估算超出了在ELST中指定的警告阀值,所以发出警告
+535 01591 请求一个主健的定位更新,或请求一个使用自我引出 约束的表的删除操作
+541 01543 命名外健是一个重复的引用约束
+551 01548 命名的授权ID缺少在命名的DB2对象上执行命名操作的权限
+552 01542 命名的授权ID缺少执行命名操作的权限
+558 01516 已经被授权该PUBLIC,因此WITH GRANT OPTION不可用
+561 01523 对ALTER REFERENCES INDEX 和TRIGGER特权,PUBLIC AT ALL LOCATION无效
+562 01560 因为GRANTEE已经拥有这些特权,所以一个或更多的特权被忽略
+585 01625 模式名指定了不止一次
+599 01596 没有为长字符数据类型(BLOB,CLOB和DBCLOB)建立比较函数
+610 01566 由于建立了一个指定为DEFER YES的索引,指定的对象处于PENDING状态,或者因为使用了ALTER INDEX改变关键值的范围,所以指定的对象处于PENDING状态
+625 01518 因为删除了主健索引,所以表定义被标注为不完整
+626 01529 删除了加强UNIQUE约束的索引,唯一性不在被加强
+645 01528 因为建立的索引中没有包含NULL,所以WHERE NOT NULL被忽略
+650 01538 不能更改或者建立已命名的表为从属表
+653 01551 在已指定的分区表空间中尚没有建立指定的分区索引,所以分区索引不可得
+655 01597 为CREATE或ALTER STOGROUP语句指定特定或者非特定的卷ID,在DB2较新发布的版本中(版本6以后)将不再支持他们
+658 01600 当建立目录索引时,不能指定SUBPAGES语句,SUBPAGES将被忽略,并缺省为1
+664 01540 分区索引的限制关键字超出了最大值
+738 01530 已命名的对象的更改可能像只读系统中对象的改变要求一样
+799 0157 SET语句中引用的特定寄存器不存在,将忽略 SET请求
+802 01519 数据溢出或者因除法异常而引起的数据异常错误
+806 01553 ISOLATION(RR)与LOCKSIZE PAGE 冲突
+807 01554 由于十进制乘法导致溢出
+863 01539 连接成功,但是只支持SBCS
+2000 56094 SUBPAGES不等于1的1型索引不能成为数据共享环境中的缓冲池组依赖者
+2002 01624 因为指定的缓冲池不允许超高速缓存,GNPCACHE指定被忽略
+2007 01602 因为DB2子系统的参数禁用“提示(hiats)”所以不能指定优化提示
+30100 01558 分布式协议错误被检测到,提供原来的SQLCODE和SQLSTATE
-007 42601 SQL语句中由非法字符
-010 42603 字符串常量非正常终止;检查到有遗漏的引号标志
-029 42601 需要INTO语句
-060 42815 某特定数据类型的长度或者标量规范无效
-084 42612 不能执行SQL语句,因为该语句对动态SQL无效或者对OS/390的DB2无效
-097 42601 在单位类型、用户自定义的函数以及过程中不能使用带有CAST的LONG VARCHAR或LONGVARGRAPHIC
-101 54001 SQL语句超出了已确定的DB2限制:例如,表的数目太多,语句中的字节太多
-102 54002 字符串常量太长
-103 42604 无效数学文字
-104 42601 SQL语句中遇到非法符号
-105 42604 无效的字符串格式;通常引用一个格式不正确的图形字符串
-107 42622 对象名太长
-108 42601 RENAME语句中指定的名字有错误,不能使用限定词
-109 42601 指定了无效语句;例如CREATE VIEW不能包含ORDER BY 语句
-110 42606 遇到了无效的十六进制的文字
-111 42901 指定的列函数没有给出列名
-112 42607 无效的列函数语法;列函数不能运行与其他的列函数之上
-113 42602 遇到无效字符
-114 42961 该语句的位置名称必须与当前服务器匹配,但是却没有匹配
-115 42601 因为比较运算符没有伴着一个表达式或者列表,遇到了无效谓词
-117 42802 待插入的数值的个数于被插入的行中的列数不相等
-118 42902 数据修改语句(UPDATE或DELETE)和FROM语句中的表和视图命名不合法
-119 42803 HAVING语句中的列的列表与GROUP BY语句中的列列表不匹配
-120 42903 不允许WHERE语句、SET语句、VALUES语句或者SET ASSIGNMENT语句引用列函数
-121 42701 在INSERT或UPDATE语句中,某一列被非法引用了两次
-122 42803 非法使用了列函数。因为没有用于一个列函数的所有列不再GROUP BY语句中
-123 42601 特定位置的参数必须是一个常数或者一个关键词
-125 42805 ORDER BY语句中指定了无效数字,该数字要么小于1要么大于选定的列数
-126 42829 不能为一个UPDATE语句指定ORDER BY语句
-127 42905 在子选择中DISTINCT只能指定一次
-128 42601 SQL谓词中NULL使用不当
-129 54004 SQL语句中包含的表多于15个
-130 22019 ESCAPE语句必须为一个字符

22025 无效的ESCAPE模式
-131 42818 LIKE谓词只能用于字符数据
-132 42824 LIKE语句、ESCAPE语句、LOCATE函数或POSSTR函数中有无效运算对象
-133 42906 无效相关子查询引用
-134 42907 大于255字节的列被不正确使用
-136 54005 排序关键字的长度大于4000字节
-137 54006 被连接的字符串太大;字符的最大值为32767;图形的最大值为16382
-138 22011 SUBSTR列函数的第二个或第三个操作符无效
-142 42612 不支持的SQL语句。该语句可能在另外的RDBMS上有效,也有可能在其他的上下文中有效(例如,VALUES只能在触发器中出现)
-144 58003 指定的段号无效
-147 42809 某一源函数不能更改。要改变源函数,必须删除该源函数并重新建立他
-148 42809 RENAME和ALTER无法执行。RENAME不能对视图或者活动RI.ST表重新命名。ALTER不能用于改变列的长度,因为该列参与了RI、一个用户退出程序、全局的临时表或打开DATACAPTURE CHANGES表的列
-150 42807 触发活动的INSERT,UPDATE或DELETE语句中指定了无效的视图更新或一个无效的转换表
-151 42808 试图更新一个不可更新的视图的列、一个DB2 CATALOG表的列或者一个ROWID列
-152 42809 DROP CHECK试图删除一个参照约束,或者DROP FOREIGN试图删除一个检查约束
-153 42908 无效的视图建立请求,必须为旋转列表中列出的列出的未命名的列或者重复的列提供一个名字
-154 42909 不能用UNION、UNION ALL或者一个远程表建立视图
-156 42809 在视图上建立索引是非法的,或者在ALTER TABLE,CREATE TRIGGER,DROP TABLE或LOCK TABLE语句上指定一个不是表的其他对象这是无效的
-157 42810 必须在FOREIGN KEY语句中指定一个表名
-158 42811 视图的列和选择列表中的列不相匹配
-159 42089 无效DROP或COMMENT ON语句
-160 42813 对该视图的WITH CHECK OPTION无效
-161 44000 正被更新的视图WITH CHECK OPTION语句使得这行不能被插入或更新
-164 42502 用户没有建立这个视图的权限
-170 42605 标量函数指定了无效的参数个数
-171 42815 标量函数指定了无效的数据类型长度或者无效数值
-173 42801 在非只读型的游标上不能指定隔离级别UR
-180 22007 DATE、TIME、TIMESTAMP值的字符串表示法的语法不对
-181 22001 不是有效的DATE、TIME、TIMESTAMP值
-182 42816 在算术表达式中的日期/时间值无效
-183 22008 在算术表达式中返回的日期/时间值的结果不在有效值的范围内
-184 42610 没有正确使用日期/时间值的参数标记
-185 57008 没有定义本定的日期/时间出口
-186 22505 改变本定的日期/时间出口引发这个程序的长度无效
-187 22506 MVS返回无效的当前日期/时间
-188 22503 字符串表示无效
-189 22522 指定的编码字符集的ID无效或没有定义
-190 42837 不能象所设定的那样改变(ALTER)列。只能改变(ALTER)VARCHAR列的长度
-191 22504 字符串中包含了无效的混合数据
-197 42877 当两个或多个表被联合在一起排序时,限定的列名不能在ORDER BY语句中使用
-198 42617 试图对空的字符串发布一个PREPARE或EXECUTE IMMEDIATE语句
-199 42601 SQL语句中使用了非法关键词
-203 42702 模糊列引用
-204 42704 没有定义的对象名
-205 42703 指定的表的列名无效
-206 42703 列名没有在FROM语句所引用的任何表中,或者没有在定义触发器所在的表中
-208 42707 不能ORDER BY指定列,应为该列不在选择列表中
-212 42712 指定的表名在触发器中不允许多次使用,只能使用一次
-214 42822 DISTINCT、ORDER BY 引起的无效表达式
-219 42704 因为PLAN_TABLE不存在,EXPLAIN无法执行
-220 55002 遇到无效的PLAN_TABLE列
-221 55002 如果为PLAN_TABLE定义了可供选择的列,那么,必须定义所有的列
-229 42708 指定的现场找不到
-240 428B4 LOCK TABLE语句的PART子句无效
-250 42718 没有定义本地位置名
-251 42602 记号无效
-300 22024 宿主变量或参数中的字符串不是以NULL为终止
-301 42895 无效的宿主变量数据类型
-302 22001 输入的变量值对指定的列无效

22003 输入的变量值对指定的列而言太大
-303 42806 因为数据类型不兼容,不能分配数值
-304 22003 因为数据超出了范围,不能分配数值
-305 22002 没有NULL指示符变量
-309 22512 因为引用的宿主变量被设置成NULL,所以谓词无效
-310 22501 十进制的宿主变量或参数包含非十进制数据
-311 22501 输入的宿主变量长度无效,或者时负值或者太大
-312 42618 没有定义宿主变量或者宿主变量不可用
-313 07001 宿主变量的个数不等于参数标识的个数
-314 42714 模糊的宿主变量引用
-327 22525 在最后分区的关键字范围内,不能插入行
-330 22021 不能成功的翻译字符串
-331 22021 字符串不能分配到宿主变量,因为其不能成功的被翻译
-332 57017 不能为两个命名的编码字符集的ID定义翻译规则
-333 56010 子类型无效导致翻译失败
-338 42972 ON语句无效,必须引用连接的列
-339 56082 访问DB2 2.2版本的子系统被拒绝,原因时ASCII到EBCDIC翻译不能进行
-350 42962 无效的大对象规范
-351 56084 SELECT列表中有不支持的数据类型
-352 56084 输入列表中有不支持的数据类型
-355 42993 LOB列太大,以至不能被记录在日志中
-372 428C1 每个表只允许有一个ROWID列
-390 42887 在上下文中指定的函数无效
-392 42855 自从前一次FETCH以来,指定游标的SQLDA已被不恰当的改变
-396 38505 在最后的访问过程中,视图执行SQL语句
-397 428D3 在某一列上不恰当的指定了GENERATED因为该列不是ROWID数据类型
-398 428D2 为某一个宿主变量请求LOCATOR,但是该宿主变量不是一个LOB
-399 22511 在INSERT语句中为ROWID列指定的值无效
-400 54027 在DB2编目中定义的用户自定义索引不能超过100个
-401 42818 算术操作符或比较操作符的操作对象不是兼容的
-402 42819 算术函数不能用于字符或日期时间数据
-404 22001 SQL语句指定的字符串太长
-405 42820 数值文字超出了范围
-406 22003 计算出的或者倒出的数值超出了范围
-407 23502 不能把NULL值插到定义为NOT NULL的列中
-408 42821 数值不能被更新或插入,因为他与列的数据类型不兼容
-409 42607 COUNT函数指定的运算对象无效
-410 42820 浮点文字笔30个字符的最大允许长度长
-411 56040 CURRENT SQLID使用无效
-412 42823 在子查询的选择列表中遇到了多个列
-413 22003 当转换为一个数字型数据类型时,数据溢出
-414 42824 LIKE谓词不能运行于用数字或日期时间类型定义的列
-415 42825 为UNION操作指定的选择列表不是联合兼容的
-416 42907 包含UNION操作符的SQL语句不允许有长的字符串列
-417 42609 两参数标识符作为运算对象被指定在同一谓词的两边
-418 42610 参数标识符使用无效
-419 42911 十进制除法无效
-420 22018 字符串自变量值不符合函数的要求
-421 42826 UNION操作的选择列表中没有提供相同数目的列
-423 0F001 为LOB或结果集定位器指定的值无效
-426 2D528 在不允许更新的应用服务器不允许执行COMMIT语句
-427 2D529 在不允许更新的应用服务器不允许执行ROLLBACK语句
-430 38503 在用户自定义的函数或存储过程中遇到了错误
-433 22001 指定的值太长
-435 428B3 无效的应用定义的SQLSTATE
-438 xxxxx 使用了RAISE_ERROR函数的应用发出了一个错误
-440 42884 存储过程或用户自定义函数的参数列表参数个数于预期的个数不匹配
-441 42601 与标量函数一起使用DISTINCT或ALL是不正确的用法
-443 42601 指定的外部函数返回错误的SQLSTATE
-444 42724 与被称为存储过程或用户自定义函数有关的程序不能找到
-449 42878 对存储过程或用户自定义的 函数,CREATE或ALTER语句不正确(缺失EXTERNAL NAME 子句)
-450 39501 存储过程或用户自定义函数写入存储器的值超过了参数声明的长度
-451 42815 CREATE FUNCTION中指定了不正确的数据类型
-453 42880 用户自定义函数中的RETURNS语句无效
-454 42723 指定的函数识别标记与已存在的另一函数的识别标记冲突
-455 42882 模式名不比配
-456 42710 为用户自定义函数指定的函数名已经存在
-457 42939 用户自定义函数或用户自定义类型正试图使用系统中定义的函数或者类型所用的名称
-458 42883 没有找到函数
-463 39001 特定的外部例程返回无效的SQLSTATE
-469 42886 参数定义为OUT或INOUT的CALL语句必须提供宿主变量
-470 39002 指定了NULL参数,但是该例程却不支持NULL
-471 55023 存储过程或用户自定义函数失败:提供原因代码
-472 24517 外部的函数程序使游标处于打开状态
-473 42918 用户自定义数据类型命名不能和系统定义的数据类型一样
-475 42866 结果类型不能被转换成RETURNS类型
-476 42725 在其模式中该函数不是独一无二的
-478 42893 不能DROP或REVOKE特定的对象,因为其他对象依赖于该对象
-480 51030 直到存储过程已经被CALL后,DESCRIBE PROCEDURE和ASSOCIATE LOCATORS才能被发布
-482 51030 存储过程不返回到任何一个定位器
-483 42885 CREATE FUNCTION语句中的参数个数与源函数中的参数个数不匹配
-487 38001 选择了NO SQL选项建立指定的存储过程或用户自定义函数,但却视图发布SQL语句
-491 42601 CREATE FUNCTION语句无效,因为该语句没有RETURNS语句或者因为该语句没有指定有效的SOURCE或者EXTERNAL语句
-492 42879 指定函数的指定参数的个数有错误
-495 57051 语句的估计处理器成本超出了资源限制
-496 51033 语句无法执行,因为当前服务器与调用存储过程的服务器不同
-497 54041 指定的数据库超过了32767 OBID的上限,或者CREATE DATABASE语句使之达到了32511DBID的上限
-499 24516 指定的游标已被分配到结果集,该结果集来自已经指定的存储过程
-500 24501 因为连接被破坏,WITH HOLD游标被关闭
-501 24501 在试图获取数据或关闭一个游标前必须打开一个游标
-502 24502 在没有关闭游标前不能再次打开游标
-503 42912 因为列在游标的FOR UPDATE OF语句中没有被指定,该游标用于获取该列,所以不能更新该列
-504 34000 不能引用一个游标,因为他不是定义到程序里的
-507 24501 在试图更新或者删除WHERE CURRENT OF前,必须打开游标
-508 24504 因为被引用的游标当前不是处于数据行上,所以不能被更新或删除
-509 42827 除了在游标上指定的那个表(该表由WHERE CURRENT OF语句引用的)以外,再也不能从别的表上更新数据
-510 42828 表或视图不能被修改
-511 42829 对不可修改的表或视图,FOR UPDATE OF语句无效
-512 56023 对远程对象的无效引用
-513 42924 一个别名不能再被定义成另外的别名
-514 26501 游标尚没有被准备
-516 26501 试图描述未准备好的SQL语句
-517 07005 因为SQL语句尚没有准备好,游标无效
-518 07003 试图执行尚没有准备好的SQL语句
-519 24506 当为游标的SQL语句发布一个准备语句是,游标不能是打开的
-525 51015 不能在已指定的程序包中执行SQL语句,因为在绑定时间内该程序包无效
-526 42995 在给定的上下文中,不能使用全局的临时表
-530 23503 对特定的约束名指定了无效的外健值
-531 23504 从版本5开始,父关键字的多行更新将试图删除一个外关键字依赖的父关键字值,在版本5以前,当引用主关键值外健值当前存在时,试图更新该主健值
-532 23504 删除操作违反了已指定的参照约束
-533 21501 多行插入无效,试图将多行插到自我引用的表中
-534 21502 可改变主健列值的更新语句不能在同一时刻用于更新多行
-535 21502 当从自我引用表中删除数据或者更新主健列时,不能指定WHERE CURRENT OF。不是版本5的子系统才调用该代码
-536 42914 因为某一特定表的参照约束存在,所以删除语句无效
-537 42709 在外健语句或主健语句的规范中,每个列的出现不能多于一次
-538 42830 无效的外健;不符合引用的表没有主健
-539 42888 不能定义外健,因为被引用的表没有主健
-540 57001 表定义不完整,直到为主健建立了唯一索引或UNIQUE语句、或者包含GENERATED BYDEFAULT属性的ROWID列
-542 42831 可以为空的列不允许作为主健的一部分包含在内
-543 23511 因为该表是指定了SET NULL删除规则的参照约束的父表而且检查约束不允许NULL,所以DELETE不能发生
-544 23512 不能用ALTER添加检查约束,因为已存在的某行与该检查约束冲突
-545 23513 INSERT或者UPDATE导致检查约束冲突
-546 42621 在CREATE或ALTER TABLE中指定的检查约束无效
-548 42621 因为指定的列而引起的检查约束无效
-549 42509 DYNAMICRULES(BIND)计划或程序包的无效SQL语句
-551 42501 用户试图对不拥有权限的特定的对象进行操作,或者表不存在
-552 42502 用户试图执行未被授权的操作
-553 42503 不能指定CURRENT SQLID,因为用户尚没有被允许改变那个ID
-554 42502 不能对你本身赋予一个权限
-555 42502 不能对你本身撤销一个权限
-556 42504 不能撤销用户没有拥有的权限
-557 42852 指定了不一致的授予或撤销关键词
-558 56025 为授予或撤销语句指定了无效的语句(一个或一组)
-559 57002 DB2权限机制已经禁用,授予或者撤销不能被发布
-567 42501 指定的权限ID缺少对指定的程序包的绑定权限
-571 25000 不允许多点更新
-573 42890 不能定义参照约束,因为已指定的父表中在指定的列上没有唯一健
-574 42864 指定的缺省与列定义冲突
-577 38002 试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择MODIFIES SQL DATA选项
-579 38004 试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择READ SQL DATA选项,也没有选择MODIFIES SQL DATA选项
-580 42625 CASE表达式中的结果表达式不能都是空的
-581 42804 CASE表达式中的结果表达式为不兼容的数据类型
-582 42625 SEARCHED-WHEN-CLAUSE中的查找条件指定了一个限定的、IN或EXISTS谓词
-583 42845 指定的函数失败,因为他不是决定性的,或者可能有外部动作
-585 42732 在当前路径中模式名不止一次出现
-586 42907 CURRENT PATH专用寄存器在长度上不能超过254字符
-587 428C6 项目引用的列表必须是同一个家族
-590 42734 在命名的存储过程或用户自定义的函数中的参数必须是独一无二的
-592 42510 没有授权权限,让你在WLM环境中建立的存储过程或者用户自定义函数
-601 42710 试图创建(或重命名)已经存在的对象
-602 54008 CREATE INDEX语句中指定的列太多
-603 23515 因为发现有重复值,所以不能建立唯一的索引
-604 42611 在CREATE或ALTER TABLE语句中的为数据类型指定的长度、精度以及标度无效
-607 42832 指定的INSERT、UPDATE或DELETE语句不能被发布,应为这些语句对DB2 CATLOG表执行写操作
-611 53088 当LOCKSIZE是TABLE或者TABLESPACE时,LOCKMAX必须为0
-612 42711 在同一个表、索引或试图中不允许有重复列名
-613 54008 主健或UNIQUE约束太长或者包含了太多的列
-614 54008 已经超过了索引的内部健长度的最大长度(255)限制
-615 55006 不能删除这个程序包,因为该程序包目前正在执行
-616 42893 指定的对象不能被删除,因为其他对象依赖于该对象
-617 56089 对于DB2版本6,1型索引无效。对于以前的版本,1型索引不能用LOCKSIZE ROW或LARGE表空间定义
-618 42832 对DB2 CATALOG表的请求操作时不允许的
-619 55011 DSNDB07不能修改,除非他先被停止了
-620 53001 对在DSNDB07中的表空间不允许指定该关键词
-621 58001 遇到了重复的DBID,遇到了系统问题
-622 56031 不能指定FOR MIXED DATA因为没有安装混合数据选项
-623 55012 不能为单一的表定义多个族索引
-624 42889 不能为单一的表定义多个主健
-625 55014 用主健定义的表要求唯一索引
-626 55015 不能发布ALTER语句来改变PRIQTY SECQTY或ERASE,除非先停止了表空间
-627 55016 不能发布ALTER语句来改变PRIQTY SECQTY或ERASE,除非先把表空间定义为使用存储器组的表空间
-628 42613 指定语句时相互排斥的(例如,不能分区一个分段的表空间)
-629 42834 因为该外健不能包含空值,所以SET NULL无效
-630 56089 不能为1型索引指定WHERE NOT NULL
-631 54008 无效的外健;要么是比254个字节长,要么包含的列数多于40
-632 42915 指定的删除规则禁止把这个表定义为已制定表的从属表
-633 42915 无效删除规则;必须使用特定的强制删除规则
-634 42915 在这种情况下,DELETE CASCADE不允许
-635 42915 删除规则不能有差异或者不能为SET NULL
-636 56016 在分区索引健的升序或降序规范中,分区所以必须与该规范一致
-637 42614 遇到重复的关键词
-638 42601 在CREATE TABLE语句中缺少列定义
-639 56027 带有SET NULL的删除规则的外健的可空列不能是分区索引的列
-640 56089 不能为这个表空间指定LOCKSIZE ROW,因为在该表空间中的表上定义了1型索引
-642 54021 唯一约束包含太多的列
-643 54024 检查约束超出了3800个字符的最大长度
-644 42615 在SQL语句中为关键词指定的值无效
-646 55017 在指定的分区表空间或者缺省表空间中不能创建表,因为指定的表空间已经包含了一个表
-647 57003 指定的缓冲池无效,因为他没有被激活
-650 56090 ALTER INDEX不能被执行;提供了原因代码
-651 54025 如果CREARE或ALTER TABLE被允许,表对象的描述词(object descriptor,OBD)将超过最大值(32KB)
-652 23506 遇到了EDITRPROC或VALIDPROC冲突
-653 57004 在分区表空间中的表不可用,因为分区索引尚未被创建
-655 56036 在卷的列表中,STOGROUP不能指定为特定的或不特定(“*”)的卷
-658 42917 当试图删除指定的对象时,无法删除该对象,该对象的删除必须通过删除与之相关联的对象完成
-660 53035 不正确的分区索引规范,必须为族索引定义有限制的关键字
-661 53036 分区索引没有指定恰当的分区数目
-662 53037 试图在未分区的表空间(分段的或简单的)上建立分区索引
-663 53038 为分区索引指定的关键字限制值是一个无效数字
-665 53039 为ALTER TABLESOACE语句指定了无效的PART语句
-666 57005 SQL语句不能被处理,因为指定的函数当前正处于进行过程中
-667 42917 不能明确的删除分区表空间的族索引,必须除去分区表空间来去掉分区索引
-668 56018 不能向用EDITPROC定义的表中添加列
-669 42917 不能显式的删除分区表空间中的表,必须删除分区表空间来删除表
-670 54010 表的记录长度超过了页面的大小
-671 53040 不能更改指定的表空间的缓冲池,因为这将改变表空间的页面大小
-672 55035 在命名的表上不允许DROP
-676 53041 只有4KB的缓冲池可被用于一个索引
-677 57011 缓冲池扩展失败,由于可用的虚拟内存的大小不足
-678 53045 为才分区索引中指定的限制健提供的值与数据类型不符
-679 57006 不能创建某一个特定对象,因为该对象的一个drop目前正在挂起
-680 54011 对DB2表不能超过750列
-681 23507 列违反了指定的FIELDPROC
-682 57010 不能载入FIELDPROC
-683 42842 列、单值类型、函数或者过程无效,因为不兼容语句。例如,指定的INTEGER具有FORBITDATA选项
-684 54012 指定的文字列表不能超过254个字节
-685 58002 FIELDPROC返回一个无效的域描述
-686 53043 用FIELDPROC定义的一个列不能与一个使用不同的FIELDPROC定义的列作比较
-687 53044 列不能与一个非兼容字段类型的列比较
-688 58002 返回不正确的数据
-689 54011 从属表定义了太多的列
-690 23508 数据定义的控制支持拒绝这个语句
-691 57018 命名的注册表不存在
-692 57018 命名的索引不存在,但命名的注册表需要该索引
-693 55003 命名的注册表/索引的命名列无效
-694 57023 DROP正在命名的注册表上挂起
-696 42898 由于相关的名字或者转换表的名字使用不正确,指定的触发器无效
-697 42899 FOR EACH语句被指定,因此与OLD合NEW相关的名字是不允许的,或者不能为一个BEFORE触发器指定OLD_TABLE和NEW_TABLE
-713 42815 指定的专用寄存器是无效的
-715 56064 命名的程序不能被运行,因为他依赖与你所安装的DB2版本的部件,但是你的数据中心没有安装这个部件
-716 56065 命名的程序使用这个版本的不正确的发行版本做了预编译
-717 56066 BIND失败,因为他依赖与你所安装的DB2版本的部件,但是你的数据中心没有安装这个部件
-718 56067 REBIND失败,因为IBMREQD列无效
-719 42710 不能BIND ADD一个已经存在的程序包
-720 42710 不能BIND REPLACE一个已经存在的程序包版本
-721 42710 程序包的一致性记号必须是独一无二的
-722 42704 绑定错误,因为指定的程序包不存在
-723 09000 一个触发的SQL语句接受到一个错误
-724 54038 达到了(16)级联间接的SQL语句的最大项目
-725 42721 对专门指定的寄存器提供了一个无效值
-726 55030 因为SYSPKSYSTEM条目,不能绑定这个程序包
-728 56080 指定的数据类型不能与私有协议发布一起使用
-729 429B1 用COMMIT ON RETURN定义的存储过程不能用作嵌套的CALL过程的目标
-730 56053 在只读的共享数据库中为表定义的参照完整性无效
-731 56054 VSAM数据集必须用SHAREOPTION(1.3)定义
-732 56055 被定义为只读型数据库却拥有没有定义空间或者索引空间的DB2子系统
-733 56056 只读共享数据库的定义不一致
-734 56057 一旦一个数据库被定义为ROSHARE READ,他将不能被更改为其他不同的ROSHARE状态
-735 55004 用DBID名称标识的数据库不再是一个只读共享数据库
-736 53014 命名的DBID无效
-737 53056 在这种状况下,不能建立一个隐含的表空间
-739 56088 因为同时指定了ALLOW PARALLEL和MODIELES SQL DATA这两个语句,因此已设定的函数将不能再被更改
-740 51034 在这种方式下不能用MODIELES SQL DATA定义指定的函数
-741 55030 已经为命名的共享组成员的数据定义了工作文件数据库
-742 53004 DSNDB07是隐含的工作文件数据库
-746 57053 在特定的触发器、存储过程或函数中的SQL语句违反嵌套SQL限制
-747 57054 指定的表是不可用的除非为LOB数据列建立起必须的辅助表
-748 54042 在指定的辅助表上已经有一个索引
-750 42986 不能对已指定的表重新命名,因为他至少在一个现存的视图或触发器中被引用
-751 42987 存储过程或用户自定义的函数试图执行一个不允许执行的SQL语句。DB2的线程被置于MUST_ROLLBACK状态
-752 0A001 无效CONNECT语句
-763 560A1 无效的表空间名
-764 560A2 LOB表空间必须与其相关的基表空间同在一个数据库中
-765 560A3 表和数据库不兼容
-766 560A4 不能对辅助表进行请求的操作
-767 42626 CREATE INDEX失败,因为在辅助表中为索引指定了列,或者因为没有为非辅助表的索引指定列
-768 560A50 不能为指定的列或者指定的分区建立辅助表,因为其辅助表已经存在
-769 53096 CREATE AUX TABLE的规格与基表不匹配
-770 530A6 指定的表必须有一个ROWID列,那么该表才可以包含一个LOB列
-771 428C7 无效的ROWID列规范
-797 42987 CREATE TRIGGER包含不被支持的语法
-798 428C9 不能把一个值插入到用GENERATED ALWAYS定义的ROWID列
-802 22012 某一特定操作发生了异常错误。被零除

22003 某一特定操作发生了异常错误。但不是被零除
-803 23505 不能插入行,因为这将违反唯一索引的约束
-804 07002 SQLDA的调用参数列表有误
-805 51002 在计划中没有发现DBRM或程序包名
-807 23509 对已指定的环境和连接,该程序包不可用
-808 08001 CONECT语句与程序中的第一个CONNECT语句不一致
-811 21000 当多行作为一内嵌的选择语句的返回结果是,必须使用游标
-812 22508 在CURRENT PACKAGESET中的ID集合是空白的,语句不能被执行
-815 42920 在一个内置选择语句或者一个基本谓词的子查询中,显式的或隐含的指定了GROUP BY或HAVING语句
-817 25000 执行SQL语句将可能导致禁止更新用户数据或DB2编目
-818 5103 计划<->载入组件的时间戳不匹配,在执行计划中没有从同一个预编译中建立DBRM,该预编译是作为组件载入的
-819 58004 视图不能重建,因为在DB2编目中存储的分析树长度为0
-820 58004 在这个DB2版本的DB2编目中遇到了无效值
-822 51004 在SQLDA中遇到了无效地址
-840 54004 在选择列表或插入列表中返回的项目太多
-842 08002 到指定位置的连接已经存在
-843 08003 SET CONNECTION或RELEASE语句无法执行,因为连接不存在
-870 58026 宿主变量描述符的个数不等于语句中宿主变量的个数
-872 51302 这个子系统已指定了有效的CCSID
-873 53090 同一SQL语句中,不能同时引用EBCDIC表中的定义的列和ASCII表中定义的列
-874 53901 指定对象的编码方案与其表空间的编码方案不匹配
-875 42988 指定的操作符不能用于ASCII数据
-876 53092 不能为指定的原因创建对象:提供了原因代码
-877 53093 数据库或表空间不允许用ASCII,必须使用EBCDIC
-878 53094 该PLAN——TABLE不能是ASCII,必须使用EBCDIC
-879 53095 指定对象的CREATE或ALTER语句不能将列、单值类型,某个存储过程或用户自定义函数的参数定义为以下类型:MAXED DATA,GRAPHIC,VARGRAPHIC,LONGVARGRAPHIC,因为系统没有为指定的编码方案定义相应的CCSID
-900 08003 应用处理没有连接到应用服务器,语句不能被执行
-901 58004 遇到时断时续的系统错误,该错误不能抑制后继的SQL语句的执行
-902 58005 内部控制块的指针错误,要求重新绑定
-904 57011 指定的资源不可用
-905 57014 超出了资源上限
-906 51005 因为重大错误,SQL语句无法执行
-908 23510 当前资源限制设施的规范或者自动重绑定的系统参数不允许BIND,REBIND,AUTOREBIND
-909 57007 对象已被删除
-910 57007 因为在该对象上挂起DROP,所以不能访问该对象
-911 40001 当前工作单元已被回滚
-913 57033 因为死锁或超时导致不成功执行
-917 42969 绑定程序包已经失败
-918 51021 SQL语句不能被执行,因为连接丢失
-919 56045 需要一个ROLLBACK
-922 42505 连接权限失败。试图从TSO、CICS或IMS访问DB2,同时相应的连接设施处于非活动的状态
-923 57015 因为DB2不可用,所以不能建立连接
-924 58006 遇到了DB2内部的连接错误:提供了原因代码
-925 2D521 SQL的COMMIT语句不能从CICS或IMS/TM发布
-926 2D521 SQL的ROLLBACK语句不能从CICS或IMS/TM发布
-927 51006 当正在连接的环境没有建立时,语言接口被调用。利用DSN命令激发该程序
-929 58002 数据获取退出已经失败(DPROP)
-939 51021 由于远程服务器的未请求的回滚,要求一个回滚
-947 56038 SQL语句失败,因为更新不能被传播(DPROP)
-948 56062 DDF没有启动,分布式操作无效
-950 42705 在SQL语句中指定的位置在SYSIBM.LOCATIONS中没有定义
-965 51021 存储过程非正常终止(在DB2 6之前的版本)
-981 57015 当前不是处于允许SQL的状态时,试图在RRSAF中执行SQL
-991 57015 调用连接不能建立一个到DB2的隐含或开放连接
-2001 53089 为储存过程指定的宿主变量参数的个数不等于预期的参数个数
-20003 560A7 不能为GRECP中的表空间或索引指定GBPCACHE NONE
-20004 560A8 对于WORKFILE对象。8KB或16Kb的缓冲池页面大小无效
-20005 54035 指定的对象类型超出了内部的ID极限
-20006 53097 当没有指定WLM环境时,LOB不能被指定为参数
-20070 53098 不能非LOB列建立一个辅助表
-20071 53099 必须指定WLM环境名
-20072 56052 指定的权限ID不拥有在触发器程序包上执行BIND所需的权限
-20073 42927 不能按照指定的要求更改命名的函数,因为在现存的视图定义中引用了该函数
-20074 42939 不能建立指定的对象,因为“SYS”是一个保留的前缀
-20100 56059 在被触发的SQL语句中有BIND错误,指定了错误的SQLCODE和SQLSTATE
-20101 56059 由于指定的原因代码,该函数失败
-20102 42849 在CREATE或ALTER FUNCTION语句中不能使用指定的选项
-20104 42856 更改一个CCSID失败
-20106 42945 不能改变表空间或数据库的CCSID,因为现存的试图引用
-30000 58008 DRDA分布协议错误;处理可以继续
-30002 57057 使用DRDA的分布式客户把OPEN语句连接到PREPARE,但PREPARE接受到一个SQLCODE为+495的警告
-30020 58009 DRDA分布协议错误;对话被解除
-30021 58010 DRDA分布协议错误;处理不能继续
-30030 58013 违反分布协议:COMMIT不成功,对话被解除(AS)
-30040 57012 因为不能得到资源,执行失败,处理可以继续(AS)
-30041 57013 因为不能得到资源,执行失败,处理不能成功的继续(AS)
-30050 58011 执行不成功,在BIND过程中不能执行语句
-30051 58012 特定的BIND过程不是处于活动状态(远程BIND),从而导致失败
-30052 42932 程序准备的假设错误
-30053 42506 程序包的拥有者遭遇授权失败
-30060 08004 RBD遭遇授权失败
-30061 08004 指定了无效或者没有存在的RDB
-30070 58014 目标子系统不支持这个命令
-30071 58015 目标子系统不支持这个对象
-30072 58016 目标子系统不支持这个参数
-30073 58017 目标子系统不支持这个参数值
-30074 58018 应答信息不被支持
-30080 08001 SNA通信错误
-30081 58019 TCP/IP通信错误
-30082 08001 由于安全冲突、通信失败:提供了原因代码
-30090 25000 指定的操作对远程执行失败
-30104 56095 在绑定选项与绑定值中有错误
-30105 56096 指定的绑定选项不兼容
posted @ 2012-12-14 10:04 何杨 阅读(389) | 评论 (0)编辑 收藏

OI导出Excel文档时,可以设置很多格式效果,比如:边框,字体,颜色等等。
本文仅仅列出颜色的列表展示,方便大家查阅。  
颜色Class名称short

BLACK8

BROWN60

OLIVE_GREEN59

DARK_GREEN58

DARK_TEAL56

DARK_BLUE18

INDIGO62

GREY_80_PERCENT63

DARK_RED16

ORANGE53

DARK_YELLOW19

GREEN17

TEAL21

BLUE12

BLUE_GREY54

GREY_50_PERCENT23

RED10

LIGHT_ORANGE52

LIME50

SEA_GREEN57

AQUA49

LIGHT_BLUE48

VIOLET20

GREY_40_PERCENT55

PINK14

GOLD51

YELLOW13

BRIGHT_GREEN11

TURQUOISE15

SKY_BLUE40

PLUM61

GREY_25_PERCENT22

ROSE45

TAN47

LIGHT_YELLOW43

LIGHT_GREEN42

LIGHT_TURQUOISE41

PALE_BLUE44

LAVENDER46

WHITE9

CORNFLOWER_BLUE24

LEMON_CHIFFON26

MAROON25

ORCHID28

CORAL29

ROYAL_BLUE30

LIGHT_CORNFLOWER_BLUE31

AUTOMATIC64
posted @ 2012-12-13 23:36 何杨 阅读(552) | 评论 (0)编辑 收藏

如果RSA/Eclipse总是处于Building中,可能是错误的工程在Wrokspace中导致的,此问题严重起来可能导致无法使用RSA/Eclipse.
我的处置办法如下:
1.将“Build Automatically”取消。
2.关闭RSA/Eclipse,如果Building还在处理中,在任务管理器中找到Eclipse进程,Kill掉。
3.再次打开RSA/Eclipse,删除掉可能导致Building出错的工程。如果实在不清楚,全部删除之。
4.再启用“Build Automatically”选项,此时Build会开始,然后就正常结束了。

有的网文说在Eclipse启动时加入参数:   -vmargs -Xmx512M能解决问题,我试了无效,可能和他遇到的问题不是一个。
posted @ 2012-11-09 08:39 何杨 阅读(284) | 评论 (1)编辑 收藏

在Servers窗口中,右键点击服务器,弹出菜单中选“Administration”,再选“Run Administrative Console”,如下图:
posted @ 2012-11-09 08:05 何杨 阅读(389) | 评论 (0)编辑 收藏

在Servers窗口中,找到目标服务器,右键点击,在弹出菜单中选属性。第三项就包括了Was服务器的常规信息。
posted @ 2012-11-08 15:18 何杨 阅读(273) | 评论 (0)编辑 收藏

右键点击工程,选属性一项,找到“Web Project Setting”选项,在Context Root中输入新的context,图示如下:
posted @ 2012-10-18 14:30 何杨 阅读(216) | 评论 (0)编辑 收藏

点击菜单windows->Preferences->server->websphere
将Allow applications containing errors to be published on a server一项勾选。

如果不进行这项设置,在部署时会出现以下错误。

Publish failed with errors, warnings or both. Please see server logs for more details.

 The application contains validation errors. Correct the errors in the Problems view before publishing the application on the server. If you want to allow applications containing errors to be published on the server, enable the Allow applications containing errors to be published on a server check box (Windows > Preferences >Servers > WebSphere).

No start tag (<p>).

但愿你不是出错了再回来找的。J

posted @ 2012-10-17 13:58 何杨 阅读(278) | 评论 (0)编辑 收藏

下是使用RSA(Rational Software Architect)时的一个Tip,在这里写下来,希望能对那些遇到和我同样困扰问题的人有些帮助。

使用RSA开发web程序时,会需要把应用发布到容器中,但有时RSA是没有显示Servers窗口的,使用“Show View”菜单也见不到。
此时无需慌乱,切换到Web视图,再使用“Show View”菜单,servers窗口就显示出来了。
以下是切换到Web视图的图示:


以下是使用“Show View”菜单,显示servers窗口的图示

以下是Servers窗口显示出来的图示



就这么简单,可有时寸劲遇到了也能让人烦一阵的。

posted @ 2012-10-16 13:32 何杨 阅读(188) | 评论 (0)编辑 收藏

下载地址:
http://www.blogjava.net/Files/heyang/Utf8Test20120927.rar

转化效果:
%E4%BD%95%E6%9D%A8%E5%88%B0%E6%AD%A4%E4%B8%80%E6%B8%B8%EF%BC%81
何杨到此一游!

有时候也挺好玩的。
posted @ 2012-09-27 23:48 何杨 阅读(302) | 评论 (2)编辑 收藏

2012年6月21日15:21:59

程序代码下载:
http://www.blogjava.net/Files/heyang/ViewDsSample.zip
注意这个程序是RSA中的Dynamic Web Project


如果需要建立数据源,请参考:
http://www.blogjava.net/heyang/archive/2012/06/21/381257.html

如果需要建立JDBC Provider,请参考:
http://www.blogjava.net/heyang/archive/2012/06/21/381254.html

由于是示例代码,所以比较简单,功能就是访问数据库中一张表,然后把数据在表格中显示出来。index.jsp中的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page language="java" autoFlush="true" isThreadSafe="true" buffer="10kb" %>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="java.util.*,java.lang.*,java.math.*"%>


<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="java.sql.ResultSet"%>


<html>
    
<head>
        
<title>View DataSource In Was</title>
    
</head>
    
    
<body>
        
<table width="100px" border="1">
        
<caption>Visit the data in DataSource</caption>    
        
<thead>
        
<tr>
            
<td width="50px">Id</td>
            
<td width="50px">Name</td>
        
</tr>    
        
</thead>
        
<tbody>
        
<%
            Context ctx
= new InitialContext();
            DataSource ds 
= (DataSource) ctx.lookup("jdbc/localdb2");// 注意这里需要和数据源配置中的jndi名对应上。
            
            Connection con 
= ds.getConnection();
            
String sql = "select * from SYSTEM.TESTTB0619";
            
            Statement stmt 
= con.createStatement();
            ResultSet rs
=stmt.executeQuery(sql);
            
            
while (rs.next()) {
                
String id = rs.getString("id");
                
String name = rs.getString("name");
                
                out.println(
"<tr>");
                out.println(
"<td>"+id+"</td>");
                out.println(
"<td>"+name+"</td>");
                out.println(
"</tr>");
            }
            
            
            rs.close();
            stmt.close();
            con.close();
        
%>
        
</tbody>
        
</table>
    
</body>
</html>

首页显示效果如下:
posted @ 2012-06-21 15:25 何杨 阅读(289) | 评论 (0)编辑 收藏

2012年6月21日14:54:37

在进行以下步骤前需要先增加一个JDBC Provider,如果没有,请参考http://www.blogjava.net/heyang/archive/2012/06/21/381254.html

01.左边点"Resources"->"JDBC"->"Data Sources",右边点"New"。


02.DataSource名自己定,jndi名是要给程序用的,两方面要协调一致,下一个框是选访问数据库的用户名密码,没有可以新建一个。


03.这一步是选JDBC Provider,http://www.blogjava.net/heyang/archive/2012/06/21/381254.html一文中所有工作就是为了这一步。


04.这一步的参数除了Dirver type不用动之外,其它的按照你的实际情况输入。


05.这一步就是选Finish。


06.这一步就是要点Save。


07.测试一下,连接成功了。




好了,下一步可以在程序中测试这个数据源DataSource是否好用了。
posted @ 2012-06-21 14:53 何杨 阅读(267) | 评论 (0)编辑 收藏

2012年6月21日14:29:40

1.左边点"Resource">"JDBC">"JDBC Provider",右边点"New".


2.按图示的选项进行选择,Provider名字自己定。


3.这一步是找两个关键的jar所在的目录,一个是db2jcc.jar,一个是db2jcc_license_cisuz.jar,如果安装了Db2的话,这两个jar会出来。在我机器上,
它们位于C:\Program Files\IBM\SQLLIB\java和C:\Program Files\IBM\SQLLIB_01\java中。


4.这一步点Finish就行了。


5.最后完成了。


Provider是给DataSource用的,在下一节就会看到。

2012年6月21日14:36:36
posted @ 2012-06-21 14:28 何杨 阅读(381) | 评论 (0)编辑 收藏

网络上有很多网页父子窗口通信的文章,自己也曾写过,现在看来,问题应该简单化了,没有那么复杂。
只需要:
opener+函数+隐藏域   即可,这里的函数和隐藏域都是父窗口的。

比如说,子窗口要取父窗口的数据,可以在父窗口中做一个隐藏域,打开子窗口前把值存储好,再写一个函数来取得隐藏域中的值,子窗口中就能用opener+函数名来取得这个值了。
反过来,父窗口要取子窗口的数据,可以在父窗口中做一个函数,子窗口中数据就绪后直接opener+函数名调用这个函数即可,参数就是数据。

这样做,省去了很多麻烦。如果隐藏域不允许,那么再考虑别的方法不迟。
posted @ 2012-05-14 22:43 何杨 阅读(265) | 评论 (0)编辑 收藏

通常的网页编程原则是把形式,内容和表现分开,这样页面组件的事件处理就转移到了
window.onload或是Dom.onready中,写在一起。

有时,如果对页面组建进行删除或是更改id,会导致js出现错误,找不到组件,结果下面的正确js也无法执行了。
在进行页面调整阶段这个问题很常见。

当然,修改过来是正确的做法,另外我们还可以通过组件检测来做,这样的好处是页面调整后,js无需改变。
以下代码供参考:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 
<head>
  
<title> New Document </title>
  
<meta name="Generator" content="EditPlus">
  
<meta name="Author" content="">
  
<meta name="Keywords" content="">
  
<meta name="Description" content="">
 
</head>

 
<body>
  
<button id="btn1">BTN1</button>
  
<br/>
   
<button id="btn2">BTN2</button>
 
</body>
</html>

<script type="text/javascript">
<!--

if(document.getElementById("btn1")){
    document.getElementById(
"btn1").onclick=function(){
        alert(
1);
    };
}

if(document.getElementById("btn2")){
    document.getElementById(
"btn2").onclick=function(){
        alert(
2);
    };
}

//-->
</script>
posted @ 2012-05-14 14:17 何杨 阅读(202) | 评论 (0)编辑 收藏


<html>
    
<head>

        
<title>123</title>    
        
<style>
        
</style>        

    
</head>
    
<body>
        
<div>123</div>
        
<div>456</div>

        
<script>
            
            
function test(object){
              
var tag = object.innerHTML;
              alert(tag)
            }
            
var divs = document.getElementsByTagName('div');
            
for(var i = 0, len = divs.length; i < len; i++){
                divs[i].onclick 
= function(){
                    test(
this)
                }
            }
            
        
</script>
    
</body>
</html>
posted @ 2012-04-28 10:20 何杨 阅读(244) | 评论 (0)编辑 收藏

ApplicationContext context=ContextLoader.getCurrentWebApplicationContext();

当Spring启动起来后,取得上下文可以如此处理,上述代码适宜放在静态构造子中,然后将值传给一个静态变量。
posted @ 2012-04-20 17:31 何杨 阅读(351) | 评论 (0)编辑 收藏

在Web程序中,url重写后后会出现CSS失效的情况,即页面元素都在,但给它们加上的样式都无效了。

原因:
一般是加载CSS文件的路径在翻页后处于错误的位置,这时可以用FireFox打开网页,查看网页源码,再点击CSS下方的链接,看是否能链接到CSS文件,链接不到是报错的。

处置:
在html开始前加上如下代码:
<%  
    
String path = request.getContextPath();  
    
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>
<html>
    
<head>
        
<base href="<%=basePath%>">
        
<title>XXX</title>

    
</head>

接下来其它的CSS,JS,IMG写好相对地址就好了。
posted @ 2012-04-20 12:04 何杨 阅读(579) | 评论 (0)编辑 收藏

工程下载本工程适用于MyEclipse

WAR文件下载本War已经与WAS6.1测试过

一些重要的代码
appctx.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
<bean id="userService" class="com.service.UserService">
    
</bean> 

</beans>

UserController.java
package com.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.domain.User;
import com.service.UserService;

@Controller
@RequestMapping(
"/user")
public class UserController{
    @Autowired
    
private UserService userService;
    
    
    @RequestMapping(
"/register")
    
public ModelAndView createUser(User user){
        userService.register(user);
        
        ModelAndView mav
=new ModelAndView();
        
        mav.setViewName(
"registerOk");
        mav.addObject(user);
        
        
return mav;
    }
    
    @RequestMapping(
"/login")
    
public ModelAndView login(User user){
        userService.login(user);
        
        ModelAndView mav
=new ModelAndView();
        
        mav.setViewName(
"loginOk");
        mav.addObject(user);
        
        
return mav;
    }
}

User.java
package com.domain;


public class User{
    
private String userName;
    
    
private String userPswd;
    
    
public String getUserName() {
        
return userName;
    }
    
public void setUserName(String userName) {
        
this.userName = userName;
    }
    
public String getUserPswd() {
        
return userPswd;
    }
    
public void setUserPswd(String userPswd) {
        
this.userPswd = userPswd;
    }
}

UserService.java
package com.service;

import com.domain.User;


public class UserService{
    
public boolean login(User user){
        
return true;
    }
    
    
public boolean register(User user){
        
return true;
    }
}
spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context
="http://www.springframework.org/schema/context"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>

    
<context:annotation-config />
    
    
<!-- 扫描 com.controller下标记了@Controller注解的类 -->
    
<context:component-scan base-package="com.controller" />
    
    
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

    
<!-- 视图名称解析器 p:prefix前缀是路径,p:suffix是扩展名-->
    
<bean
        
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix
="/" p:suffix=".jsp" />

    
<bean id="multipartResolver"
        class
="org.springframework.web.multipart.commons.CommonsMultipartResolver"
        p:defaultEncoding
="utf-8" />
</beans> 

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>
    
<display-name>SpringMVCSample01</display-name>

    
<welcome-file-list>
        
<welcome-file>index.jsp</welcome-file>
    
</welcome-file-list>

    
<context-param>
        
<param-name>contextConfigLocation</param-name>
        
<param-value>classpath:appctx.xml</param-value>
    
</context-param>
    
<listener>
        
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
</listener>

    
<servlet>
        
<servlet-name>spring</servlet-name>
        
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        
<load-on-startup>1</load-on-startup>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>spring</servlet-name> 
        
<url-pattern>*.html</url-pattern>
    
</servlet-mapping>
</web-app>

login.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
        
<title>登录页面</title>
    
</head>

    
<body>
        登录
<br/>
        
<form method="post" action="<c:url value="/user/login.html"/>">
            
<input type="text" name="userName"/><br/>
            
<input type="password" name="userPswd"/><br/>
            
<input type="submit" name="提交">
        
</form>
    
</body>
</html>
loginOk.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
        
<title>登录成功页面</title>
    
</head>

    
<body>
        用户${user.userName}登录成功
    
</body>
</html>
posted @ 2012-04-17 16:51 何杨 阅读(2761) | 评论 (1)编辑 收藏

时不时有人说ImSample下载失效了,搞了个新地址,有要的自己去下载吧。
http://www.blogjava.net/Files/heyang/IMSample2012-4-11.rar
posted @ 2012-04-10 14:01 何杨 阅读(403) | 评论 (5)编辑 收藏

下载地址:
posted @ 2012-03-27 13:36 何杨 阅读(248) | 评论 (0)编辑 收藏

     摘要:                 IBM GDC DL Teambiz后台开发规范 (2012年3月9日修订版)                 撰写:何杨 2012年3月9日   &nb...  阅读全文
posted @ 2012-03-14 10:25 何杨 阅读(395) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中前台开发规范

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年3月9日

版本:1.00

更新日期:  

 

 

第一部分:规范目的

为了提高团队协作效率, 提高前台页面文件的可读性,可维护性和一致性,从而方便前后台人员维护管理, 输出高质量的文档, 特制订此文档.

本规范文档一经讨论确认, 前端开发人员必须按本文档规范进行前台页面开发. 如在执行过程中,文档确有不合时宜的地方,可及时提出, 经会议讨论后决定可以更改此文档后再执行。

第二部分:基本准则

符合web标准, 语义化html, 结构表现行为分离, 兼容性优良. 页面性能方面, 代码要求简洁明了有序, 尽可能的减小服务器负载, 保证最快的解析速度.

程序员应该书写项目组所有人都可以看的懂的代码. 简洁易懂是一种美德. 在你们编写程序时必须时刻为用户着想, 为服务器着想.

第三部分:前台分离制度

我们认为,前台页面混乱的根源之一在于一个页面担负了太多的任务。因此,必须把页面的结构,样式,行为三部分解构开来,这三部分的命名如下:

类型

名称

担负任务

说明

JSP

*.jsp

网页的结构

以下简称JSP

CSS

style.css

网页样式

以下简称CSS

JS

javascript.jsp

网页行为

以下简称JS

 

第四部分:JSP文件书写规范

1. 文档类型声明及编码: 统一为html5声明类型<!DOCTYPE html>; 编码统一为<meta charset="utf-8" />, 书写时利用IDE实现层次分明的缩进;

2. 非特殊情况下样式文件必须外链至<head>...</head>之间;非特殊情况下JavaScript文件必须外链至页面底部; 

3. 引入样式文件或JavaScript文件时, 须略去默认类型声明, 写法如下:

<link rel="stylesheet" href="..." />

<style>...</style>

 

<script src="..."></script>

4. 所有编码均遵循xhtml标准, 标签 & 属性 & 属性命名 必须由小写字母及下划线数字组成, 且所有标签必须闭合, 包括br (<br />), hr(<hr />)等; 属性值必须用双引号包括;

5. 充分利用无兼容性问题的html自身标签, 比如span, em, strong, optgroup, label,等等; 需要为html元素添加自定义属性的时候, 首先要考虑下有没有默认的已有的合适标签去设置, 如果没有, 可以使用须以"data-"为前缀来添加自定义属性,避免使用"data:"等其他命名方式;

6.结构化JSP,示例如下

<div id=”mainMenu”>

<ul>

<li><a href=”#”>首页</a></li>

<li><a href=”#”>介绍</a></li>

<li><a href=”#”>服务</a></li>

</ul>

</div>

很多编译器提供了格式化的工具对代码整形,希望多加利用.如果机器整形效果不如手动整形,请进行手动整形.

6. 尽可能减少冗余的div嵌套, 如<div class="box"><div class="welcome">欢迎访问XXX, 您的用户名是<div class="name">用户名</div></div></div>完全可以用以下代码替代: <div class="box"><p>欢迎访问XXX, 您的用户名是<span>用户名</span></p></div>;

9. 书写链接地址时, 必须避免重定向,例如:href="http://www.baidu.com/", 即须在URL地址后面加上“/”;

10. 在页面中尽量避免使用style属性,即style="…"; 如果需要初始化某元素的style属性,请在CSS中设置或是在JS函数window.onload中设置。

11. 能以背景形式呈现的图片, 尽量写入css样式中;

12. 给区块代码及重要功能(比如表格展现)加上注释, 方便后台添加功能;

第四部分:CSS文件书写规范

1. 文件编码统一为utf-8;

2.结构化CSS,如下

html,body {

            height:100%;

            margin:0px;

            font-size:12px;

}

body{

            margin-top: 5px;

            margin-bottom: 5px;

            margin-left: 5px;

            margin-right: 5px;

            text-align: center;

            font-size: 12px;       

            font-family:"宋体","Tahoma";

            background:#ffffff;             

            overflow-y:hidden;

}

img{

            border:0px;  

}

#header{

            margin:0px;

            padding:0px;

            border:0px solid #00ff00; 

            width:100%;

            height:75px;

            overflow:hidden;

}

2. 协作开发及分工: 架构师会根据各个模块, 同时根据页面相似程序, 事先写好大体框架文件, 分配给前端人员实现内部结构&表现&行为; 共用css文件style.css由架构师书写, 协作开发过程中, 每个页面请务必都要引入,此文件不可随意修改;

3. class与id的使用: id是唯一的并是父级的, class是可以重复的并是子级的, 所以id仅使用在大的模块上, class可用在重复使用率高及子级中;

4. class与id命名:命名要语义化,简明化,尽量使用简易的单词组合; 避免使用中文拼音,以下是约定俗成的一些命名例子,请多加利用:

名称

Id

名称

Id

页 眉

header

内 容

content

容 器

container

页 脚

footer

版 权

copyright

导 航

menu

主导航

mainMenu

子导航

subMenu

标 志

logo

标 语

banner

标 题

title

侧边栏

sidebar

搜 索

search

按 钮

btn

登 录

login

链 接

link

常用类的命名应尽量以常见英文单词为准,做到通俗易懂,并在适当的地方加以注释。对于二级类/ID命名,则采用组合书写的模式,后一个单词的首字母应大写:诸如“搜索框”则应命名为“searchInput”、“搜索图标”命名这“searchIcon”、“搜索按钮”命名为“searchBtn”。

5. css属性书写顺序, 建议遵循 布局定位属性-->自身属性-->文本属性-->其他属性. 此条可根据自身习惯书写, 但尽量保证同类属性写在一起. 属性列举: 布局定位属性主要包括: margin & padding & float(包括clear) & position(相应的 top,right,bottom,left) & display & visibility & overflow等; 自身属性主要包括: width & height & background & border; 文本属性主要包括: font & color & text-align & text-decoration & text-indent等;其他属性包括: list-style(列表样式) & vertical-vlign & cursor & z-index(层叠顺序)  & zoom等. 我所列出的这些属性只是最常用到的, 并不代表全部;

6. 书写代码前, 考虑并提高样式重复使用率;

7. 充分利用html自身属性及样式继承原理减少代码量, 比如:

<ul class="list"><li>这儿是标题列表<span>2010-09-15</span></ul>

定义

ul.list li{position:relative} ul.list li span{position:absolute; right:0}

即可实现日期居右显示.

8. 必须为大区块样式添加注释, 小区块适量注释;

9. 代码缩进与格式: 建议单行书写;

第五部分:JS文件书写规范

1. 文件编码统一为utf-8, 书写过程过, 每行代码结束必须有分号; 原则上所有功能均根据XXX项目需求原生开发, 以避免网上down直接宕下来的代码造成的代码污染;

2. 库引入: 原则上仅引入prototype库, 若需引入第三方库, 须与团队其他人员讨论决定;

3. 变量命名: 驼峰式命名. 原生JavaScript变量要求是纯英文字母, 首字母须小写, 如counter;另, 要求变量集中声明, 避免全局变量.

4. 类命名: 首字母大写, 驼峰式命名. 如 Counter;

5. 函数命名: 首字母小写驼峰式命名. 如add(count);

6. 命名语义化, 尽可能利用英文单词或其缩写;

7. 后期优化中, JavaScript非注释类中文字符须转换成unicode编码使用, 以避免编码错误时乱码显示;

8. 代码结构明了, 加适量注释. 提高函数重用率;

第六部分:注释规范

1. html注释: 注释格式 <!--这儿是注释-->, '--'只能在注释的始末位置,不可置入注释文字区域;

2. css注释: 注释格式 /*这儿是注释*/;

3. JavaScript注释, 单行注释使用'//这儿是单行注释' ,多行注释使用 /* 这儿有多行注释 */;示例:

/*****************************************************

* 将数组arr转化成为tableDatas

* 此举是为了更方便解析数据

* 何杨,2012年2月7日14:03:43

*****************************************************/

function getTableDatasFromArr(arr){

            var tableDatas=new Array();         

            // 遍历这个数组

            for(var i=0;i<arr.length;i++){

                        var node=arr[i];

                        var arr2=new Array();

                        for(var j=0;j<node.childNodes.length;j++){

                                    var child=node.childNodes.item(j);                                            

                                    arr2.push(child.childNodes[0].nodeValue);

                        }

                        // 向表格中添加行

                        tableDatas.push(arr2);

            }          

            return tableDatas;

}

posted @ 2012-03-14 10:24 何杨 阅读(198) | 评论 (0)编辑 收藏

http://www.llxxb.com/upload/source/Teambiz2012-2-29.rar

在此感谢 雷振杰  提供为此提供空间!
posted @ 2012-02-29 11:23 何杨 阅读(278) | 评论 (1)编辑 收藏

 

 

 

 

 

 

Teambiz中前台表单验证组件FormChecker

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月27日

版本:1.00

更新日期:  

 

 

第一部分:功能说明

对前台页面的表单组件(对于所有用.value能取到值的组件都适用)提供正则表达式验证功能。

第二部分:核心组件

名称

路径

说明

CheckItem

teambiz\WebRoot\page\js\formchecker.js

这个类表示一个页面检查项,参数有表单组件id,当不合法时提示的文字,验证表单组件内容的正则表达式和表征组件是否必填字段。

在页面中增添验证项时常会遇到这个类。

FormChecker

teambiz\WebRoot\page\js\formchecker.js

这个类表示一个前台组件正则表达式验证器。内含一个数组,以容纳多个验证项(CheckItem)

addCheckItem

teambiz\WebRoot\page\js\formchecker.js

FormChecker的数组中增添一个验证项。

在页面中增添验证项时常会遇到这个类。

checkTextBox

teambiz\WebRoot\page\js\formchecker.js

对一个checkItem进行检查,如果它是必填组件,使用正则表达式验证它,并返回验证的结果;如果它不是必填组件,且没有输入内容的话,返回真,否则依然按照正则表单时来验证它。


 

isValid

teambiz\WebRoot\page\js\formchecker.js

FormChecker的数组进行循环并逐个使用checkTextBox函数进行检查,当所有的检查项都符合验证条件后返回真;如果有一个检查项不符合条件,使用alert显示提示文字并将焦点至于该组件上。

用户在提交表单前应该调用这个函数得到表单的验证结果。

 

第三部分:CheckItem和FormChecker两个类的代码

以下代码请参见teambiz\WebRoot\page\js\ formchecker.js中同名函数

/*************************

*

*   Class:CheckItem

*   2009.08.23

**************************/

//-- Contructor

function CheckItem(textboxName,msg,validChar,isRequired){

            this.textboxName=textboxName;

            this.msg=msg;

            this.validChar=validChar;

            this.isRequired=isRequired;

}

 

/*************************

*

*   Class:FormChecker

*   2009.08.23

**************************/

//-- Contructor

function FormChecker(){

            this.checkItemArray=new Array;

}

//-- Add a check Item to array

FormChecker.prototype.addCheckItem=function(textboxName,msg,validChar,isRequired){

            var checkItem=new CheckItem(textboxName,msg,validChar,isRequired);

            this.checkItemArray[this.checkItemArray.length]=checkItem;

};

//-- Check text field in the form

FormChecker.prototype.checkTextBox=function(checkItem){

            var validChar=checkItem.validChar;

            var isRequired=checkItem.isRequired;

            var inputValue=$(checkItem.textboxName).value;

           

            if(isRequired!="true" && inputValue.length<1){

                        return true;

            }

            else{

                        var regexStr="^"+validChar+"$";

                        var regex=new RegExp(regexStr);

                        return regex.test(inputValue);

            }

};

//-- judge the validation of a form

FormChecker.prototype.isValid=function(){

            for(var i=0;i<this.checkItemArray.length;i++){

                        var       toBeCheckedObj=this.checkItemArray[i];

                       

                        var checkResult=this.checkTextBox(toBeCheckedObj);

                       

                        if(checkResult==true){

                                    continue;

                        }

                        else{               

                                    alert(toBeCheckedObj.msg);

                                    $(toBeCheckedObj.textboxName).focus();

                                   

                                    return false;

                        }

            }

            return true;

};

第四部分:使用CheckItem和FormChecker进行验证的代码

以下代码请参考:teambiz\WebRoot\page\jsp\user\register\javascript.jsp

1.初始化FormChecker及添加验证项目

formChecker=new FormChecker();

formChecker.addCheckItem("userName","请输入二到五位汉字的用户名","[\\u4E00-\\u9FA5]{2,5}","true");

formChecker.addCheckItem("userPswd","请输5位以上,最长20位的字母或数字组成的密码","(\\w){5,20}","true");

formChecker.addCheckItem("userPswd2","请输5位以上,最长20位的字母或数字组成的密码","(\\w){5,20}","true");

formChecker.addCheckItem("email","请输入您的电子邮件","\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*","true");

 

2.得到表单的验证结果

function getCheckResult(){

            // 进行页面输入检查

            if(formChecker.isValid()==false){

                        return false;

            }

           

            var userPswd=$("userPswd").value;

            var userPswd2=$("userPswd2").value;

           

            if(userPswd!=userPswd2){

                        $("userPswd2").focus();

                        alert("前后两次密码必须一致.");

                        return false;

            }

           

            return true;

}

以上粗体部分就是得到FormChecker的验证结果。由于FormChecker只能对单个组件的文本内容进行正则表达式校验,无法对对多个组件进行比较,因此如果实际需要其它的验证项,可以在getCheckResult函数中进行添加。

3.注册按钮点击时间后的响应函数:

$("registerBtn").onclick=function(){

            if(getCheckResult()==true){

                        submitForm();

            }

};

 

第五部分:使用步骤

步骤

说明

参照

载入这批函数

teambiz中,这一载入一般放在style.css中。

<script src="page/js/formchecker.js" type="text/javascript"></script>

window_onload函数中初始化表单验证器并增添检查项。

 

formChecker=new FormChecker();

formChecker.addCheckItem("userName","请输入二到五位汉字的用户名","[\\u4E00-\\u9FA5]{2,5}","true");

formChecker.addCheckItem("userPswd","请输5位以上,最长20位的字母或数字组成的密码","(\\w){5,20}","true");

formChecker.addCheckItem("userPswd2","请输5位以上,最长20位的字母或数字组成的密码","(\\w){5,20}","true");

formChecker.addCheckItem("email","请输入您的电子邮件","\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*","true");

使用FormChecker的isValid函数来得到验证结果。

 

function getCheckResult(){

            // 进行页面输入检查

            if(formChecker.isValid()==false){

                        return false;

            }

           

            ……

           

            return true;

}

注册按钮点击时间后的响应函数

 

$("registerBtn").onclick=function(){

            if(getCheckResult()==true){

                        submitForm();

            }

};

 

第六部分:小结

进行表单元素验证是程序员不得不做却又较为乏味的工作之一,FormChecker类能有助于减轻他们的负担,从而使得用正则表达式验证文本内容的工作变得简单,程序员只需要在正则表达式的编写上下些功夫或者求助于网络。

FormChecker的不足之处是验证模式单一,验证逻辑比较简单,但对于验证,似乎也没有多少共性的需求了,如果有希望大家能赐教。

posted @ 2012-02-29 10:41 何杨 阅读(412) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中后台参数容器RequestParamMap

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月27日

版本:1.00

更新日期:  

 

 

第一部分:功能说明

简化页面请求参数的取值和存放,解决乱码问题,并简化数据传输通道上函数参数的编写。

第二部分:核心组件

名称

路径

说明

RequestParamMap

teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java

它是一个页面请求参数的容器,内含一个哈希表,以键值对的方式来存储请求参数的名和值。

它的构造函数接受一个哈希表,这个哈希表在AjaxAction的getRequestParamMap函数中被生成,并传入强制子类实现的process函数中,因此每个继承自AjaxAction的类中直接使用RequestParamMap对象即可,无需考虑它的由来。

有一点需要说明的是,由于非ASC码字符在URL中是不允许的,因此在使用Ajax.Request对象发起请求前使用javaScript函数eval两次对url进行转码,与之对应的,在AjaxAction的getRequestParamMap函数中使用UTF8Coder类decode方法又将其还原了回来,因此程序员无需担心乱码问题。

getParamValue

teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java中同名函数。

程序员可以参数名为单位,使用这个函数取出参数的值,当参数名不存在,即请求参数中没有后台想要的值,一个异常将被抛出。按照teamBiz的异常传递体系,这个异常会在用户界面上显示出来,这样做有助于问题的快速定位。

addParam

teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java中同名函数。

程序员可以将参数名和参数值添加到RequestParamMap,设计这个函数的考虑到很多参数如用户信息在请求中往往是不见的,需要在Action中从session或是其它地方取出再往后方传递。

 

第三部分:有关RequestParamMap使用的代码

1. RequestParamMap类的代码

/**

 * 页面请求参数容器

 * @author 何杨(heyanghy@cn.ibm.com)

 * @version 1.00

 * @time Feb 6, 2012 10:47:39 AM

 *

 */

public class RequestParamMap{

            // 存储页面请求参数的哈希表

            private Map<String,String> map;           

            /**

             * 构造函数

             * @param map

             */

            public RequestParamMap(Map<String,String> map){

                        this.map=map;

            }          

            /**

             * 按请求参数的名称取得请求参数的值

             * @param paramName

             * @return

             */

            public String getParamValue(String paramName) throws IllegalArgumentException{

                        if(map.containsKey(paramName)){

                                    return map.get(paramName);

                        }else{

                                   throw new IllegalArgumentException("找不到名为"+paramName+"的页面请求参数.");

                        }

            }

           

            /**

             * 添加一个参数

             * @param paramName

             * @param paramValue

             */

            public void addParam(String paramName,String paramValue){

                        map.put(paramName, paramValue);

            }

}

以上代码路径:teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java

 

2. AjaxAction的getRequestParamMap函数

private RequestParamMap getRequestParamMap(HttpServletRequest request){

            Map<String,String> map=new HashMap<String,String>();

           

            for (Enumeration<?> e = request.getParameterNames(); e.hasMoreElements();) {

                        String name = (String) e.nextElement();

                        String[] values = request.getParameterValues(name);

                       

                        if (values != null && values.length >= 1) {

                                    String value=UTF8Coder.decode(values[0]);

                                    map.put(name, value);

                        }

            }

           

            return new RequestParamMap(map);

}

以上代码路径:teambiz\src\com\ibm\heyang\action\base\AjaxAction.java

 

3.继承自AjaxAction的Action类中对RequestParamMap的使用

public final class FetchExecuterAction extends AjaxAction {

            private static Logger logger = Logger.getLogger(FetchExecuterAction.class);

           

            public void process(ActionMapping mapping, ActionForm form,

                                    HttpServletRequest request, HttpServletResponse response,RequestParamMap paramMap)

                                    throws Exception {

                        logger.trace("取得执行者名单Action");

                                   

                        // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                        PrintWriter out = response.getWriter();

                                   

                        RelationService service=SpringUtil.getRelationService();

                        Long userId=(Long)request.getSession().getAttribute("userId");

                        if(userId!=null){

                                    paramMap.addParam("userId", String.valueOf(userId));

                                    paramMap.addParam("userName", "自己");

                                    paramMap.addParam("status", Relation.Status_Agree);

                                   

                                    String xml=service.getExecuterXml(paramMap);

                                   

                                    out.println("<response>");

                                    out.println("<status>ok</status>");

                                    out.println(xml);

                                    out.println("</response>");

                                   

                        }else{

                                    out.println("<response>");

                                    out.println("<status>ng</status>");

                                    out.println("<text>请登录后再来执行此操作</text>");

                                    out.println("</response>");

                        }

            }

}

以上代码来自:teambiz\src\com\ibm\heyang\action\relation\FetchExecuterAction.java

 

4.后台DAO类对RequestParamMap的使用

public String getExecuterXml(RequestParamMap paramMap) throws Exception{

            String userId=paramMap.getParamValue("userId");

            String userName=paramMap.getParamValue("userName");

            String status=paramMap.getParamValue("status");

           

            StringBuilder sb=new StringBuilder();

            sb.append("    select");

            sb.append("        tb01.toUserId as id,");

            sb.append("        tb02.name as name");

            sb.append("    from");

            sb.append("        teambiz_relation");

            sb.append("        tb01,");

            sb.append("        teambiz_user");

            sb.append("        tb02");

            sb.append("    where");

            sb.append("        tb01.toUserId=tb02.id");

            sb.append("        and");

            sb.append("        tb01.fromUserId="+userId+"");

            sb.append("        and");

            sb.append("        tb01.status='"+status+"'");

            sb.append("    order by");

            sb.append("        tb01.id");

            String sql=sb.toString();

           

            List<?> ls=fetchRecords(sql,new NameValueRowMapper());

           

            StringBuilder sb2=new StringBuilder();

            sb2.append(new NameValueList(ls).asXML());

            sb2.append("<node>");

            sb2.append("<id>"+userId+"</id>");

            sb2.append("<name>"+userName+"</name>");

            sb2.append("</node>");

           

            return sb2.toString();

}

以上代码来自:teambiz\src\com\ibm\heyang\dao\RelationDao.java

 

第四部分:小结

函数参数如果杂乱很不利于一些基类中共通函数的编写,比如分页函数,在RequestParamMap类的帮助下,这个问题能够得到解决。它附带的自动生成对象,解码,无参数时抛出异常要给程序中参数的取值,转码和异常处理带来了方便.

RequestParamMap类体积很小,功能也不复杂,但对后台的整个代码结构的改善带来了莫大好处,类似这种组件是值得发掘的。

 

posted @ 2012-02-29 10:41 何杨 阅读(345) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中与表格操作相关的函数

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月26日

版本:1.00

更新日期:  

 

 

第一部分:功能说明

提供向表格行的单元格中添加文本,链接,图片等是操作表格内容的常见操作函数。它们在诸如addDatasToTable之类的函数常常被使用。

第二部分:核心组件

名称

路径

说明

createTextTd

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个仅含文本的单元格。

createLink

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个链接,它是为createLinkTd函数准备的。

createLinkTd

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个仅含链接的单元格,当程序员需要在单元格中需要创建链接或是需要通过js伪协议调用js函数可以使用它。

createImageTd

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个仅含图片的单元格,当需要用图标表示数据的状态时可以使用它。

createTitledLink

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个带提示性说明(tooltiptext)的链接,它是为createTitledLinkTd函数准备的

createTitledLinkTd

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个包含提示性说明链接的单元格,它比createLinkTd更具用户友好型。

createIamgeLink

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个图片链接,它是为createImageLinkTd函数使用的。

createImageLinkTd

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个包含图片链接的单元格,如果图片比文字更加形象时可以考虑用它取代createLinkTd和createTitledLinkTd

createImageTextTd

teambiz\WebRoot\page\js\dom.js中同名函数。

创建一个兼具图片和文字说明的单元格。

createStartSearchRowBy

teambiz\WebRoot\page\js\changepage.js中同名函数。

创建一个colspan为40的表格行,内含图片和文字,一般在开始查询时使用。

createNgRowBy

teambiz\WebRoot\page\js\changepage.js中同名函数。

创建一个colspan为40的表格行,内含文字,一般从后台没有得到相要的数据时使用。

 

第三部分:实际代码

以下代码请参见teambiz\WebRoot\page\js\dom.js中同名函数

/******************************************************

* create a text cell

* 2011-3-1 9:27:07 heyang

******************************************************/

function createTextTd(text){

            var cell=document.createElement("td");

            cell.appendChild(document.createTextNode(text));  

            return cell;

}

 

/******************************************************

* create a image cell

* 2011-3-1 9:27:07 heyang

******************************************************/

function createImageTd(imageUrl){

            var cell=document.createElement("td");           

            var image=document.createElement("img");

            image.setAttribute("src",imageUrl);

            cell.appendChild(image);  

            return cell;

}

/******************************************************

* create a link

* 2011-3-1 9:27:07 heyang

******************************************************/

function createLink(text,url){

            var link=document.createElement("a");

            link.appendChild(document.createTextNode(text));

            link.setAttribute("href",url);          

            return link;

}

/******************************************************

* create a link cell

* 2011-3-1 9:27:07 heyang

******************************************************/

function createLinkTd(text,url){

            var link=createLink(text,url);

 

            var cell=document.createElement("td");

            cell.appendChild(link);       

            return cell;

}

/******************************************************

* create a titled link

* 2011-7-9 10:46:50 heyang

******************************************************/

function createTitledLink(text,title,url){

            var link=document.createElement("a");

            link.appendChild(document.createTextNode(text));

            link.setAttribute("href",url);

            link.setAttribute("title",title);       

            return link;

}

/******************************************************

* create a Titled link cell

* 2011-7-9 10:46:50 heyang

******************************************************/

function createTitledLinkTd(text,title,url){

            var link=createTitledLink(text,title,url);

            var cell=document.createElement("td");

            cell.appendChild(link);       

            return cell;

}

/******************************************************

* create a Iamge link

* 2011-3-1 9:27:07 heyang

******************************************************/

function createIamgeLink(imageUrl,url){

            var link=document.createElement("a"); 

            var image=document.createElement("img");

            image.setAttribute("src",imageUrl);       

            link.appendChild(image);

            link.setAttribute("href",url);          

            return link;

}

/******************************************************

* create a Iamge linked table cell

* 2011-3-1 9:27:07 heyang

******************************************************/

function createImageLinkTd(imageUrl,url){

            var cell=document.createElement("td");           

            cell.appendChild(createIamgeLink(imageUrl,url));      

            return cell;

}

/******************************************************

* create a Iamge and text cell

* 2012-1-9 10:31:31 heyang

******************************************************/

function createImageTextTd(imageUrl,text){

            var cell=document.createElement("td");           

            var image=document.createElement("img");

            image.setAttribute("src",imageUrl);

            cell.appendChild(image);  

            cell.appendChild(document.createTextNode(text));  

            return cell;

}

 

第四部分:使用步骤

步骤

说明

参照

载入这批函数

teambiz中,这一载入一般放在style.css中。

<script src="page/js/dom.js" type="text/javascript"></script>

根据实际情况使用这批函数

 

teambiz\WebRoot\page\jsp\task\sent\javascript.jsp中addDatasToTable函数,这个函数基本使用到了上面提到的所有函数。

 

第五部分:小结

使用DOM生成文字,链接,图片等元素是繁重的劳动,将它们归纳成函数有利于提高程序员的生产率,并把精力集中于更值得投放精力的方向上。

 

posted @ 2012-02-29 10:38 何杨 阅读(177) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中MyTable类

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月26日

版本:1.00

更新日期:  

 

 

第一部分:功能说明

帮助程序员更轻松的操作前台的表格。

第二部分:核心组件

名称

路径

说明

MyTable

teambiz\WebRoot\page\js\myTable.js

一个JavaScript类,用于操作表格。实际上,它代表的是table的tbody部分,而不包括caption,thead,tfoot。

MyTable

同上文件的同名函数

这是MyTable类的构造函数,传入tbody的id,得到表格的tbody部分。

clear

同上文件的同名函数

一次性删除tbody的所有行。

在查询开始前基本都有这一步以清除以往的数据。

removeFirstRow

同上文件的同名函数

删除tbody的第一行。

这个函数在实际中使用很少。

getRowCount

同上文件的同名函数

得到tbody中所有行的个数。

当需要计算当前显示多少行时可以用到。

appendRow

同上文件的同名函数

tbody底部添加一行,并且给奇偶行赋予不同的样式。

逐行往表格中添加数据时常用到它。

removeRow

同上文件的同名函数

删除tr的id为传入参数的行。

当删除对象成功时需要调用这一函数。

refreshRowColor

同上文件的同名函数

给奇偶行赋予不同的样式。

一般在appendRow和removeRow中被调用,外界也可主动调用。

 

第三部分:实际运用代码说明

以下代码请参见teambiz\WebRoot\page\jsp\relation\sent\javascript.jsp中search函数。

1. 得到表格并清除原有行

var userTable=new MyTable("userTable");

userTable.clear();

以上代码就是新建一个MyTable对象并清除原有行的过程,MyTable构造函数接受一个tbody的id,请与页面中tbody的实际ID相对应。

 

2. 向表格添加行

userTable.appendRow(createStartSearchRowBy("page/img/waiting.gif","开始查询已经发送的联系..."));

userTable.appendRow(createNgRowBy("没有查询到已经发送的联系."));

以上代码就是向tody中添加一个tr的过程,至于createStartSearchRowBy,createNgRowBy两个函数我们将在后文详述。

 

以上代码路径:teambiz\WebRoot\page\js\changePage.js

 

3. 向表格中添加一个完整的行。

var arr=tableDatas[i];                     

// 创建行

var row=document.createElement("tr");           

                       

// 加入复选框

var checkBox=document.createElement("input");

checkBox.setAttribute("type","checkbox");

checkBox.setAttribute("id",arr[0]);

 

var td=document.createElement("td");

td.appendChild(checkBox);                      

row.appendChild(td);        

 

row.appendChild(createTextTd(arr[1]));

row.appendChild(createTextTd(arr[2]));

row.appendChild(createTextTd(arr[3]));

row.appendChild(createTextTd(arr[4]));

row.appendChild(createTextTd(arr[5]));

row.appendChild(createTextTd(arr[6]));

 

userTable.appendRow(row);

以上代码完整显示使用DOM创建tr以及一个个td,并往td中添加对象的过程。根据实际情况的不同,我们可能会往行row中添加文本,链接,图片,图片链接等对象,TeamBiz为此类事务设计了一批函数以简化代码编写,这将在后面的文章详述。

 

以上代码位置:teambiz\WebRoot\page\jsp\relation\sent\javascript.jsp中addDatasToTable函数。

 

4.页面表格

<table class="stocktable" width="100%" cellspacing="0">

            <caption>

                        <select id="pageSizeCbo" onchange='fetchDatas(0)'>

                                    <option value="20">20</option>

                                    <option value="50">50</option>

                                    <option value="100">100</option>

                                    <option value="1000">1000</option>

                        </select>

            总记录数<span id="recordCount">0</span> 总页数<span id="pageCount">0</span> 当前第<span id="currentPage">0</span>页 <span id="pageData">0</span></caption>

            <thead>

                        <tr>

                                    <th width="28"><input type="checkbox" id="selectAllChk" onclick="selectAllCheckBox()"/></th>

                                    <th width="17%">发送用户</th>

                                    <th width="16%">接收用户</th>

                                    <th width="16%">接收用户邮件</th>

                                    <th width="16%">接收所属组名</th>

                                    <th width="16%">接收所属公司</th>

                                    <th width="16%">联系状态</th>

                        </tr>

            </thead>

            <tbody id="userTable">

                        <tr class="odd">

                                    <td colspan="40"><img src='page/jsp/relation/create/img/waiting.gif'/> 查询中,请稍候...</td>

                        </tr>

            </tbody>

             <tfoot>

                        <tr>

                                    <td colspan="40" align="right" width="100%">

                                                <div class="submitDiv">

                                                            <label for="gotoPageBtn">&nbsp;</label>

                                                            <input type='button' name='gotoPageBtn' onchange='gotoPage()' value='转到' />第<input type='text' id='pageIndexTxt' onchange='gotoPage()' size='1' />页&nbsp;页码:<span id="footPageData"></span>

                                                </div>

                                    </td>

                        </tr>

            </tfoot>

</table>

以上代码中,红色粗体部分的“userTable”就是需要往MyTable构造函数中传入的参数,而黑色粗体部分就是MyTable类诸函数实际操作的区域。

以上代码位置: teambiz\WebRoot\page\jsp\relation\sent\content.jsp

 

第四部分:使用步骤

步骤

说明

参照

载入MyTable类

teambiz中,这一载入一般放在style.css中。

<script src="page/js/myTable.js" type="text/javascript"></script>

创建MyTable对象

由于作用域的不同,这一过程可能会使用多次,但应该避免使用全局的myTable对象。

var table=new MyTable(“tableID”);

操作MyTable对象

使用teambiz\WebRoot\page\js\myTable.js中定义的多个函数操作表格对象,如果这些函数不能满足您的需求,可以参照原有行数的模式来创建新的函数。

 

 

 

 

第五部分:小结

表格是前台程序操作的主要对象之一,将表格的常用操作加以归纳综合,就形成了MyTable类,它能减少重复代码,减少出错的可能行,减轻劳动和增加代码的一致性,如果我们在编写程序时多加归纳总结,还会诞生出更多相似的类出来。

 

posted @ 2012-02-29 10:37 何杨 阅读(288) | 评论 (0)编辑 收藏

     摘要:             Teambiz中分页之前台处理               作者:何杨 撰写日期:2012年2月25日 版本:1.02 更新日期:  2012年2月27日     第一部分:功...  阅读全文
posted @ 2012-02-29 10:36 何杨 阅读(230) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中分页之后台处理

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月25日

版本:1.00

更新日期:  

 

 

第一部分:功能说明

分页是Web程序的常见功能之一,此文主要讲述后台对分页功能的处理。

第二部分:核心组件

名称

路径

说明

BaseService

teambiz\src\com\ibm\heyang\service\base\BaseService.java

此抽象类是诸Service类的基类,它提供了专用于分页的函数pagedSearch,用户只需传入相应的SQL语句,RequestParamMap实例和dao实例即可完成分页功能,实际上后两者一个是在AjaxAction中自动生成的,一个是Sping中配置的,因此,用户只需书写正确的查询SQL语句即可。

由于DB2数据库分页操作的特殊性,它需要分页时加入排序项,因此若数据源是DB2,那么请换用功能相似的pagedSearch4DB2函数。

JdbcDao

teambiz\src\com\ibm\heyang\dao\base\JdbcDao.java

此抽象类是诸Dao类的基类,它提供了getSqlCount,pageSearchList两个函数以实现分页功能,前者用于得到结果集的总数,后者用于取得某一页的结果集。

若数据库是DB2,请换用功能相似的pageSearchList4DB2。

 

第三部分:关键代码说明

1. BaseService中的pagedSearch函数:

public String pagedSearch(String sql,RequestParamMap paramMap,JdbcDao dao) throws Exception{

            int currentPage=Integer.parseInt(paramMap.getParamValue("start"));

            int pageSize=Integer.parseInt(paramMap.getParamValue("pageSize"));

           

            StringBuilder sb=new StringBuilder();

            sb.append("<currentPage>"+currentPage+"</currentPage>");

           

            // 取得总记录数

            long recordCount=dao.getSqlCount(sql);

            sb.append("<recordCount>"+recordCount+"</recordCount>");

           

            // 得到总页数

            long pageCount=0;

            if((recordCount % pageSize)==0){

                        pageCount=recordCount/pageSize;

            }

            else{

                        pageCount=recordCount/pageSize+1;

            }          

            sb.append("<pageCount>"+pageCount+"</pageCount>");

           

            NameValueList nvList=dao.pageSearchList(sql,currentPage*pageSize, (currentPage+1)*pageSize);

            sb.append(nvList.asXML());

           

            return sb.toString();

}

这个函数对数据库进行了两次查询,一次是取出SQL语句能得到的记录总数,一次是取出当前页的数据,另外从paramMap中取出了当前页和一页可以容纳的记录数等数据,有了这些数据,进行一点计算,就能获得前台页面需要的当前页,总记录数,页数和当前页记录等数据,最后此函数将所有数据都变换为XML格式的字符串。

 

2. JdbcDao的getSqlCount函数

public int getSqlCount(String sql) throws Exception{

            RecordCounter rc=new RecordCounter(sql,this.getJdbcTemplate());

            return rc.getCount();

}

这个类利用RecordCounter类对SQL语句进行了一定程序的处理,然后取出这个SQL语句能查询出的记录总数量,RecordCounter类代码如下:

public class RecordCounter{

            private String sql;

           

            private JdbcTemplate jdbcTemplate;

           

            /**

             * 构造函数

             * @param sql

             * @param jdbcTemplate

             */

            public RecordCounter(String sql,JdbcTemplate jdbcTemplate){

                        this.sql=sql;

                        this.jdbcTemplate=jdbcTemplate;

            }

           

            /**

             * 得到SQL语句查询到的记录数,对外的关键语句

             * @author: 何杨(heyanghy@cn.ibm.com)

             * @date : Apr 23, 2011

             * @time : 11:09:35 AM

             * @return

             */

            public int getCount() throws Exception{

                        StringBuilder sb=new StringBuilder();

                        sb.append("    select ");

                        sb.append("        count(*) as recordCount ");

                        sb.append("    from ("+sql+") t ");

                        String sql=sb.toString();

 

                        List<?> ls = jdbcTemplate.query(sql, (new IntegerRowMapper()));

                        Integer i=(Integer)ls.get(0);

                       

                        return i.intValue();

            }

}

以上代码路径:teambiz\src\com\ibm\heyang\dao\rowmapper\RecordCounter.java

 

3. JdbcDao类的fetchPageRecords和fetchPageRecords4DB2函数。

下面两个函数用于取出分页的数据,按照数据库的不同使用不同的部分或是换用不同的函数。

/**

 * 查询分页数据,如果是Oracle则放开上面一段,如果是MySql则放开下面一段

 * @author: 何杨(heyanghy@cn.ibm.com)

 * @date : Mar 29, 2011

 * @time : 3:34:44 PM

 * @param start

 * @param end

 * @param sql

 * @param mapper

 * @return

 */

protected final List<?> fetchPageRecords(int start,int end,String sql,RowMapper mapper){

            StringBuilder sb=new StringBuilder();

           

            // Oracle

            /*sb.append(" Select                              ");

            sb.append("        *                            ");

            sb.append(" from                                ");

            sb.append("        (                            ");

            sb.append("         Select                      ");

            sb.append("                t01.*,               ");

            sb.append("                rownum as newRowNum ");

            sb.append("         from                        ");

            sb.append("                (                    ");

            sb.append(sql);

            sb.append("                ) t01                ");

            sb.append("         where                       ");

            sb.append("                rownum<='"+end+"'    ");

            sb.append("        )                            ");

            sb.append(" where                               ");

            sb.append("        newRowNum>'"+start+"'        ");*/

           

            // MySql

            sb.append(sql+" limit "+start+","+(end-start));

            String sql2=sb.toString();

           

            return this.getJdbcTemplate().query(sql2,mapper);

}

 

/**

 * 专门为DB2制作的查询分页数据,特殊的地方是比上面的函数多了一个Order by

 * @param start

 * @param end

 * @param sql

 * @param orderBy

 * @param mapper

 * @return

 */

protected final List<?> fetchPageRecords4DB2(int start,int end,String sql,String orderBy,RowMapper mapper){

            StringBuilder sb=new StringBuilder();

           

            // Db2

            sb.append(" Select                              ");

            sb.append("        *                            ");

            sb.append(" from                                ");

            sb.append("        (                            ");

            sb.append("         Select                      ");

            sb.append("                table01.*,               ");

            sb.append("                ROW_NUMBER() OVER(ORDER BY "+orderBy+" ) AS ROWNUM ");

            sb.append("         from                        ");

            sb.append("                (                    ");

            sb.append(sql);

            sb.append("                ) table01 )               ");

            sb.append("         where                       ");

            sb.append("                ROWNUM >"+start+" and ");

            sb.append("                ROWNUM <="+end+" ");

 

            String sql2=sb.toString();

            return this.getJdbcTemplate().query(sql2,mapper);

}

 

第四部分:使用步骤

步骤

说明

参照

Dao类中编写需要进行分页查询的SQL语句,并用函数进行包装。

建议对SQL进行良好的整形。

teambiz\src\com\ibm\heyang\dao\RelationDao.java中的getSentRelationSql函数。

Service类中撰写调用dao中的分页查询函数

teambiz\src\com\ibm\heyang\service\RelationService.java中的pagedSearchMySentRelation函数。

Action中调用Service中的分页查询函数

如果需要在paramMap中增加新的参数,可以使用com.ibm.heyang.action.base.RequestParamMap类的addParam函数

teambiz\src\com\ibm\heyang\action\relation\SearchSentRealationAction.java类

 

第五部分:小结

后台的分页处理,实际上需要程序员动脑筋的地方就是SQL语句的编写,其它都是固定模式的操作,TeamBiz通过BaseService和JDBCdao两个类中相应函数的帮助,固化了这些固定的部分,程序员只要正确调用即可,这在一定程度上减轻了程序员的工作量,降低了人为出错的可能。

 

通过不同分页SQL语句的采用,TeamBiz能适应三种数据库,Oracle,MySQL和Db2,如果要增添更多数据库的支持,对分页SQL进行改写即可。

 

posted @ 2012-02-29 10:35 何杨 阅读(227) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中三种特殊RowMapper的使用

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月25日

版本:1.00

更新日期:

 

 

 

第一部分:功能说明

针对特殊目的的查询,TeamBiz提供了一系列的RowMapper类以减轻程序员的劳动。

第二部分:核心组件

名称

路径

说明

IntegerRowMapper

teambiz\src\com\ibm\heyang\dao\rowmapper\IntegerRowMapper.java

只需进行数量查询时,如select count(*) from tb,明确只会返回一行一列,这时建议使用这个类。

StringRowMapper

teambiz\src\com\ibm\heyang\dao\rowmapper\StringRowMapper.java

当只查询一列时,如select a from table,建议使用这个类。

UserRowMapper

eambiz\src\com\ibm\heyang\dao\rowmapper\UserRowMapper.java

当需要从JDBCTemplate查询到的链表中取出对象时,建议仿照这个类制作自己的RowMapper类

 

第三部分:各种RowMapper类的具体使用

1. IntegerRowMapper。

StringBuilder sb=new StringBuilder();

sb.append("    select ");

sb.append("        count(*) as recordcount");

sb.append("    from teambiz_menu");

String sql=sb.toString();

List<?> ls=this.getJdbcTemplate().query(sql, new IntegerRowMapper());

Integer count=(Integer)(ls.get(0));

以上代码路径:teambiz\src\com\ibm\heyang\dao\MenuDao.java中isNoMenu函数。

 

2. StringRowMapper

StringBuilder sb=new StringBuilder();

sb.append("    select");

sb.append("        t01.group_name");

sb.append("    from");

sb.append("        sys_group");

sb.append("        t01,");

sb.append("        sys_user");

sb.append("        t02");

sb.append("    where");

sb.append("        t01.groupid=t02.groupid");

sb.append("        and");

sb.append("        t02.userid="+userid+"");

String sql=sb.toString();

 

// 查询

List<?> ls = this.getJdbcTemplate().query(sql,new StringRowMapper());

最后得到的ls就是一个包含字符串元素的链表,要取值对其进行遍历即可。

3. UserRowMapper的使用示例

StringBuilder sb=new StringBuilder();

sb.append("    select ");

sb.append("          ID, ");

sb.append("          name, ");

sb.append("          email, ");

sb.append("          pswd, ");

sb.append("          groupName, ");

sb.append("          companyName,");

sb.append("          level");

sb.append("    from teambiz_user");

sb.append("    where name='"+name+"' and ");

sb.append("          pswd='"+pswd+"' ");

String sql=sb.toString();

 

List<?> ls = this.getJdbcTemplate().query(sql, (new UserRowMapper()));

 

if(ls.size()==1){

            return (User)ls.get(0);

}else{

            throw new Exception("用户名或密码错误!");

}

以上代码路径:teambiz\src\com\ibm\heyang\dao\UserDao.java中的getUserByNamePswd函数。

 

第四部分:小结

对数据库进行各种查询是程序员的常见任务之一,如果能适当运用以上类,能减少代码的重复程度及减轻他们的劳动强度。

posted @ 2012-02-29 10:34 何杨 阅读(316) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中从Sql到XML的转化过程

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月23日

版本:1.00

更新日期:2012年2月24日

 

 

第一部分:功能说明

将后台编写的SQL语句,向数据库请求后获得的数据,整理成XML格式的文本。

第二部分:核心组件

名称

路径

说明

JdbcDao

com.ibm.heyang.dao.base.JdbcDao

此类中的fetchRecords函数用来取得数据库中的数据,

NameValueRowMapper

com.ibm.heyang.dao.rowmapper.NameValueRowMapper

此类用于将进行数据库查询得到的行集转化为一个NameValue链表对象。

NameValue

com.ibm.heyang.domain.NameValue

此类用于存储行集中某字段的名称和值,在将对象链表转化为XML的过程中使用了它的函数asXML()。

NameValueList

com.ibm.heyang.domain.NameValueList

内含一个链表,用于容纳NameValue对象链表,在将对象链表转化为XML的过程中使用了它的函数asXML()。

 

第三部分:从SQL语句向XML的转化过程
NameValueRowMapper负责查询结果集一个行的转换,对于其中的每个字段,会形成一个字段名和字段值的NamaValue对象,然后放到一个类型为List<NameValue>的链表中。最终,这个链表对应着这个行集,链表里面的每个元素对应着一个字段(包含其名及值)。

NameValueList用于容纳每个行形成的链表,它本身和查询结果集是对应的。

得到最终的NameValueList之后,调用其asXML方法,将遍历其中的每个元素,得到行集链表,再遍历其中的NameValue对象,再调用每个对象的asXML函数,得到XML文本。

以下展示了两个关键函数:

NameValueList对象的asXML函数如下:

public String asXML() {

            StringBuilder sb=new StringBuilder();    

            for(Object obj:list){

                        List<NameValue> ls=(List<NameValue>)obj;              

                        sb.append("<node>");

                        for(NameValue nv:ls){

                                    sb.append(nv.asXML());

                        }

                        sb.append("</node>");

            }

            return sb.toString();

}

以上粗体部分是每个行的标志,在前台页面对XML进行解析时还要使用到它,这已经形成了前后台之间的一个约定。

NameValue对象的asXML函数如下:

public String asXML() {

            StringBuilder sb=new StringBuilder();

            sb.append("<"+name+">");

            sb.append(StringUtils.isBlank(value)?"-":value);

            sb.append("</"+name+">");       

            return sb.toString();

}

第四部分:效果展示

SQL语句示例:

select text, url, level from teambiz_menu where level<=2 order by level

使用SQL语句从数据库查询出来的结果集:


最终得到的XML文本:

<node>

            <text>登出</text>

            <url>Logout.do</url>

            <level>0</level>

</node>

<node>

            <text>修改自己信息</text>

            <url>Goto.do?page=/page/jsp/user/modify/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>建立联系</text>

            <url>Goto.do?page=/page/jsp/relation/create/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>我发出去的联系</text>

            <url>Goto.do?page=/page/jsp/relation/sent/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>发给我的联系</text>

            <url>Goto.do?page=/page/jsp/relation/received/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>创建任务</text>

            <url>Goto.do?page=/page/jsp/task/create/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>我发出去的任务</text>

            <url>Goto.do?page=/page/jsp/task/sent/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>发给我的任务</text>

            <url>Goto.do?page=/page/jsp/task/received/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>今日待办任务/已办任务</text>

            <url>Goto.do?page=/page/jsp/task/tododone/index.jsp</url>

            <level>1</level>

</node>

<node>

            <text>用户管理</text>

            <url>#</url>

            <level>2</level>

</node>

 

第五部分:使用步骤

步骤

说明

参照

编写SQL语句

编写一个正确的查询语句,建议使用SqlToolBox进行整形工作。

com.ibm.heyang.dao.MenuDao中的函数getMenuByUserLevel中的SQL语句。

使用fetchRecords函数得到结果集。

这个函数处于com.ibm.heyang.dao.base.JdbcDao类中,无需改动,只需要传入正确的sql语句和RowMapper即可。

com.ibm.heyang.dao.MenuDao中的函数getMenuByUserLevel中的List<?> ls=super.fetchRecords(sql,new NameValueRowMapper());一句。

将结果集用NameValueList包装起来

将结果集传入NameValueList类的构造函数即可。

com.ibm.heyang.dao.MenuDao中的函数getMenuByUserLevel中的return new NameValueList(ls);一句。

将结果集转化为XML

使用NameValueList类的asXML函数。

com.ibm.heyang.service.MenuService的getMenuByUserLevel函数。

 

第六部分:小结

编写SQL语句并将其转化为前台可以辨识的格式是程序员的主要工作负担,采用以上方式的好处有:

1.整个过程中,一个函数fetchRecords和三个对象NameValueRowMapper,NameValue,NameValueList都是系统提供的,程序员无需编码,而只需把SQL语句写好,放到DAO类的一个函数中就可以了。

2.任何查询类的SQL语句,无论字段类型如何,都可以用如上方式处理。

3.如果有特殊的查询方式,com.ibm.heyang.dao.rowmapper下还提供了很多类供使用,如针对select count(*) from tb的IntegerRowMapper类,针对select * from tb where id=XX 的MapRowMapper类,及将将一行记录转化成一个包含键值对的链表的StringRowMapper等,用户也可参照UserRowMapper来书写自己的RowMapper类。这些类的使用将给编码带来较大遍历,关于它们将另行文详述。

posted @ 2012-02-29 10:32 何杨 阅读(167) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz中前台页面对XHR对象从后台取回的XML的处理

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月24日

版本:1.00

更新日期:2012年2月25日

 

 

第一部分:功能说明

XHR从后台得到XML文本后,使用DOM对其进行解析。

第二部分:核心组件

名称

路径

说明

Ajax.Request

teambiz\WebRoot\page\js\prototype-1.6.0.3.js

Prototype提供的Ajax请求对象,它将被用来想后台发出异步请求并获取反馈。

ajaxObj

它就是XMLHttpRequest对象(简称XHR)。

ajaxObj.responseText

XHR对象获得的反馈文本,在需要查看反馈的XML时会用到它。

ajaxObj.responseXML

XHR对象获得的反馈XML,也是前端需要解析的数据来源。

status

反馈XML第一个status节点的值,当它为ok是意味着顺利得到了后端传来的信息;当它为ng意味着前后端通道是通畅的,但由于某种原因不能获得想要的数据,这个原因可能是用户缺乏权限,后端组件未准备好,后他SQL调用出现异常或是运行异常。这个变量需要在前后端有固定约定才能发挥功用。

arr

包含反馈XML中所有node节点的数组。它也依赖于前后端有固定的约定。这是一个临时变量,真正发挥功用的是tableDatas。

tableDatas

它本身是一个数组,而内部元素也是一个数组,正如其名称描述的那样,它是一个表格形式的数据,它的“行”相当于SQL查询结果集的行,它的“列”相对于结果集的字段值集合,它的“单元格”就是数据。

之所以采用这个对象是因为在使用上相对于arr更加方便,进行一次遍历再通过数组下标就能访问到每个数据。

 

第三部分:三种前台对取回XML的处理

1.如果前台仅需status一个量。

有时,前台仅需status就能进行判定后台是否实现了自己的目的,如进行登录,变更等操作,对status直接进行判断即可,对后台进行CUD操作常会这样处理,示例代码如下:

new Ajax.Request(url,{    

               method:'get',    

               onSuccess: function(ajaxObj){   

                                    // alert(ajaxObj.responseText);

                                    hideLoadingWnd();

                                      

                                    var status=ajaxObj.responseXML.getElementsByTagName("status")[0].firstChild.data;

                                   

                                    if(status=="ok"){

                                                window.location.href="Goto.do?page=/page/jsp/task/tododone/index.jsp";

                                    }

                                    else{

                                                // 返回错误信息

                                                hideLoadingWnd();

                                               

                                                var text=ajaxObj.responseXML.getElementsByTagName("text")[0].firstChild.data;

                                                alert(text);

                                    }

               },    

               onFailure: function(){

                                    hideLoadingWnd();

                                    alert("服务器没有响应.");                                         

               }  

            }

);

以上代码所在路径:teambiz\WebRoot\page\jsp\user\login\javascript.jsp中submitForm函数。

 

2.如果前台需要按照节点名称取出传回XML的值。

有时,前台需要明确取出某个名称的节点值(意图获得后台处理的状态),这时可以如同取出status的值一样,从ajaxObj中取出想要的值,示例代码如下:

var currentPage=ajaxObj.responseXML.getElementsByTagName("currentPage")[0].firstChild.data;

var recordCount=ajaxObj.responseXML.getElementsByTagName("recordCount")[0].firstChild.data;

var pageCount=ajaxObj.responseXML.getElementsByTagName("pageCount")[0].firstChild.data;

// 设置分页数据

setPage(recordCount,currentPage,pageCount);         

以上代码路径:teambiz\WebRoot\page\jsp\task\sent\javascript.jsp中search函数。

3.如果前台需要表格形式的数据

对后台的查询操作常进行这种处理,这时需要用到系统转化出来的tableDatas对象,示例代码如下:

/*****************************************************

* 取得后方菜单

* 何杨,2012年2月7日11:40:34

*****************************************************/

function fetchMenuFromBg(){

            $("menuBar").innerHTML="";

           

            // 组合URL

            var url=encodeURI('FetchMenu.do?');

            url=encodeURI(url);           

            // 发出Ajax请求

            new Ajax.Request(url,{    

           method:'get',    

           onSuccess: function(ajaxObj){  

                // alert(ajaxObj.responseText);

                var status=ajaxObj.responseXML.getElementsByTagName("status")[0].firstChild.data;               

                                                if(status=="ok"){

                                                            // 找到所有节点放入数组

                                                            var arr=ajaxObj.responseXML.getElementsByTagName("node");

                                                            if(arr.length==0){

                                                                        alert("没有得到返回数据.");

                                                            }                                                          

                                                            var tableDatas=new Array();                                 

                                                            // 遍历这个数组

                                                            for(var i=0;i<arr.length;i++){

                                                                var node=arr[i];

                                                                        var arr2=new Array();

                                                                        for(var j=0;j<node.childNodes.length;j++){

                                                                            var child=node.childNodes.item(j);                                                                 arr2.push(child.childNodes[0].nodeValue);

                                                                        }

                                                                        // 向表格中添加行

                                                                        tableDatas.push(arr2);

                                                            }                                                          

                                                            // 显示菜单

                                                            showMenu(tableDatas);

                                                }

                                                else{

                                                            var text=ajaxObj.responseXML.getElementsByTagName("text")[0].firstChild.data;

                                                            alert(text);

                                                }

           },    

           onFailure: function(){

                        hideLoadingWnd();

                                                alert("服务器没有响应.");                                         

           }  

        }

           );

};

 

/*****************************************************

* 显示菜单

* 何杨,2012年2月7日14:03:43

*****************************************************/

function showMenu(tableDatas){

            var ul=document.createElement("ul");  

            for(var i=0;i<tableDatas.length;i++){

                        var arr=tableDatas[i];

                        var text=arr[0];

                        var url=arr[1];                      

                        var link=document.createElement("a");

                        link.appendChild(document.createTextNode(text));

                        link.setAttribute("href", url);

                       

                        var li=document.createElement("li");

                        li.appendChild(link);

                        ul.appendChild(li);

            }          

            $("menuBar").appendChild(ul);    

}

以上代码路径:teambiz\WebRoot\page\js\common.js,其中tableDatas的产生用getTableDatasFromArr进行了一定程度的简化。

 

第四部分:使用步骤

步骤

说明

参照

编写向后端发起请求的函数

请参照上面的fetchMenuFromBg函数书写新函数,主要需要修改的地方在URL和处理tableDatas的函数,其它部分无需变化。

teambiz\WebRoot\page\js\common.js中的fetchMenuFromBg函数。

编写处理tableDatas的函数(可选)

遍历方式请参照上面的showMenu函数,取得数据后进行DOM操作需要自行处理。

teambiz\WebRoot\page\js\common.js中的showMenu函数。

 

第五部分:小结

在前后台有一定约定的前提下(status,node),通过一系列对象的配合,我们轻松完成从SQL查询结果集到前台能使用的结果集的转换,这些对象及其使用方法绝大多数都是固定的或是仅需稍加改变的,程序员主要需要考虑的是最初的SQL语句和最终的DOM处理过程,中间只用按部就班的完成装配工作。

这种方式的优势在于:

1.减轻了编码量,同时也减少了出错的可能。

2.易用,因为SQL相对于HQL更容易被人接受。

3.比页面循环标签更具表现性。

这种方式的主要缺点在于:

1. JS和DOM操作需要程序员加以小心。

2.如果字段含有特殊字符可能会造成XML解析异常,但对此无需过于担心,需要注意的多在备注这样的字段中,可以在需要特殊处理再进行处理。

posted @ 2012-02-29 10:32 何杨 阅读(240) | 评论 (0)编辑 收藏

 

 

 

 

 

 

TeamBiz中Ajax的基本运用

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月23日

版本:1.03

更新日期:2012年2月28日

 

 

第一部分:功能说明

提供前台页面到后台程序的异步请求响应通道。

第二部分:核心组件

名称

路径

说明

Prototype1.6.0.3

teambiz\WebRoot\page\js\prototype-1.6.0.3.js

Prototype是一个有历史的JS类库,TeamBiz中主要使用了它的Ajax部分及$函数。

注意,Teambiz并非对Prototype产生依赖,Prototype为Teambiz提供的仅是Ajax.Rquest对象及$函数而已,因为teambiz已经包含了普适版本的$函数,因此换用别的JS框架并不困难。

AjaxAction

teambiz\src\com\ibm\heyang\action\base\AjaxAction.java

AjaxAction是所有响应Ajax异步请求的Action的基类,它主要提供以下四项功能:

1.设置Response;

2.将url中的请求参数解码后放入RequestParamMap对象中;

3.强制子类实现函数process;

4.当子类的process函数中出现异常时,接受异常并包装成XML传给前台页面。

RequestParamMap

teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java

RequestParamMap内部包含一个哈希表,以键值对的方式存储前台URL中的参数及其值。

RequestParamMap对象的生成在于AjaxAction的getRequestParamMap函数中。

它主要提供以下功能:

1.将参数集约化,此举能简化后台函数的编写。

2.当后台函数使用其内部不存在的参数时,它能自主抛出一个异常,通过AjaxAction的包装传给前台,使得编写函数的程序员能快速进行错误定位。

3.对前台编写的参数进行UTF-8解码,此举与前台对URL进行两次UTF8编码配合,统一解决了非ASC码字符传送产生乱码的问题。

Ajax.Request

定义于prototype-1.6.0.3.js中

Prototype中定义的Ajax请求对象,其参数有四个,URL,请求方法,成功函数和失败函数。相对于传统方式,它的可控性更高。

 

第三部分:前台和后台的约定

考虑到代码解读和人工解读的双重便利性,TeamBiz采用XML而不是JSON作为前后台数据的载体,此XML采用了一些约定以规范化编码。

Ajax异步调用过程中,后台需要两组数据来说明响应细节,一个是状态,如果它的值是OK的话,说明已经取得了请求想要的数据,此时向前台传出的XML会类似如下格式:

<response>

<status>ok</status>

<node>

<a>a</a>

<b>b</b>

</node>

</response>

如果它的值是NG的话,说明后台能响应,但由于某种原因(用户未登录,用户缺乏权限,参数缺失,后台组件尚未就绪,异常抛出等,前二者需要程序员编码,后两者框架已经代为实现),不能传回请求想要的数据,此时向前台传出的XML会类似如下格式:

 

<response>

<status>ng</status>

<text>请登录后再来执行此操作</text>

</response>

 

后台进行如上约定后,前台就可以采用如下统一的格式来处理XHR响应:

new Ajax.Request(url,{    

           method:'get',    

           onSuccess: function(ajaxObj){   

                        // alert(ajaxObj.responseText);   // 这里不要随意删去,有时需要打开屏蔽以观察后台传来的XML文本                   

                var status=ajaxObj.responseXML.getElementsByTagName("status")[0].firstChild.data;

                                                                                               

                                                if(status=="ok"){

                                                            ....// 状态为ok时的处理

                                                }

                                                else{

                                                            ....// 状态为ng时的处理

                                                }

           },    

           onFailure: function(){

                                                ....// 后台没有响应时的处理

           }  

        }

);

 

第四部分:使用步骤

步骤

说明

参照

在前台编写向后台发出请求的JS函数。

在此函数需要进行三件事:

1.编写URL。

2.对URL进行UTF8编码。

3.会使用一个Ajax.Request对象向后台发出请求。

teambiz\WebRoot\page\js\common.js中fetchMenuFromBg函数。

在后台编写响应前端请求的Action

Action需要继承自AjaxAction。在其process函数中主要进行以下三件事:

1.权限验证。

2.使用后端组件取得前端想要的数据。

3.以XML方式将数据传回。

teambiz\src\com\ibm\heyang\action\menu\FetchMenuAction.java

struts-config.xml注册Action

由于完全不需要静态或动态的form,此Action格式很简单,仅包含path,type和scope三部分。

teambiz\WebRoot\WEB-INF\struts-config.xml中的

<action path="/FetchMenu" type="com.ibm.heyang.action.menu.FetchMenuAction" scope="request" >

</action>

 

第五部分:小结

TeamBiz中全部向后台的请求都是通过Ajax异步方式实现的,相对于传统方式,它有以下优势:

1.由于只需要提取必要的资源,因此占用资源少。

2.有多种状态,多个函数用来处理后台的响应,这使得控制更加多样化。

3.由于前台在请求时处于静止状态,因此无需刻意保存前台页面数据。

4.由于不需要编写form,forward等元素,使得控制文件编写简单方便。

posted @ 2012-02-29 10:31 何杨 阅读(175) | 评论 (0)编辑 收藏

posted @ 2012-02-29 10:30 何杨 阅读(153) | 评论 (0)编辑 收藏

 

 

 

 

 

 

Teambiz整体介绍

 

 

 

 

 

 

 

作者:何杨

撰写日期:2012年2月27日

版本:1.00

更新日期:  

 

 

第一部分:TeamBiz说明

TeamBiz是一个处理团队成员之间事务的Web程序,用户可以使用它给自己或者别人规定任务,完成给自己的任务或是跟踪分给他人的事务。

TeamBiz差异化的一点在于基本使用Ajax方式进行前后台交互,后台查询数据库后传回的是XML,前台进行解析并使用DOM进行页面操作。系统在前后台提供了一系列类来协助程序员完成常见编码任务,相信这能减轻程序员的负担并提高代码的一致性。

TeamBiz是一个框架性说明程序,在此程序的基础上还可以完成扩充,如菜单改写成树样式,后台增加更多的领域对象和服务类等。

TeamBiz遗憾的一点在于没有解决当领域对象及其对应的表数据增加时系统复杂度的同时增加,也许再引入一个或多个中间层次能将熵维持在一个能控制的限度内,如果你知道怎么去做,请写信告诉我。(heyanghy@cn.ibm.com,heyang78@gmail.com)

第二部分:TeamBiz使用的框架

名称

说明

Stuts1.3.8

Teambiz使用了Struts的控制层功能和Tile及极少数标签。

Spring2.5

Teambiz使用了Spring的IoC和JDBCTemplate。

Hibernate3.0

Teambiz使用Hibernate进行单个领域对象的创建和更新。

Prototype1.6.0.3

Teambiz使用了Prototype的Ajax.Request,$,window.load三部分。

 

第二部分:TeamBiz其它相关事项

名称

说明

数据库

MySql5.2,如果需要更换数据库,请修改teambiz\cfg\appctx-datasource.xml中数据源配置并检查Dao类中诸Sql是否能在新数据库中正常运行。

开发环境

MyEclipse9,将程序包导入即可运行。

 

posted @ 2012-02-29 10:25 何杨 阅读(220) | 评论 (0)编辑 收藏

通常,我们可以如下所示制作横向菜单:
#commonUsedDocumentContainerDiv ul{
    margin
:0px;
    padding
:0px;
    list-style-type
:none;
    vertical-align
:middle  ;
}

#commonUsedDocumentContainerDiv li a
{
    width
:130px;  
    height
:75px;
    line-height
:32px;
    
    font-family
:"宋体","Tahoma"; 
    font-size
:14px;   
    font-weight
:bold;           
    color
:#000000;
    
    text-decoration
:none;
    text-align
:left;  
    
    background
:#ffffff;
}

#commonUsedDocumentContainerDiv li a:hover
{
    width
:130px;  
    height
:75px;
    line-height
:32px;
    
    font-family
:"宋体","Tahoma"; 
    font-size
:14px;   
    font-weight
:bold;           
    color
:#0000ff;
    
    text-decoration
:none;
    text-align
:left;  
    
    background
:#ffffff;
}

这样做,在FF或是ie8以上的版本中,都没有问题,但是ie6有问题,具体上看来本来应该是一横排的菜单变成了阶梯状,一下子就难看了。

这是因为ie6对ul/li的解释方式所致,要解决这个问题也很简单,对li的样式也进行设置就行了,如下的粗体部分:
#commonUsedDocumentContainerDiv ul{
    margin
:0px;
    padding
:0px;
    list-style-type
:none;
    vertical-align
:middle  ;
}

#commonUsedDocumentContainerDiv li
{
    float
:left;
    display
:block;
    
    width
:130px;  
    height
:75px;
    
    background
:#ffffff;
}


#commonUsedDocumentContainerDiv li a
{
    width
:130px;  
    height
:75px;
    line-height
:32px;
    
    font-family
:"宋体","Tahoma"; 
    font-size
:14px;   
    font-weight
:bold;           
    color
:#000000;
    
    text-decoration
:none;
    text-align
:left;  
    
    background
:#ffffff;
}

#commonUsedDocumentContainerDiv li a:hover
{
    width
:130px;  
    height
:75px;
    line-height
:32px;
    
    font-family
:"宋体","Tahoma"; 
    font-size
:14px;   
    font-weight
:bold;           
    color
:#0000ff;
    
    text-decoration
:none;
    text-align
:left;  
    
    background
:#ffffff;
}

另外需要注意的是,li a和li a:hover中照样可以设置display:block,如果li a 或者li a:hover 有背景还非得如此不可,这和网上流传甚广的方案不一样,看来知识不能拿来就用,还需要自己尝试一下。
posted @ 2012-02-14 15:31 何杨 阅读(324) | 评论 (0)编辑 收藏

先看代码:
#contentContainer{
    margin-top
:10px;
    padding
:0px;
    border
:0px solid #336699;
    
    width
:100%;
    
    overflow-x
:hidden;
}

当div的宽度基本和浏览器可控宽度一致时,滚动条就会出现,最麻烦的是会出现两个,一个div的,一个浏览器的。

这时,可以如上所示,将超出部分隐藏,这样滚动条就不会出现了。

IE上效果是滚动条彻底没有,但是FF只是把滚动条置灰,两者还是有区别的。
posted @ 2012-02-14 15:19 何杨 阅读(612) | 评论 (0)编辑 收藏

#detailInstructionContentDiv{
    margin
:0px;
    padding-top
:10px;
    padding-left
:22px;

    border
:0px solid #336699;
    
    width
:150px;
    height
:230px;
    
    text-align
: left;
    
    font-family
:"宋体","Tahoma"; 
    font-size
: 12px;    
    font-weight
:normal;
    color
:#333333;
    
    white-space
:normal;
}

见以上粗体部分,比wordbreak之类的好用得多。
posted @ 2012-02-14 15:13 何杨 阅读(582) | 评论 (0)编辑 收藏

页面代码,其中粗体部分是需要你根据实际情况进行修改的,其它保持原状:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<title>标题</title>
<BODY>
<center><OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH="1440" HEIGHT="772" CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0">
<PARAM NAME=movie VALUE="1_1.swf">
<PARAM NAME=play VALUE=true>
<PARAM NAME=loop VALUE=false>
<PARAM NAME=wmode VALUE=transparent>
<PARAM NAME=quality VALUE=low>
<EMBED SRC="1_1.swf" WIDTH=1440 HEIGHT=772 quality=low loop=false wmode=transparent TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
</EMBED>
</OBJECT></center>
<SCRIPT src='swf.js'></script>
</BODY>
</HTML>

导入的swf.js代码如下:
obj=document.getElementsByTagName('object');
for (var i=0; i<obj.length; ++i)
  obj[i].outerHTML
=obj[i].outerHTML;
posted @ 2012-02-13 11:04 何杨 阅读(924) | 评论 (2)编辑 收藏

如果以如下方式打开新窗口:
<href="javascript:openWindow('swf/1_1.jsp','',1440,772);" >示例</a>

那么,原窗口会变成一个含有[Object]字符的窗口。

换用下面方式即可,注意下面粗体部分的void(0),它表示没有返回值:
<href="javascript:openWindow('swf/1_1.jsp','',1440,772);void(0);" >示例</a>

下面的openCenterWindow函数仅供参考:
function openWindow(url,windowName,width,height){
    
var left = 0;     
    
var top = 0;       
      
    
var wnd=window.open(url,windowName,"height="+height+",width="+width+",top="+top+",left="+left+",resizable=yes,scrollbars=yes,status=no,location=no,");
    
return wnd;
}
posted @ 2012-02-13 10:59 何杨 阅读(1038) | 评论 (1)编辑 收藏

说明:
1.下载http://www.apache.org/dyn/closer.cgi/poi/release/bin/poi-bin-3.7-20101029.zip后,将poi-3.7目录下的jar包放入lib目录, 再将此工程载入Eclipse/MyEclipse即可。
2.界面中文本框供输出数据量用,在我的T410上测试数据量在3.5W~3.6W之间,再多就报java.lang.OutOfMemoryError错误。附带提一下输出数据量的问题,如果修饰单元格的代码越简单,那么能输出的数据就越多,反之数据就少了。
3.主要代码如下:

Sevlet代码:
package com.heyang.action;


import java.io.BufferedOutputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.heyang.service.DownloadService;

/**
 * POI下载的Servlet
 * 
@author heyang
 *
 
*/
public class DownloadServlet extends HttpServlet {
    
private static final long serialVersionUID = 56890894234786L;
    
    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, java.io.IOException {
        String fileName
="download.xls";
        response.setHeader(
"Content-disposition""attachment; filename="+fileName);// 设定输出文件头   
        response.setContentType("application/msexcel");// 定义输出类型 
        
        
try{
            
int rowCount=Integer.parseInt(request.getParameter("rowCount"));
            
            
// 表头行
            String[] headers=new String[]{"更新ID","账期","基站编号","基站名称","站点状态","部门名称","站点类型","占用类型","预提(元)","未核销金额","上期未核销","开始月份","结束月份","上期抄表数","本期抄表数","电价","电量","本期报账(元)","补提(元)","预提汇总(元)","成本中心","专业","本期报账单号","基站类别","线损"};
            DownloadService service
=new DownloadService();

            HSSFWorkbook workbook
=service.generateWorkbook(rowCount, headers.length);

            ServletOutputStream out 
= response.getOutputStream();
            BufferedOutputStream bos 
= new BufferedOutputStream(out);        
            workbook.write(bos);
            bos.flush();
            bos.close();
            
        }
catch(Exception ex){
            ex.printStackTrace();
        }
        
        
return ;
    }
        
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, java.io.IOException {
        doPost(request, response);
    }
}

Service代码:
package com.heyang.service;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


/**
 * 下载服务类
 * 
 * 
@author heyang
 *
 
*/
public class DownloadService{
    
/**
     * 生成工作簿对象
     * 
@param rowCount
     * 
@param columnCount
     * 
@return
     
*/
    
public HSSFWorkbook generateWorkbook(int rowCount,int columnCount) throws Exception{
        HSSFWorkbook workbook 
= new HSSFWorkbook(); //产生工作簿对象
        HSSFSheet sheet = workbook.createSheet(); //产生工作表对象
        String value=null;
        
        HSSFRow row 
= null;
        HSSFCell cell 
= null;
        
        
for(int i=0;i<rowCount;i++){
            row 
= sheet.createRow(i);//创建一行
            
            
for(int j=0;j<columnCount;j++){
                value
=""+i+","+j;
                
                cell 
= row.createCell(j);
                cell.setCellValue(value);
                
                cell 
= null;
            }
            
            row 
= null;
        }
        
        row 
= null;
        cell 
= null;
        
        
return workbook;
    }
}

4.工程下载地址:
posted @ 2012-02-01 15:48 何杨 阅读(706) | 评论 (0)编辑 收藏

1.Select控件在页面上的写法:
<select id="monthSelectCbo">
    
<option value="01">01</option>
    
<option value="02">02</option>
    
<option value="03">03</option>
    
<option value="04">04</option>
    
<option value="05">05</option>
</select>

2.设定select控件的当前项:
可以用:
$(
"monthSelectCbo").value=month;
也可以用:
$(
"monthSelectCbo").selectedIndex=1;

3.取得select控件的当前内容:
var month= $("monthSelectCbo").value; 

4.取得select空间选择项的序号:
var selIndex=$("monthSelectCbo").selectedIndex;

5.清除select控件的所有原有值:
var myListbox=$("belongToCompanyCbo");

for(var i=myListbox.options.length-1;i>=0;i--){
    myListbox.remove(i);
}

6.使用JavaScript给Select控件设定值:
var newOption=new Option;
newOption.value
="Beijing";
newOption.text
="北京";
monthSelectCbo.add(newOption);
posted @ 2012-01-12 11:31 何杨 阅读(237) | 评论 (0)编辑 收藏

父窗口调用子窗口函数实现是挺简单的,如下:
var wnd = window.open("XXX.html");
wnd.showDatas(datas);
以上代码中,showDatas是定义在子窗口的函数,datas是父窗口要给子窗口的数据。
需要注意的事,使用open语句打开窗口后,窗口未必能把所有代码全部载入,因此showDatas函数未必调用有效。
如果要有效,可以先把数据传递给子窗口,再在子窗口中延时调用showDatas函数。
如此,父窗口中的代码如下:
var wnd = window.open("XXX.html");
wnd.datas=datas;// 传递数据给子窗口
子窗口中的代码如下:
setTimeout(showDatas(window.datas),1000);// 延时时间可进行调整。
如上,父窗口调用子窗口函数才算完美。

反过来,子窗口要调用父窗口的函数要用opener对象,如:
opener.showMessages(msgs);
以上代码中,showMessages是定义在父窗口的函数,msgs是子窗口要给父窗口的数据。

2012年5月9日增补:
父窗口未必需要传数据给子窗口,而是子窗口需要操作父窗口的某些区域如div时,可以在父窗口打开子窗口的函数前将这个div的id找个地方(隐藏区域)存起来,当然这个地方不需要显示,当子窗口需要操作这个div时,直接调用父窗口的js函数即可,这个函数可以先从隐藏区域中得到div的id,再根据这个id操作div。
posted @ 2012-01-11 15:28 何杨 阅读(1313) | 评论 (0)编辑 收藏

下载地址:

效果:

核心代码:
<%@ page contentType="text/html; charset=UTF-8"%>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>

<title>Dtree Sample</title>
<link rel="stylesheet" rev="stylesheet" href="web/css/style.css" type="text/css" />
<link rel="stylesheet" rev="stylesheet" href="web/css/dtree.css" type="text/css" />
<script src="web/js/dtree.js" type="text/javascript"></script>
</head>

<body>

<div id="treeDiv">
    
<div class="dtree">
        
<p><href="javascript: d.openAll();">全展开</a> | <href="javascript: d.closeAll();">全收起</a></p>
        
<script type="text/javascript">
            
<!--
    
            d 
= new dTree('d');
    
            d.add(
0,-1,'Root');
            d.add(
1,0,'1','web/jsp/1.jsp','显示1.jsp','rightFrame','','',false);
            d.add(
2,0,'2','web/jsp/2.jsp','显示2.jsp','rightFrame','','',false);
            d.add(
3,0,'3','web/jsp/3.jsp','显示3.jsp','rightFrame','','',false);
            d.add(
4,0,'4','web/jsp/4.jsp','显示4.jsp','rightFrame','','',false);
            d.add(
5,1,'李逵','test?page=likui','显示李逵','rightFrame','','',false);
            d.add(
6,1,'宋江','test?page=sj','显示宋江','rightFrame','','',false);
            d.add(
7,1,'鲁智深','test?page=lzs','显示鲁智深','rightFrame','','',false);           
    
            document.write(d);
    
            
//-->
        </script>
    
</div>
</div>
<div id="contentDiv">
    
<iframe id="index_mainframe" name="rightFrame" class="index_mainframe" src="web/jsp/blank.jsp" frameborder="0" scrolling="no" ></iframe>
</div>

</body>
</html>

dtree的css,js代码都不复杂,如果对其稍加改造,可以做出更眩的东西来。
posted @ 2012-01-04 19:44 何杨 阅读(285) | 评论 (0)编辑 收藏

说明:以下代码能原样复制输入XML的所有节点和属性,虽说使用ESQL和JavaCompute很容易完成此任务。但是将以下代码稍作修改,就可以对输入进行筛选,剪裁和重构的工作。

输入:
<id="1"><id="2">3</b></a>

代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
<xsl:template match="node()">
        
<xsl:copy>
            
<xsl:apply-templates select="@*|node()"/>
        
</xsl:copy>
    
</xsl:template>
 
    
<xsl:template match="@*">
        
<xsl:attribute namespace="{namespace-uri()}" name="{name()}">
            
<xsl:value-of select="."/>
        
</xsl:attribute>
    
</xsl:template>
 
    
<xsl:template match="text()">
        
<xsl:value-of select="."/>
    
</xsl:template>
</xsl:stylesheet>

输出:
<?xml version="1.0" encoding="UTF-8"?><id="1"><id="2">3</b></a>
posted @ 2011-12-21 20:14 何杨 阅读(551) | 评论 (1)编辑 收藏

     摘要: 1.使用Substring进行字符串截取输入:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><date>122811</date>输出:Code highlighting produced by Actipro CodeHig...  阅读全文
posted @ 2011-12-14 09:49 何杨 阅读(338) | 评论 (0)编辑 收藏

数据源(students.xml):
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xsheet.xsl"?>
<students>
    
<student id="123">
        
<name>Andy</name>
        
<score>69</score>
    
</student>
    
<student id="345">
        
<name>bill</name>
        
<score>88</score>
    
</student>
    
<student id="678">
        
<name>Felix</name>
        
<score>96</score>
    
</student>
    
<student id="987">
        
<name>Zerg</name>
        
<score>72</score>
    
</student>
    
<student id="236">
        
<name>Grrr</name>
        
<score>59</score>
    
</student>
</students>

XSL文件(xsheet.xsl):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    
<xsl:template match="/">
        
<html>
        
<head>
            
<title>成绩单</title>
        
</head>
        
<body>
            
<table border="1">
                
<caption>学生成绩单</caption>
                
<tr>
                    
<td>序号</td>
                    
<td>ID</td>
                    
<td>姓名</td>
                    
<td>成绩</td>
                
</tr>
                
<xsl:for-each select="students/student">
                
<xsl:sort order="descending"  select="score"/>
                    
<tr>
                        
<xsl:choose>
                            
<xsl:when test="position() mod 2 = 1">
                                
<xsl:attribute name="style">background:#336699;</xsl:attribute>
                            
</xsl:when>                            
                            
<xsl:otherwise>
                                
<xsl:attribute name="style">background:#00ffcc;</xsl:attribute>
                            
</xsl:otherwise>
                        
</xsl:choose>
                    
                        
<td><xsl:value-of select="position()"/></td>
                        
<td><xsl:value-of select="@id"/></td>
                        
<td><xsl:value-of select="name"/></td>
                        
<xsl:choose>
                            
<xsl:when test="score &gt; 60">
                                
<td><xsl:value-of select="score"/></td>
                            
</xsl:when>                            
                            
<xsl:otherwise>
                                
<td><font color="red"><xsl:value-of select="score"/></font></td>
                            
</xsl:otherwise>
                        
</xsl:choose>
                    
</tr>
                
</xsl:for-each>
            
</table>
            
<br/>
            
<table border="1">
                
<caption>统计表格</caption>
                
<tr><td>总分</td><td><xsl:value-of select="sum(//score)"/></td></tr>
                
<tr><td>个数</td><td><xsl:value-of select="count(/students/student)"/></td></tr>
                
<tr><td>及格人数</td><td><xsl:value-of select="count(/students/student[score > 60])"/></td></tr>    
                
<tr><td>平均分</td><td><xsl:value-of select="sum(//score) div count(/students/student)"/></td></tr>                            
            
</table>
        
</body>
        
</html>
    
</xsl:template>
    
</xsl:stylesheet>

用IE打开数据源文件的效果:


XSLT相关知识请参考:
http://soft-app.iteye.com/blog/916652
posted @ 2011-12-12 21:26 何杨 阅读(352) | 评论 (0)编辑 收藏

需要一个Mapping节点时,XMLTansformation节点通常是一个不错的选择,它可以使用XSLT将输入的XML转变成另一种形式的 XML,其开发速度高于在Compute节点中书写ESQL和在JavaCompute节点中书写Java代码,其缺陷在于缺乏访问外部数据的手段,有时 还需要上述两种节点的帮助。

XMLTransformation节点在Transformation选择项下,需要指定XSL文件的位置,可以通过其StylesheetName和StyleSheetDirectory来指定。以下是一个转换的例子:

输入:
<employees><employee id="001">Andy</employee><employee id="002">Bill</employee><employee id="034">Cindy</employee></employees>

转换XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    
<xsl:template match="/">
        
<users>
        
<xsl:for-each select="employees/employee">
            
<user>
                
<sn><xsl:value-of select="position()"/></sn>
                
<id><xsl:value-of select="@id"/></id>
                
<name><xsl:value-of select="text()"/></name>
                
<pswd><xsl:value-of select="concat(@id,'_',text())"/></pswd>
            
</user>
        
</xsl:for-each>
        
</users>
    
</xsl:template>
    
</xsl:stylesheet>

输出:
<?xml version="1.0" encoding="UTF-8"?><users><user><sn>1</sn><id>001</id><name>Andy</name><pswd>001_Andy</pswd></user><user><sn>2</sn><id>002</id><name>Bill</name><pswd>002_Bill</pswd></user><user><sn>3</sn><id>034</id><name>Cindy</name><pswd>034_Cindy</pswd></user></users>
posted @ 2011-12-12 19:44 何杨 阅读(681) | 评论 (0)编辑 收藏

代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

import com.ibm.broker.javacompute.MbJavaComputeNode;
import com.ibm.broker.plugin.MbElement;
import com.ibm.broker.plugin.MbException;
import com.ibm.broker.plugin.MbMessage;
import com.ibm.broker.plugin.MbMessageAssembly;
import com.ibm.broker.plugin.MbOutputTerminal;


public class subflow_JavaCompute extends MbJavaComputeNode {

    
public void evaluate(MbMessageAssembly inAssembly) throws MbException {
        MbOutputTerminal out 
= getOutputTerminal("out");
        MbOutputTerminal alt 
= getOutputTerminal("alternate");

        MbMessage inMessage 
= inAssembly.getMessage();
        MbMessage outMessage 
= new MbMessage(inMessage);
        MbMessageAssembly outAssembly
=new MbMessageAssembly(inAssembly,outMessage);
        
        MbElement document
=outMessage.getRootElement();
        MbElement root
=document.getLastChild().getFirstChild();

        
try{
            Set
<String> selfDefNSSet=new HashSet<String>();// 用来存储自定义的名称空间名
            traverseAndRemoveNils(root,selfDefNSSet);// 遍历节点删除特定属性
            
            
if(selfDefNSSet.size()>0){
                traverseAndRemoveSelfDefNSNode(root,selfDefNSSet);// 遍历节点删除自定义名称空间节点
            }
        }
        
catch(Exception ex){
            ex.printStackTrace();
        }
        
        out.propagate(outAssembly);
    }

    
    
private void traverseAndRemoveNils(MbElement elm,Set<String> selfDefNSSet) throws Exception{
        
// get all the attributes of current element
        List <MbElement> attrSet = (List <MbElement>)elm.evaluateXPath("@*"); 
        
for(MbElement attr:attrSet){
            String name
=attr.getName().toString();
            String value
=attr.getValue().toString();
            
            
if(isNillAttr(name,value)){
                attr.detach();
            }
            
            
if(isSelfDefNS(name,value)){
                String[] arr
=name.split(":");
                selfDefNSSet.add(arr[
1]);
                attr.detach();
            }
        }
        
        
// get all sub elements of current element
        List <MbElement> nodeset = (List <MbElement>)elm.evaluateXPath("*"); 
        
for(MbElement childElm:nodeset){
            
// recursion
            traverseAndRemoveNils(childElm,selfDefNSSet);
        }
    }
    
    // 判断是否特定属性,a:nil,b:nil都算
    
private boolean isNillAttr(String name,String value){
        String patternStr
="(\\w+)(:nil)";
          
        
boolean result1 = Pattern.matches(patternStr, name);
        
boolean result2="true".equals(value);
        
        
return result1&&result2;
    }
    // 判断是否自定义名称空间
    
private boolean isSelfDefNS(String name,String value){
        String patternStr
="(xmlns:)(\\w+)";
          
        
boolean result = Pattern.matches(patternStr, name);
        
        
return result;
    }
   
    
private void traverseAndRemoveSelfDefNSNode(MbElement elm,Set<String> selfDefNSSet) throws Exception{
        String name
=elm.getName().toString();
        
        
if(isSelfDefNSNode(name,selfDefNSSet)){
            elm.detach();
        }
        
        
// get all sub elements of current element
        List <MbElement> nodeset = (List <MbElement>)elm.evaluateXPath("*"); 
        
for(MbElement childElm:nodeset){
            
// recursion
            traverseAndRemoveSelfDefNSNode(childElm,selfDefNSSet);
        }
    }
    // 判读节点是否自定义名称空间的限定名
    
private boolean isSelfDefNSNode(String name,Set<String