??xml version="1.0" encoding="utf-8" standalone="yes"?>
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=d9d1668c0b162f26d115a49e0b308e4f
deerjet src.zip
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c859c9a30c5f19e2732255e81a4f0c36
jQueryAPI-100214.chm
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c64a572a16f169ac6db829a3122c4279
hibernate_annotations.pdf
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=88bd4e31848fda5ca2e65b6fc19df73f
hibernate_reference.pdf
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=603986150b7056ce617289370197ea9a
HQL与Criteria对照.pdf
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c2805f9d49171f6165baa528a29774c7
oracle~程艺术.pdf
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=0c39f09f81f674ef67016482a224a025
_Noracle10g pl_sql~程.pdf
http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=455bb7bbfeff510ee66acafe6c8f035b
throws Exception {
Assert.notNull(pageModel);
DetachedCriteria dc = DetachedCriteria.forClass(CrmWarning.class);
/*
* d查询条g
* ?dc.add(Restrictions.like("key", "%"+pageModel.getCondition("key")+"%"));
*
* */
if (null != pageModel.getCondition("warnLevel")) {
dc.add(Restrictions.eq("warnLevel", pageModel.getCondition("warnLevel")));
}
if (StringUtils.isNotBlank((String)pageModel.getCondition("detail"))) {
dc.add(Restrictions.like("detail", "%"+pageModel.getCondition("detail")+"%"));
}
if (StringUtils.isNotBlank((String)pageModel.getCondition("warnDate"))) {
/*
* warnDate格式是yyyy-MM-ddQ这里改成查询这一天的预警
* Restrictions.sqlRestriction()允许写原生sql的方式完成特D需求,如下
* */
dc.add(Restrictions.sqlRestriction("to_char(time_start,'yyyy-MM-dd') = '" + pageModel.getCondition("warnDate") + "'"));
}
if (null != pageModel.getCondition("templateId")) {
/*
* q里的templateId是模板的主键id,查询时应该{换成模板对象
* */
CrmWarnTemplate warnTemplate = new CrmWarnTemplate();
warnTemplate.setTemplateId((Long)pageModel.getCondition("templateId"));
dc.add(Restrictions.eq("crmWarnTemplate", warnTemplate));
}
dc.addOrder(Order.asc("crmWarnTemplate"));
dc.addOrder(Order.desc("timeStart"));
pageModel.setDateList(warningDao.query(dc, pageModel.getFirstNote(), pageModel.getNumInPage()));
pageModel.setTotal(warningDao.count(dc));
return pageModel;
}
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;
import org.springframework.dao.DataAccessException;
import com.jl.dao.baseDao.GenericDao;
import com.jl.dao.bookplatform.ProductItemDao;
import com.jl.entity.bookplatform.CrmProduct;
import com.jl.entity.bookplatform.CrmProductItem;
import com.jl.entity.bookplatform.ProductItemConfig;
public class ProductItemDaoImpl extends GenericDao<CrmProductItem, Long> implements ProductItemDao {
public List<ProductItemConfig> getProductItemConfigs(Long productId, Long planetypeId) throws DataAccessException{
String sql = "select chi.charge_item_id \"chargeItemId\"," +
" chi.charge_item \"chargeItem\"," +
" chi.charge_unit \"chargeUnit\"," +
" cpi.product_id \"productId\"," +
" cpi.product_item_id \"productItemId\"," +
" cpi.sale_planetype_id \"salePlanetypeId\"," +
" cpi.inland_price \"inlandPrice\"," +
" cpi.outland_price \"outlandPrice\"" +
" from (select * from crm_charge_item chi2 where chi2.if_regular = 1) chi left join crm_product_item cpi" +
" on cpi.charge_item_id = chi.charge_item_id " +
" and cpi.product_id = ?" +
" and cpi.sale_planetype_id = ?" +
" order by chi.charge_item_id";
Session session = getSession();
Query query = session.createSQLQuery(sql)
.addScalar("chargeItemId", Hibernate.LONG)
.addScalar("chargeItem",Hibernate.STRING)
.addScalar("chargeUnit",Hibernate.STRING)
.addScalar("productId",Hibernate.LONG)
.addScalar("productItemId",Hibernate.LONG)
.addScalar("salePlanetypeId",Hibernate.LONG)
.addScalar("inlandPrice",Hibernate.DOUBLE)
.addScalar("outlandPrice",Hibernate.DOUBLE)
.setResultTransformer(Transformers.aliasToBean(ProductItemConfig.class))
.setParameter(0, productId)
.setParameter(1, planetypeId);
List<ProductItemConfig> configs = query.list();
return configs;
}
public List<CrmProductItem> getProductItem(CrmProduct product) throws DataAccessException {
String hql = "from CrmProductItem cpi where cpi.crmProduct = ?";
Session session = getSession();
Query query = session.createSQLQuery(hql).setParameter(0, product);
List<CrmProductItem> items = query.list();
return items;
}
public void copy(Long productId_dest,Long productId_orig,String createMan) throws DataAccessException {
String sql = "insert into crm_product_item " +
" select hibernate_sequence.nextval," +
" ?," +
" cpi.charge_item_id," +
" cpi.sale_planetype_id," +
" cpi.inland_price," +
" cpi.outland_price," +
" ?," +
" sysdate" +
" from crm_product_item cpi" +
" where cpi.product_id = ?";
Session session = getSession();
Query sqlQuery = session.createSQLQuery(sql)
.setParameter(0, productId_dest)
.setParameter(1, createMan)
.setParameter(2, productId_orig);
sqlQuery.executeUpdate();
}
}
cd %CATALINE_HOME%/bin
set JPDA_ADDRESS=8787
set JPDA_TRANSPORT=dt_socket
set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
startup
需要远E调试时从tomcat_debug.bat启动?br />
2Qeclipse调试
选择菜单"Run>Debug..."Q弹出窗口里右键点击"Remote Java Application"Q选择"New"Q如图:
点击"Debug"按钮Q开始远E调试,当程序运行到断点ӞEclipse会捕获到?br />
有关普通java app的远E调试可以参考http://blog.chenlb.com/2010/07/eclipse-remoting-debug-java-app.html
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
jQuery(function(){
jQuery.validator.methods.compareDate = function(value, element, param) {
//var startDate = jQuery(param).val() + ":00";补全yyyy-MM-dd HH:mm:ss格式
//value = value + ":00";
var startDate = jQuery(param).val();
var date1 = new Date(Date.parse(startDate.replace("-", "/")));
var date2 = new Date(Date.parse(value.replace("-", "/")));
return date1 < date2;
};
jQuery("#form1").validate({
focusInvalid:false,
rules:{
"timeStart":{
required: true
},
"timeEnd": {
required: true,
compareDate: "#timeStart"
}
},
messages:{
"timeStart":{
required: "开始时间不能ؓI?/span>"
},
"timeEnd":{
required: "l束旉不能为空",
compareDate: "l束日期必须大于开始日?"
}
}
});
});
//-->
</SCRIPT>
</HEAD>
<BODY>
<form id="form1" name="form1" method="post" action="demo.html">
<p>timeStart:
<input name="timeStart" type="text" id="timeStart" value="2011-02-17 10:00:00"> yyyy-MM-dd HH:mm:ss
</p>
<p>timeEnd:
<input name="timeEnd" type="text" id="timeEnd" value="2011-02-17 9:00:00"> yyyy-MM-dd HH:mm:ss
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
</BODY>
</HTML>
ȝQ?br />
当NLS_CHARACTERSET=AL32UTF8ӞQ?br />
NLS_LENGTH_SEMANTICS=BYTEӞ一个汉字代表三个字?br />
NLS_LENGTH_SEMANTICS=CHARӞ一个汉字代表一个字?br />
当NLS_CHARACTERSET=US7ASCIIӞ字符集ؓ单字节)
NLS_LENGTH_SEMANTICS=BYTEӞ一个汉字代表两个字?br />
NLS_LENGTH_SEMANTICS=CHARӞ一个汉字代表两个字?/p>
现象:
select * from nls_database_parameters;
…. …………..
NLS_CHARACTERSET AL32UTF8
…..
NLS_LENGTH_SEMANTICS BYTE
….
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.4.0
SQL> alter session set nls_length_semantics='BYTE';
SQL> create table nls_byte(c1 varchar2(7));
SQL> insert into nls_byte values('试?);
insert into nls_byte values('试?)
ORA-12899: ?"SYS"."NLS_BYTE"."C1" 的值太?(实际? 9, 最大? 7)
SQL> insert into nls_byte values('试a');
1 row inserted
SQL> select table_name,column_name,t.DATA_TYPE,t.DATA_LENGTH,t.CHAR_USED from user_tab_columns t where table_name='NLS_BYTE';
TABLE_NAME COLU DATA_TYP DATA_LENGTH CHAR_USED
---------- ---- -------- ----------- ---------
NLS_BYTE C1 VARCHAR2 7 B
NLS_LENGTH_SEMANTICS allows you to specify the length of a column datatype in terms of CHARacters rather than in terms of BYTEs. Typically this is when using an AL32UTF8 or other varying width NLS_CHARACTERSET database where one character is not always one byte. While using CHAR semantics has as such no added value in a 7/8 bit characterset it's fully supported so any application code / table setup using CHAR can also be used in a 7/8bit characterset like US7ASCII/WE8MSWIN1252.
This parameter is a 9i (and up) feature and is not available in older releases
译q来是:q个参数允许列的数据单位设为字W而不是byte.q个问题会在字符集设为UTF8的时候出? 此参数在9i以上版本有效.
NLS_LENGTH_SEMANTICS 讄.
1. NLS_DATABASE_PARAMETERS中的值是在数据库创徏的时候确定的,一般都为BYTE
2. 此参数可以以 “ALTER SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR scope=both”方式修改,但是需要重启数据库才能生效.
3. 也可?#8221; ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR”使对当前session生效.
4. 此参数可以在10G以上版本?在环境变量或注册表中讄(注意需要大?,讑֮后从当前客户端启动的所有会话都采用新的取?
5. 修改后只Ҏ建的列生?对于已有的列没有作用
6. 新徏或升UDB时用BYTE,否则XDB或dba_tables会出现问?
7. NLS_LENGTH_SEMANTICS对sys用户下的对象无效.
8. 如果对于7/8bit的字W集,设ؓbyte/char意义不大,因ؓ无论是char和byte都对应一个byte.
试:
一.在当前session中修Ҏ参数
SQL> alter session set nls_length_semantics='char';
Session altered
SQL> create table nls_char(c1 varchar2(7),c2 varchar2(7));
Table created
SQL> desc nls_char
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
C1 VARCHAR2(7) Y
C2 VARCHAR2(7) Y
SQL> insert into nls_char values('试?,'试试试');
1 row inserted
如果对于alter system,效果是一L
?对于已经存在的表,
SQL> desc nls_byte
Name Type Nullable Default Comments
---- ---------------- -------- ------- --------
C1 VARCHAR2(7 BYTE) Y
SQL> alter table nls_byte modify c1 varchar2(7 char);
Table altered
SQL> desc nls_byte
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
C1 VARCHAR2(7) Y
SQL> insert into nls_byte values('试?);
1 row inserted
1. exp/imp : 不能直接导入,因ؓ会采用source table的徏表方式在target db里徏?即目标库设的gؓchar.
*可以预先在目标库中以char方式
*然后导入,指定参数ignore=y
2. Alter table
alter table "<owner>"."<table>" modify "<column>" char (10 char);
创徏脚本,修改列设?
?
Bug-3611750, ora-01450 online rebuild of index fails, 可以在重建烦引前指定byte, 10.2.0.5以上已经修复
Bug 1488174 UNICODE: ALTER SYSTEM SET NLS_LENGTH_SEMANTICS DOESN'T
TAKE EFFECT, 用此语句修改?实际上不起作?需要重启才能生? 但是如果用alter session方式x生效,不用重启.
q一步测?在另一个字W集设ؓus7ascii的DB讄此参?/p>
SQL> select * from nls_database_parameters
6 NLS_CHARACTERSET US7ASCII
SQL> alter session set nls_length_semantics=byte;
Session altered.
SQL> create table nls_byte(c1 varchar2(7));
Table created.
SQL> insert into nls_byte values('试试');
insert into nls_byte values('试试')
ERROR at line 1:
ORA-12899: value too large for column "TEA"."NLS_BYTE"."C1" (actual: 8,
maximum: 7)
SQL> desc nls_byte
Name Null? Type
-------------------------------
C1 VARCHAR2(7)
SQL> alter session set nls_length_semantics=char;
Session altered.
SQL> create table nls_char(c1 varchar2(7));
Table created.
SQL> insert into nls_char values('试试');
insert into nls_char values('试试')
ERROR at line 1:
ORA-12899: value too large for column "TEA"."NLS_CHAR"."C1" (actual: 8,
maximum: 7)
SQL> desc nls_char
Name Null? Type
----------------------------------------- -------- -------------------
C1 VARCHAR2(7)
可以看出,在字W集为单字节的情况下,无论取何?汉字都是以二个字节的方式存在?
因ؓ工作需要接触到ssoQ据知目前多?/span>sso使用耉?/span>cas实现Q且发现使用cas真的是很单就可以做出一个单点登录系l来Q?/span>casq提供丰富的扩展功能Q对于扩展功能日后再l细研究Q这里只使用cas做一?/span>hello world来记录本人的学习q程Q如有幸被高人看刎ͼq望指出弊病Q不吝赐教?/span>
在?/span>cas之前最好对数字证书有所了解Q不了解也没有关p,跟着我的步骤也一样可以跑的通?/span>
需要的文gQ?/span>
ü Jdk6
ü Tomcat
ü cas-server-3.3.2
ü cas-client-3.1.9
下面?/span>keytool命o的一些常用方法,先在q里认识一下它们,一会儿会用的到?/span>
使用keytool命o生成密钥?/span>
keytool -genkey -alias tomcat -keyalg RSA -dname "CN=pcma, OU=vanceinfo, O=vanceinfo, L=haidian, S=beijing, C=CN" -keystore c:"keystore5.jks
CNQ主机名
OUQ组l单?/span>
OQ组l?/span>
LQ地?/span>
SQ城?/span>
CQ国?br />
如果需要指定密钥有效期Q添?validity 365卛_Q单位是天,如:
keytool -genkey -alias tomcat -keyalg RSA -dname "xxxxx" -keystore xxxxx -validity 365
导出证书
keytool -export -file c:/server5.crt -alias tomcat -keystore c:"keystore5.jks
证书导入到客户?/span>jdk
keytool -import -keystore "D:"Java"jdk1.6.0_14"jre"lib"security"cacerts" -file c:/server5.crt -alias tomcat
从密钥库中删除指定别名的证书
keytool -delete -noprompt -alias tomcat -keystore E:"apache-tomcat-6.0.20_2"conf"keystore2.jks
查看密钥库中的证?/span>
keytool -list -v -keystore c:"keystore5.jks
使用keytool命o生成密钥库?/span>
配置%tomcat_home%/conf/server.xml?/span>tomcat支持SSL协议Qƈ指定密钥库?/span>
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystorePass="mashiguang"
keystoreFile="${catalina.home}/conf/keystore5.jks"/>
解压~?/span>cas-server-3.3.2-release.zip文gQ在modules目录里找?/span>cas-server-webapp-3.3.2.war文gQ这是一个做好了?/span>cas服务端,我们做的sso helloword可以直接使用Q只需?/span>cas-server-webapp-3.3.2.war改了个简单点的名字,?/span>cas.warQ然后部|到tomcat卛_?/span>
览器访?/span>https://pcma:8443/casQ如果打开昄的是cas默认的登录页面,则表C服务端已部|完毕?/span>
新徏两个web工程Q用于模拟单点登录系l中的客LQƈ?/span>cas-client-3.1.9"modules里的jar包放?/span>web工程lib目录下,是主要的?/span>cas-client-core-3.1.9.jar文gQ把spring2.5也放?/span>lib目录下?/span>
Web.xml文g
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/casContext.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 负责用户认证 -->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<!-- CAS login 服务地址-->
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://pcma:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>renew</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>gateway</param-name>
<param-value>false</param-value>
</init-param>
<!-- 客户端应用服务地址-->
<init-param>
<param-name>serverName</param-name>
<param-value>http://pcma:8081</param-value>
</init-param>
</filter>
<!--负责Ticket校验-->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>cas.validationfilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
casContext.xml文g
<?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="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter">
<property name="ticketValidator">
<ref bean="cas10TicketValidator"/>
</property>
<property name="useSession">
<value>true</value>
</property>
<!-- 客户端应用服务地址-->
<property name="serverName">
<value>http://pcma:8081</value>
</property>
<property name="redirectAfterValidation">
<value>true</value>
</property>
</bean>
<bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator">
<!-- q里参数?/span>cas服务器的地址-->
<constructor-arg index="0" value="https://pcma:8443/cas" />
</bean>
</beans>
新徏index.jsp文g
<body>
hello sso<br>
<a >sso2</a>q个地址是另外一台机器上?/span>sso客户?/span>
</body>
上面?/span>web.xml?/span>casContext.xml?/span>index.jsp是两个客L中的一个,另一个要Ҏ实际情况修改?/span>
最后不要忘记客L?/span>jdk要?/span>keytool命o导入证书文g?/span>
启动tomcatQ测试器讉Khttp://pcma:8081/ssoQ出?/span>casd面Q输入相同的用户名和密码卛_dQ登录成功后面自动跌{?/span>http://pcma:8081/ssoQ这时点击页面上?/span>sso2链接Q就可以自动dq蟩转到sso2应用?/span>
如果输入用户名密码后提示下面的异常,是因为部|客L?/span>jdk没有导入证书文g的原因?/span>
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
源码
http://www.aygfsteel.com/Files/mashiguang/sso.zip
其实可以让数据库自己计算排行榜,q把计算l果保存C个单独的表里去,q个表只用来保存排行榜的数据Q数据量很小Q然后所有的排行榜查询都?/span>selectq个表?/span>
计算排行榜的功能我们可以写成一个存储过E,但是排行榜的数据不是一成不变的Q还需要不时的调用q个存储q程才行Q?/span>oracle为我们提供了dbms_jobs?/span>
oracel dbms_jobs包可以提交作业到作业队列中,q个包中q提供其它一些函数管理以前提交的作业Q如对作业进行修攏V禁止或删除{操作?/span>
常用函数Q?/span>
submit()Q提交作业到作业队列?/span>
isumbit()Q?/span>
remove()Q从作业队列中删除作业?/span>
change()Q改变已有作业的参数?/span>
what()Q改变作业要执行的代码?/span>
next_date()Q改变作业下一ơ执行时间?/span>
interval()Q改变作业执行的旉间隔?/span>
broken()Q暂停执行作业?/span>
run()Q强制执行作业?/span>
最常用?/span>submit()函数Q?/span>
dbms_jobs.submit(
job out binary_integer,
what in varchar2,
next_date in date default sysdate,
interval in varchar default null,
no_parse in boolean default false,
instance in binary_integer default any_instance,
force in boolean default false
);
submit函数参数Q?/span>
jobQ作业的作业P是个输出参数Q所以调?/span>submit函数Ӟq个参数要指定一个已存在的变量?/span>
whatQ作业要执行的代码,一般是存储q程?/span>
next_dateQ下一ơ作业运行的日期?/span>
intervalQ?span style="color: red">作业执行的间隔时_q个参数默认值是nullQ?/span>也就?/span>what指定的代码只?/span>next_dateq一旉执行一ơ?/span>
no_parseQ默认值是falseQ当参数值是falseQ提交作业时对what指定的代码进行语法分析;当参数值是trueQ第一ơ运?/span>what指定代码时才q行语法分析?/span>
instanceQ指明运行作业的数据库实例?/span>
forceQ如果是true,instance可以是Q何正敎ͼ如果?/span>falseQ?/span>instance指定的实例必L在运行?/span>
CZQ?/span>
var jobno number;
begin
dbms_job.submit(:jobno,'p_xxx_taxis;',trunc(sysdate)+(18/24),'trunc(sysdate+1,''hh'')');--每天18Ҏ?/span>
commit;
end;
上面q段话要?/span> 命oH口 下运?/span>,如在pl/sql developer里面?/span>-->新键-->命oH口
q样׃在每天的18Ҏ行存储过E?/span>p_xxx_taxis。在我这?/span>p_xxx_taxis执行的是计算排行榜的d?/span>