---- 在Oracle数据库系统中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle数据库可以有两种身份验证的方法:即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证。因此,管理好密码文件,对于控制授权用户从远端或本机登录Oracle数据库系统,执行数据库管理工作,具有重要的意义。
---- Oracle数据库的密码文件存放有超级用户INTERNAL/SYS的口令及其他特权用户的用户名/口令,它一般存放在ORACLE_HOME\DATABASE目录下。
一、 密码文件的创建:
---- 在使用Oracle Instance Manager创建一数据库实例的时侯,在ORACLE_HOME\DATABASE目录下还自动创建了一个与之对应的密码文件,文件名为PWDSID.ORA,其中SID代表相应的Oracle数据库系统标识符。此密码文件是进行初始数据库管理工作的基础。在此之后,管理员也可以根据需要,使用工具ORAPWD.EXE手工创建密码文件,命令格式如下:
C:\ >ORAPWD FILE=< FILENAME > PASSWORD
=< PASSWORD > ENTRIES=< MAX_USERS >
---- 各命令参数的含义为:
---- FILENAME:密码文件名;
---- PASSWORD:设置INTERNAL/SYS帐号的口令;
---- MAX_USERS:密码文件中可以存放的最大用户数,对应于允许以SYSDBA/SYSOPER权限登录数据库的最大用户数。由于在以后的维护中,若用户数超出了此限制,则需要重建密码文件,所以此参数可以根据需要设置得大一些。
---- 有了密码文件之后,需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态。
二、 设置初始化参数REMOTE_LOGIN_PASSWORDFILE:
---- 在Oracle数据库实例的初始化参数文件中,此参数控制着密码文件的使用及其状态。它可以有以下几个选项:
NONE:指示Oracle系统不使用密码文件,特权用户的登录通过操作系统进行身份验证;
EXCLUSIVE:指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息,即允许将系统权限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户。
SHARED:指示可有多个数据库实例可以使用此密码文件。在此设置下只有INTERNAL/SYS帐号能被密码文件识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA的权限登录。此设置为缺省值。
---- 在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE、SHARED情况下,Oracle系统搜索密码文件的次序为:在系统注册库中查找ORA_SID_PWFILE参数值(它为密码文件的全路径名);若未找到,则查找ORA_PWFILE参数值;若仍未找到,则使用缺省值ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相应的Oracle数据库系统标识符。
三、 向密码文件中增加、删除用户:
---- 当初始化参数REMOTE_LOGIN_PASSWORDFILE设置为EXCLUSIVE时,系统允许除INTERNAL/SYS以外的其他用户以管理员身份从远端或本机登录到Oracle数据库系统,执行数据库管理工作;这些用户名必须存在于密码文件中,系统才能识别他们。由于不管是在创建数据库实例时自动创建的密码文件,还是使用工具ORAPWD.EXE手工创建的密码文件,都只包含INTERNAL/SYS用户的信息;为此,在实际操作中,可能需要向密码文件添加或删除其他用户帐号。
---- 由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中,所以当向某一用户授予或收回SYSOPER/SYSDBA系统权限时,他们的帐号也将相应地被加入到密码文件或从密码文件中删除。由此,向密码文件中增加或删除某一用户,实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限。
---- 要进行此项授权操作,需使用SYSDBA权限(或INTERNAL帐号)连入数据库,且初始化参数REMOTE_LOGIN_PASSWORDFILE的设置必须为EXCLUSIVE。具体操作步骤如下:
创建相应的密码文件;
设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
使用SYSDBA权限登录:
CONNECT SYS/internal_user_passsword AS SYSDBA;
启动数据库实例并打开数据库;
创建相应用户帐号,对其授权(包括SYSOPER和SYSDBA):
授予权限:GRANT SYSDBA TO user_name;
收回权限:REVOKE SYSDBA FROM user_name;
现在这些用户可以以管理员身份登录数据库系统了;
四、 使用密码文件登录:
---- 有了密码文件后,用户就可以使用密码文件以SYSOPER/SYSDBA权限登录Oracle数据库实例了,注意初始化参数REMOTE_LOGIN_PASSWORDFILE应设置为EXCLUSIVE或SHARED。任何用户以SYSOPER/SYSDBA的权限登录后,将位于SYS用户的Schema之下,以下为两个登录的例子:
---- 1. 以管理员身份登录:
---- 假设用户scott已被授予SYSDBA权限,则他可以使用以下命令登录:
---- CONNECT scott/tiger AS SYSDBA
---- 2. 以INTERNAL身份登录:
---- CONNECT INTERNAL/INTERNAL_PASSWORD
五、 密码文件的维护:
---- 1. 查看密码文件中的成员:
---- 可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限。这些用户也就是相应地存在于密码文件中的成员。
---- 2. 扩展密码文件的用户数量:
---- 当向密码文件添加的帐号数目超过创建密码文件时所定的限制(即ORAPWD.EXE工具的MAX_USERS参数)时,为扩展密码文件的用户数限制,需重建密码文件,具体步骤如下:
---- a) 查询视图V$PWFILE_USERS,记录下拥有SYSOPER/SYSDBA系统权限的用户信息;
---- b) 关闭数据库;
---- c) 删除密码文件;
---- d) 用ORAPWD.EXE新建一密码文件;
---- e) 将步骤a中获取的用户添加到密码文件中。
---- 3. 修改密码文件的状态:
---- 密码文件的状态信息存放于此文件中,当它被创建时,它的缺省状态为SHARED。可以通过改变初始化参数REMOTE_LOGIN_PASSWORDFILE的设置改变密码文件的状态。当启动数据库事例时,Oracle系统从初始化参数文件中读取REMOTE_LOGIN_PASSWORDFILE参数的设置;当加载数据库时,系统将此参数与口令文件的状态进行比较,如果不同,则更新密码文件的状态。若计划允许从多台客户机上启动数据库实例,由于各客户机上必须有初始化参数文件,所以应确保各客户机上的初始化参数文件的一致性,以避免意外地改变了密码文件的状态,造成数据库登陆的失败。
---- 4. 修改密码文件的存储位置:
---- 密码文件的存放位置可以根据需要进行移动,但作此修改后,应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置。
---- 5. 删除密码文件:
---- 在删除密码文件前,应确保当前运行的各数据库实例的初始化参数REMOTE_LOGIN_PASSWORDFILE皆设置为NONE。在删除密码文件后,若想要以管理员身份连入数据库的话,则必须使用操作系统验证的方法进行登录。
posted @
2007-09-29 12:10 jadmin 阅读(92) |
评论 (0) |
编辑 收藏
1、在计算机 开始--->管理-->服务中没有看到 OracleOraHome92TNSListener 服务,但服务已经启动
2、C:\>lsnrctl start 执行完后报open service error。然后在计算机 开始--->管理-->服务中看到 了 OracleOraHome92TNSListener 服务
3、运行regedit.exe启动注册表编辑器,在HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/下的Services和CurrentControlSet/Services下找到OracleOraHome92TNSListener项,在右边窗口按右键,新建/字符串,取名ImagePath。
双击新见的建,在“数值数据”项输入D:\oracle\ora92\bin\TNSLSNR.EXE(根据你自己的实际情况进行修改),确定完成。
再次在服务中双击打开OracleOraHome92TNSListener的服务看到其“可执行文件的路径”一栏已经显示了其正确的值。这时你可以启动监听了。
4、C:>tnsping 数据库SID。看看tns服务没有起来。如果没有起来,用下面的命令
c:\>lsnrctl
lsnrctl>start把这个服务起动起来。
c:\>lsnrctl start 后open service error错误消失,但例程中有一个状态为UNKNOWN,另一个为READY.命令执行成功。
PL/SQL Developer连接Oracle报错:ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
解决办法:
首先重启下对应的数据库监听服务(OracleOraDb<?xml:namespace prefix = st1 />10g_home1TNSListener)和数据库服务(OracleServiceORCL),如果还没解决,就按下面的进行操作:
1.打开%Oracle安装目录%/network/admin/listener.ora文件(C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora)
2.添加:
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
3.最后文件改成
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = zyk)(PORT = 1521))
)
)
以上粗体部件为增加的内容,修改后重启监听服务后即可。
posted @
2007-09-29 02:57 jadmin 阅读(107) |
评论 (0) |
编辑 收藏
主要思路:
对于任意2个日期比如:date_start=2006-10-1、date_end=2006-10-14 ,首先计算这连个日期之间的时间间隔(天数),然后分别对date_start 和date_end 取得它们下一个星期一的日期,这样就可以得到一个新的可以整除7的完整日期间隔(这个新的日期间隔已经把星期几的问题剔出掉了),换一种说法就是我们可以得到,这两个新的日期之间的周数,拿这个周数乘以5就是工作日期了(tmpWorkingDays)。但是这个日期并不是我们所要的日期,接下来我们要做的就是计算date_start,date_end这两个日期对于根据它们所产生的新的日期之间的时间偏移量,date_start的偏移量(date_start_change)是需要加的,而date_end的这个偏移量(date_end_change)是需要减去的。 最后我们只要用tmpWorkingDays+date_start_change-date_end_change就是我们所要求的实际工作日了。以下是所有实现代码(两个日期跨年也没有问题)。
希望我的方法能对大家有用,应为这个算法没有考虑到节假日的问题,我以后会像办法处理,呵呵,今天就到这里了。
package com.date.utlit;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 计算任意2个日期内的工作日(没有考虑到国定假日)
* @author user
*
*/
public class DateCal {
/**
* @param args
*/
public static void main(String[] args) {
try {
String strDateStart = "2006-10-1";
String strDateEnd = "2006-10-14";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date_start = sdf.parse(strDateStart);
Date date_end = sdf.parse(strDateEnd);
DateCal app = new DateCal();
Calendar cal_start = Calendar.getInstance();
Calendar cal_end = Calendar.getInstance();
cal_start.setTime(date_start);
cal_end.setTime(date_end);
System.out.println("星期-->" + app.getChineseWeek(cal_start)
+ " 日期-->" + cal_start.get(Calendar.YEAR) + "-"
+ (cal_start.get(Calendar.MONTH) + 1) + "-"
+ cal_start.get(Calendar.DAY_OF_MONTH));
System.out.println("星期-->" + app.getChineseWeek(cal_end) + " 日期-->"
+ cal_end.get(Calendar.YEAR) + "-"
+ (cal_end.get(Calendar.MONTH) + 1) + "-"
+ cal_end.get(Calendar.DAY_OF_MONTH));
System.out.println("工作日为-->"
+ app.getWorkingDay(cal_start, cal_end));
System.out.println("休息日-->"+app.getHolidays(cal_start, cal_end));
} catch (Exception e) {
// TODO: handle exception
}
}
public int getDaysBetween(java.util.Calendar d1, java.util.Calendar d2) {
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(java.util.Calendar.DAY_OF_YEAR)
- d1.get(java.util.Calendar.DAY_OF_YEAR);
int y2 = d2.get(java.util.Calendar.YEAR);
if (d1.get(java.util.Calendar.YEAR) != y2) {
d1 = (java.util.Calendar) d1.clone();
do {
days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
d1.add(java.util.Calendar.YEAR, 1);
} while (d1.get(java.util.Calendar.YEAR) != y2);
}
return days;
}
/**
* 计算2个日期之间的相隔天数
* @param d1
* @param d2
* @return
*/
public int getWorkingDay(java.util.Calendar d1, java.util.Calendar d2) {
int result = -1;
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int betweendays = getDaysBetween(d1, d2);
int charge_date = 0;
int charge_start_date = 0;//开始日期的日期偏移量
int charge_end_date = 0;//结束日期的日期偏移量
// 日期不在同一个日期内
int stmp;
int etmp;
stmp = 7 - d1.get(Calendar.DAY_OF_WEEK);
etmp = 7 - d2.get(Calendar.DAY_OF_WEEK);
if (stmp != 0 && stmp != 6) {// 开始日期为星期六和星期日时偏移量为0
charge_start_date = stmp - 1;
}
if (etmp != 0 && etmp != 6) {// 结束日期为星期六和星期日时偏移量为0
charge_end_date = etmp - 1;
}
// }
result = (getDaysBetween(this.getNextMonday(d1), this.getNextMonday(d2)) / 7)
* 5 + charge_start_date - charge_end_date;
//System.out.println("charge_start_date>" + charge_start_date);
//System.out.println("charge_end_date>" + charge_end_date);
//System.out.println("between day is-->" + betweendays);
return result;
}
public String getChineseWeek(Calendar date) {
final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
"星期六" };
int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);
// System.out.println(dayNames[dayOfWeek - 1]);
return dayNames[dayOfWeek - 1];
}
/**
* 获得日期的下一个星期一的日期
*
* @param date
* @return
*/
public Calendar getNextMonday(Calendar date) {
Calendar result = null;
result = date;
do {
result = (Calendar) result.clone();
result.add(Calendar.DATE, 1);
} while (result.get(Calendar.DAY_OF_WEEK) != 2);
return result;
}
/**
*
* @param d1
* @param d2
* @return
*/
public int getHolidays(Calendar d1,Calendar d2){
return this.getDaysBetween(d1, d2)-this.getWorkingDay(d1, d2);
}
}
posted @
2007-09-28 22:33 jadmin 阅读(66) |
评论 (0) |
编辑 收藏
数值函数:abs(m) m的绝对值mod(m,n) m被n除后的余数power(m,n) m的n次方round(m[,n]) m四舍五入至小数点后n位的值(n缺省为0)trunc(m[,n]) m截断n位小数位的值(n缺省为0)--------------------------------------------------------------------------------字符函数:initcap(st) 返回st将每个单词的首字母大写,所有其他字母小写lower(st) 返回st将每个单词的字母全部小写upper(st) 返回st将每个单词的字母全部大写concat(st1,st2) 返回st为st2接st1的末尾(可用操作符"||")lpad(st1,n[,st2]) 返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格rpad(st1,n[,st2]) 返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格ltrim(st[,set]) 返回st,st为从左边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格rtrim(st[,set]) 返回st,st为从右边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格replace(st,search_st[,replace_st]) 将每次在st中出现的search_st用replace_st替换,返回一个st。缺省时,删除search_st substr(st,m[,n]) n=返回st串的子串,从m位置开始,取n个字符长。缺省时,一直返回到st末端length(st) 数值,返回st中的字符数instr(st1,st2[,m[,n]]) 数值,返回st1从第m字符开始,st2第n次出现的位置,m及n的缺省值为1 例: 1. select initcap('THOMAS'),initcap('thomas') from test; initca initca ------ ------ Thomas Thomas 2. select concat('abc','def') "first" from test; first ----- abcdef 3. select 'abc'||' '||'def' "first" from test; first ----- abc def 4. select lpad(name,10),rpad(name,5,'*') from test; lpad(name,10) rpad(name,5,'*') ------------ ---------------- mmx mmx** abcdef abcde 5. 去掉地址字段末端的点及单词st和rd select rtrim(address,'. st rd') from test 6. select name,replace(name,'a','*') from test; name replace(name,'a','*') ---- --------------------- great gre*t 7. select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test; a b ------- ------- bald bear bearisol 8. select name,instr(name,' ') a,instr(name,' ',1,2) b from test; name a b ------- -------- --------- li lei 3 0 l i l 2 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%转换函数:nvl(m,n) 如果m值为null,返回n,否则返回mto_char(m[,fmt]) m从一个数值转换为指定格式的字符串fmt缺省时,fmt值的宽度正好能容纳所有的有效数字 to_number(st[,fmt]) st从字符型数据转换成按指定格式的数值,缺省时数值格式串的大小正好为整个数附: to_char()函数的格式: --------------------------------- 符号 说明 --------------------------------- 9 每个9代表结果中的一位数字 0 代表要显示的先导0 $ 美元符号打印在数的左边 L 任意的当地货币符号 . 打印十进制的小数点 , 打印代表千分位的逗号 --------------------------------- 例:1. select to_number('123.45')+to_number('234.56') form test; to_number('123.45')+to_number('234.56') ---------------------------------------- 358.01 2. select to_char(987654321) from test; to_char(987654321) ------------------ 987654321 3. select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(9874321,'$9,999,999') c from test; a b c ------- ---------- ----------- $123 $54,321 $9,874,321 4. select to_char(1234.1234,'999,999.999') a,to_char(0.4567,'999,999.999') b,to_char(1.1,'999,999.999') from test; a b c --------- ---------- ------------ 1,234.123 .457 1.100 --------------------------------------------------------------------------------分组函数:avg([distinct/all] n) 列n的平均值count([all] *) 返回查询范围内的行数包括重复值和空值count([distinct/all] n) 非空值的行数max([distinct/all] n) 该列或表达式的最大值min([distinct/all] n) 该列或表达式的最小值stdev([distinct/all] n) 该列或表达式的标准偏差,忽略空值sum([distinct/all] n) 该列或表达式的总和variance([distinct/all] n) 该列或表达式的方差,忽略空值 --------------------------------------------------------------------------------日期函数: >add_months(d,n) 日期d加n个月last_day(d) 包含d的月份的最后一天的日期month_between(d,e) 日期d与e之间的月份数,e先于dnew_time(d,a,b) a时区的日期和时间d在b时区的日期和时间next_day(d,day) 比日期d晚,由day指定的周几的日期sysdate 当前的系统日期和时间greatest(d1,d2,...dn) 给出的日期列表中最后的日期least(d1,k2,...dn) 给出的日期列表中最早的日期to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期附:日期格式:--------------------------------格式代码 说明举例或可取值的范围--------------------------------DD 该月某一天 1-3 DY 三个大写字母表示的周几 SUN,...SAT DAY 完整的周几,大写英文 SUNDAY,...SATURDAY MM 月份 1-12 MON 三个大写字母表示的月份 JAN,...DEC MONTH 完整 JANUARY,...DECEMBER RM 月份的罗马数字 I,...XII YY或YYYY 两位,四位数字年 HH:MI:SS 时:分:秒 HH12或HH24 以12小时或24小时显示 MI 分 SS 秒 AM或PM 上下午指示符 SP 后缀SP要求拼写出任何数值字段 TH 后缀TH表示添加的数字是序数 4th,1st FM 前缀对月或日或年值,禁止填充---------------------------------例:1. 下一个周五的日期 select next_day(sysdate,6) from test; 2. 两个月前的今天的日期 select add_months(sysdate,-2) from test;
posted @
2007-09-28 18:00 jadmin 阅读(66) |
评论 (0) |
编辑 收藏
壹.呤红篇(红搂梦十二支曲)---一.呤
<红搂梦>"引子"
1.开辟鸿蒙情种生,情浓风月奈何天.愚衷谁遣翻添剧,悼玉悲金尘世缘.
2.身心物否奈何天,忏悔情场曲解言.势溃利崩今世恨,四家结局尽哀怜.
3.十二曲情绝可怜,红搂梦引泪涟涟.悲哀寂寞愤愁极,误尽韶华多少年.
4.一部红搂千古恨,支支曲调诉衷纭.人寰无极因何故,苦乐酸甜年复年.
5.兴尽悲来过后哀,人生结局使人骇.红颜艳艳天娇慧,误入情场悔不该.
壹.呤红篇(红搂梦十二支曲)---二.呤"终身误"
1.青根山峰顽石珍,灵河仙草绛珠身.相逢总是天真对,梦里难忘心里人.
2.人说宝钗金玉缘,难忘竟是绛珠仙.阴差阳错终生苦,换栋偷梁终恨天.
3.正统规身愿勿违,背经叛道自成其.婚姻自主难能贵,封建其时误尽余.
4.移花接木王熙风,毁稿焚诗肠断时.鼓里良缘原是梦,醒来恸哭吊灵悲.
5.卿卿我我忆当时,泪落荷锄花葬之.共读西厢曾几日,瑶琴不见实堪悲.
壹.呤红篇(红搂梦十二支曲)---三.呤"枉凝眉"
1.仙葩闻苑惜芳华,美玉无瑕证卞家.若说奇缘真不假,为何偏遇此奇葩.
2.若说奇缘偏遇她,相逢心事话虚差.空劳牵挂空嗟讶,水里月光镜里花.
3.万千心事从何诉,雁去燕来几度春.正值飞红花逝水,琼楼几度忆亲人.
4.凝眉却是缘何事,屡屡诗成咏美人.一个空劳一个挂,天阶徒自看星辰.
5.凝眉柢事欠情亏,我亦痴情大觉非.试问眼中多少泪,春流到夏几多回.
6.凝眉深处忆非非,愁去愁来总自痴.叛逆道同同建爱,真心纯洁自无亏.
7.婚姻政治互相谋,家世相同门户投.儿女同行难遂愿,终生悔恨感其由.
8.王氏夫人熙风诡,大权操在伊心怀.爱情从此成悲剧,落入空门宝玉乖.
9.绛珠仙草黄泉赴,频吊灵魂泪不干.遗恨终生何所谓,鼓钟经卷透心寒.
10.枉自凝眉千百度,何心何意竟何之.何年何月花飞际,何地何天相去随.
壹.呤红篇(红搂梦十二支曲)---四.呤"恨无常"
1.荣华正茂赋青春,燕舞莺歌彩蝶频.烈火烹油大有得,鲜花着锦德妃珍.
2.珍珠宝玉嵌玲珑,忧似黄莺囚入笼.统治集团为己利,娇身姿艳荐皇宫.
3.贾府之门有靠山,仕途官场好售奸.回家之日荣华极,那个不惜天府攀.
4.德才贤孝德贤妃,风藻尚书女史稀.荣府高堂贵显极,大观园耀乐何之.
壹.呤红篇(红搂梦十二支曲)---五.呤"分骨肉"
1.才自清明志自高,探春智慧胜诸曹.清风明月常相咏,调理家常总自豪.
2.大厦将倾欲补天,祗缘尘世世情颠.身居琼阁有鲲志,欲出人头地涌先.
3.封建末时万事非,狂澜欲挽费心机.闺中贤淑天真女,经世奇才才德施.
4.一年容易又秋风,翠袖天寒易至冬.欲假他山诚不易,皆因自古有穷通.
5.自古穷通何有定,悲欢离合岂无缘.命途多舛逢遭遇,天假前因作镜悬.
6.虫鱼门户自良家,秋月春风度度华.远适他方终是恨,东皇误嫁悔何差.
7.东风无力百花斜,蜂蝶有心逐丽华.雨雨风风谁作主,生非薄命不为花.
8.各自纷飞奈若何,分奔离析感磋跎.心机费尽空捞月,潦倒乾坤我泣歌.
9.一帆风顺路三千,骨肉分离痛故国.但愿爷娘莫念女,平安各保莫牵连.
10.山水遥迢奴去也,身神消损误残年.人生离合竟如此,目断山高各一天.
壹.呤红篇(红搂梦十二支曲)---六.呤"乐中悲"
1.史氏湘云命苦殃,生来从小令双亡.家虽富贵谁人养,史鼎叔家爱不香.
2.春风秋月等闲度,儿女情怀未系将.月貌花颜姿夭夭,天真烂漫意情芳.
3.花宫月貌意情芳,咏月呤诗桃李香.最是撩人心绪处,栏杆独倚费思量.
4.霁月风光照玉堂,性情豪爽度宏量.天真妖冶临风际,花欲言兮玉欲香.
5.天真窕窈自天香,如愿东床如意郎.你我卿卿天比翼,前程地久与天长.
6.老天为啥太荒唐,如意郎君早夭亡.天不由人何惨酷,年年月月泪双行.
7.父母双亡夫夭亡,飘零花落水随将.贾家亲戚虽名府,寄以斯身无别望.
8.身世坎坷命自伤,途穷湘水固湘江.多磨好事终难得,浮落高唐散雾茫.
9.磋跎身世感沧桑,变换无穷恨命殃.泡影浮云何足虑,地天日月自消长.
10.天地无仁残且酷,日无光彩月偏阴.鲜花虽美纷纷坠,满地残英任雨淋.
壹.呤红篇(红搂梦十二支曲)---七.呤"世难容"
1.窈窕身材如女仙,月宫有意任回旋.身居府院繁华处,大厦红楼梦好天.
2.仕宦之家身世贤,才华出众赛神仙.天生孤僻人言鲜,气质如兰情意绵.
3.质本为兰气洁馨,妙玉正是女娇星.他生未卜今生愿,落人红尘情惜惺.
4.过分净洁俗凡嫌,高尚情操人妒贤.世时茫茫纷乱仄,当歌当泣诉琴弦.
5.红尘总是老红尘,辜负华年绰约身.世道斯时多混浊,仙妹转眼变庸人.
6.瞬息之间繁转湮,当时社会太私夤.妙玉本是天真女,落入尼庵避世尘.
7.青灯一盏诵经频,人世无闻修后因.何必王孙公子叹,再生梦里化真人.
8.碌碌红尘违尔愿,淖污畏陷早抽身.佛门静地空空也,超脱凡尘净度贫.
9.无作无为度此身,天真红粉变尼人.荣华富贵如尘土,喜怒乐哀无别论.
10.仕宦之家小姐身,穷途潦倒有原因.逃禅虽属归真法,净土难能净洁氤.
11.昔时之事莫今量,消极何言没有方.如若尔身值此世,尔能展法度身芳.
壹.呤红篇(红搂梦十二支曲)---八.呤"喜冤家"
1. 何喜冤家冤恨长,中山狼本狠心狼.贪而无厌居心险,兽面蛇心黑肚肠.
2.趋炎附势恶如魔,残暴荒淫罪孽多.可恨恶狼孙绍祖,天仙娇女吞泥窝.
3.繁华四族已倾秃,高筑债台难活之.胝用迎春作抵押,鲜花坠入污泥溪.
4.如花似玉天娇女,落入兽巢命陷沦.薄命如斯终古恨,侯门艳质化灰尘.
5.迎春命苦归山狼,越想越思哭断肠.丽质天生遭兽污,呜呼一命付汪洋.
6.法外逍遥孙绍祖,害人罪恶贾包之.骄奢淫佚寻常事,公辅千金作贱妓.
7.负义忘恩孙绍祖,祖冤祖孽统乘之.寻欢作乐污多女,害命贪财胜虎豹.
8.芳魂艳魄剧悠悠,害人黄泉恨不休.昔日恩由全不问,恩人当作是冤仇.
9.迎春误入冤家孽,不了深仇众恨之.天否无睛人不管,冤冤怨怨报何为.
10.人世偏多此恶官,胡为乱作喜欢欢.皇朝大厦将倾倒,罪孽深深后人寒.
posted @
2007-09-28 16:45 jadmin 阅读(190) |
评论 (0) |
编辑 收藏
Struts2 发布已经有一段时间了。
(http://struts.apache.org/downloads.html)
最近正在做的项目已经到了尾声,利用这段空闲的时间,我试用了一下Struts2。
跟Struts1 相比,Struts2 做了不少改变,例如:Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象,具体可以参考apache官方网站。
http://struts.apache.org/2.0.6/index.html
我的感觉是Struts2变的更加灵活了。
好,既然是学习,Hello World 程序是必不可少的。
第一步,先看看系统要求:
Platform Requirements
Struts 2 requires
Servlet API 2.4
JSP API 2.0
Java 5
更具体系统要求可以在文档说明中找到。
第二步,了解如何部署Struts2程序。
我手上没有支持Struts2的IDE所以只有自己多花点力气了。
在以下链接中可以找到部署Struts2程序的三种方法:
http://struts.apache.org/2.0.6/docs/ready-set-go.html
1. Use the blank template (在struts-2.0.6-all.zip)
2. run the Maven archetype
3. just setup a web infrastructure from scratch
我用了第三种方法。
http://struts.apache.org/2.0.6/docs/simple-setup.html 这个链接上面说的很明白。主意需要库,多了或者少了都会出问题。
我就试过把struts-2.0.6-all.zip包里边的lib全部拷贝过去,结果在tomcat启动的过程中出现一下错误:
严重: Error filterStart
查看tomcat日志,消耗了不少时间终于排除了问题。
可能是里边的一些plugin包引起的,以后在慢慢研究怎么回事。
好了,按照simple-setup.html中的说明把程序部署好。部署好之后的目录结构如下:
struts2
├─META-INF
│ MANIFEST.MF
│
├─WEB-INF
│ │ web.xml
│ │
│ ├─classes
│ │ │ struts.xml
│ │ │
│ │ └─org
│ │ └─sen
│ │ └─hello
│ │ HelloWorld.class
│ │
│ └─lib
│ antlr-2.7.2.jar
│ commons-beanutils-1.6.jar
│ commons-chain-1.1.jar
│ commons-logging-1.0.4.jar
│ commons-validator-1.3.0.jar
│ freemarker-2.3.8.jar
│ ognl-2.6.11.jar
│ oro-2.0.8.jar
│ struts2-core-2.0.6.jar
│ xwork-2.0.1.jar
│
└─hello
HelloWorld.jsp
【注】我这个程序跟http://struts.apache.org/2.0.6/docs/hello-world.html上面的Hello world 是一样的,只是改了包名。
启动tomcat,成功了^_^。
因为我用的开发工具试myEclipse 于是,我便试着把这个项目迁移到eclipse中去
在eclipse 中新建项目Struts2 然后把所有的文件复制过去。最后目录结构为:
struts2
│ .project
│ .mymetadata
│ .classpath
│
├─src
│ │ struts.xml
│ │
│ └─org
│ └─sen
│ └─hello
│ HelloWorld.java
│
├─WebRoot
│ ├─WEB-INF
│ │ │ web.xml
│ │ │
│ │ ├─lib
│ │ │ struts2-core-2.0.6.jar
│ │ │ ...
│ │ └─classes
│ │ │ struts.xml
│ │ │
│ │ └─org
│ │ └─sen
│ │ └─hello
│ │ HelloWorld.class
│ │
│ ├─META-INF
│ │ MANIFEST.MF
│ │
│ └─hello
│ HelloWorld.jsp
│
├─.myeclipse
└─.settings
...
myEclipse 可以正确发布,但是启动的时候出现问题。
java.lang.UnsupportedClassVersionError: org/apache/struts2/dispatcher/FilterDispatcher (Unsupported major.minor version 49.0)
经过检查发现原因所在:我elipse的编译器虽然设成了jdk1.5,但是eclipse启动tomcat的时候还是用之前设的jdk1.4。把启动在myeclipse的application server下面找到tomcat并且把jdk设为jdk1.5便ok了。
上面是我在试用struts2的时候遇到的一点波折。
环境搭好了,剩下的就是抓时间应该深入学习一下。
posted @
2007-09-27 21:32 jadmin 阅读(83) |
评论 (0) |
编辑 收藏
在这篇文章中,将为大家介绍一种基于JSP且灵活有趣的技术,那就是JSTL.JSTL全称为Java Server Pages Standard Tag Library.虽然JSP已经变的非常流行,但JSTL在基于SQL数据库的简单、快速的前后台开发中还是没有被广泛的应用。一旦你了解了JSTL,你就会了解到它的优点,并发现在你作为程序员的日常工作中,它已经被应用到了很多方面。我这里假设你已经熟悉HTML,能理解基本的SQL语句,和Jsp的基础知识。因为下面的内容要涉及到这些知识。
JSTL是一个已经被标准化的标记库集合,她支持迭代、条件、XML文档的解析,国际化,和利用SQL与数据库交互的功能。起初,JSTL规范一直由JCP(Java Community process program)组织下的JSR #52 发展完善,"JCP肩负着Java 技术发展的重任"--官方网站这样评价。JCP作为一个开放性的组织,他同时吸收正式的会员和非正式会员.JCP对于Java技术规范的形成与发展发挥了重要的主导作用。JSTL主要包括四个基本部分的标记库:Core,XML,国际化,和对SQL的支持。由于这篇文章的主要是以其中的SQL部分的应用来快速了解JSTL,所以我们这篇文章只介绍了 Core和SQl标签库的一些基本功能。
这项技术简单而且功能强大,足以和PHP、ColdFusion一较高下.他在拓展Java的应用领域方面有足够的能力,这些领域不只包括大型的可再升级的Web应用程序,对于仅拥有简单主页的Web程序一样没问题。这允许你在建立站点的时候可以避免那些经常考虑的XML的集成和与数据库的连接。正如我刚才提到的一样,JSTL的关键点就是简单易用。还有,那就是JSTL是基于JSP构建的, 他允许我们使用所有的Java技术,这一点我们有必要记住。
开始之前,我们需要弄清楚怎样才能运行JSTL.由于是基于JSP技术的,所以我们运行它就需要一个能够编译JSP的容器,这里我们使用免费的JSP容器:TOMCAT(http://jakarta.apache.org/tomcat/index.html).至于如何安装这个产品已经超出了本文所讲述的范围。毫无疑问,这个软件产品现在已经很普及了,而且关于如何安装的文档资料也是很多。这里假设您已经安装并成功配置了这个容器,你只需再安装JSTL运行所需文件即可,它可以从这里下载http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html你不需要真正的安装它,只需要将其中的.JAR文件包含到你的应用程序的WEB-INF/lib目录下即可,稍后我会具体说到该怎么做.
因为我们要在一个支持标准SQL的数据库上运行程序,你需要在你的电脑上安装有一个数据库。数据库的类型有许多种,这里我选择了MySql。我之所以选择他的原因在于首先,我们需要展示JSTL对于构造简单快速的应用程序领域所起的作用,同时能和一直在这个领域处于主导地位的PHP+MySql有所比较;第二点那就是MySql是可以免费下载并包含有一个针对JAVA的JDBC驱动.总之,为了使用下面的例子,你需要下载一个MYSQL服务器(http://www.mysql.com/products/mysql/index.html; MySql Connector/J JDBC驱动程序http://www.mysql.com/products/connector-j/index.html;还有就是MySql control center http://www.mysql.com/products/connector-j/index.html),这个产品可以让你非常容易的操作管理Mysql数据库文件。全部下载完成后,你需要安装mysql和mysql Control Center。另外还有就是mysql的JDBC驱动需要放到你的web应用程序中的/Web-INF/lib目录中。
在创建程序代码之前,你需要创建并填写数据库表。关于这方面的主题文章也相当广泛,具体如何操作超出了本文的范围。这里我推荐给你我们上面提及的一个可视化的管理工具 MySQL Control Center.你可以用他来创建一个用来运行程序的测试用户,数据库以及创建一个测试表,并填写若干记录。关于登陆名及密码 数据库名称这些配置环境参数,你应该记住他们,稍后需要应用到我们的代码中。
现在,你就可以准备创建自己的第一个JSTL应用程序了它需要我们做下面一些事情:
整个实例程序代码包括两个文件Hello.jsp和 Continue.jsp
Hello.jsp文件允许你输入数据库名称、登陆名称、登陆密码、数据库表名。Continue.jsp:接受Hello.jsp中的数据信息并且连接数据库,并对数据库中的表执行一个Select请求.
下面是这个系统所有的代码文件,我将逐一进行解释。这些代码相当简单,对于代码的结构,我相信你即使没有我的解释你也能理解的.
1: <!-- Hello.jsp -->
2: <html>
3: <head>
4: <title>Hello</title>
5: </head>
6: <body bgcolor="#ffffff">
7: <h1>Please, enter all necessary information and click OK.</h1>
8: <form method="post" action="Continue.jsp">
9: <br>Your login to database:
<input type="text" name="login" size="15">
10: <br>Your password to database:
<input type="password" name="password" size="15">
11: <br>Your database name:
<input type="text" name="database" size="15">
12: <br>Your database table:
<input type="text" name="table" size="15">
13: <br><br><input type="submit" name="submit" value=" OK ">
14: </form>
15: </body>
16: </html>
(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)
上面就是所有Hello.jsp的源代码,很惊奇吧,他仅仅是纯粹的HTML代码,就这么简单,我想应该没有注释的必要了.我之所以将这些代码片段包含进文章中就是为了展示一下JSTL集成到那些需要快速扩充额外功能的HTML站点中是多么的简单.让我再为你展示一下Continue.jsp的全部代码,看过之后,你就会对 JSTL有些了解了。
1: <!-- Continue.jsp -->
2: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
3: <@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
4: <c:set var="h" value="localhost"/>
5: <c:set var="l" value="${param.login}"/>
6: <c:set var="p" value="${param.password}"/>
7: <c:set var="d" value="${param.database}"/>
8: <c:set var="t" value="${param.table}"/>
9: <html>
10: <head>
11: <title>Continue</title>
12: </head>
13: <body bgcolor="#ffffff">
14: <sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://${l}/${d}?user=${u}&password=${p}"/>
15: <sql:query var="result">
16: SELECT * FROM <c:out value="${t}"/>
17: </sql:query>
18: <c:forEach var="row" items="${result.rowsByIndex}">
19: <c:out value="${row[0]}"/> <br>
20: </c:forEach>
21: </body>
22: </html>
(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)
posted @
2007-09-27 21:31 jadmin 阅读(47) |
评论 (0) |
编辑 收藏
这是很头痛的问题,一直都是在困扰着我们。我有一个不算简单也不算难的方法,这是我一直在用的方式。
1、建立一个类,包括一个格式将中文转换为ISO8859-1编码的方法:
publicclass Format2Chinese {
public Format2Chinese() {
}
public String format2IS08859(String str) {
try {
if (str == null || str.trim().equals(""))
str = "";
else
str = new String(str.getBytes("ISO8859-1"));
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
}
2、你的bean里面这时就要加一些东西了,如下面这个简单的bean:
publicclass Leavemsg
{
public Leavemsg() {
}
//这个要加的,因为写入的时候我们不格式,写出的时候格式化
public Leavemsg(boolean format) {
this.format = format;
}
private String msg;
booleanformat = false; //用于确定是否将字符格式转换
Format2Chinese function = new Format2Chinese();
publicvoid setMsg(String msg) {
if (format) {
this.msg = function.format2IS08859(msg);
} else
this.msg = msg;
}
public String getMsg() {
return msg;
}
}
3、在用bean装数据的时候,这样声明:
Leavemsg msg=new Leavemsg(true); 然后其它的操作都是一样的,就OK了。
这时页面显示中文的时候就不会出问题了,在JSP页面里这可以这样,用该类做包装得到的内容。
posted @
2007-09-27 20:27 jadmin 阅读(61) |
评论 (0) |
编辑 收藏
以下假设jad.exe在c:\java目录下
一、基本用法
Usage: jad [option(s)] <filename(s)>
直接输入类文件名,且支持通配符,如下所示。
c:\java\>jad example1.class
c:\java\>jad *.class
结果是将example1.class反编译为example1.jad。将example1.jad改为example1.java即得源文件。
posted @
2007-09-27 12:28 jadmin 阅读(62) |
评论 (0) |
编辑 收藏
del/q/s work\*.*
posted @
2007-09-27 10:48 jadmin 阅读(131) |
评论 (0) |
编辑 收藏