Computerworld在对多位IT高管进行调查之后,得出了2012 最需要IT技能,不过由于调查范围不够大,可能会出现偏差,仅供参考。
1)编程及应用开发:需求从2010年的44%上升到2012年的61%。
2)项目管理:不仅仅管理人才监管项目,还需要洞察用户需求并转述给其他IT员工,包括需求日益增加的商业分析师。
3)服务台支持/技术支持:随着移动操作系统的发展,需求随之增加
4) 网络设计:这类需求部分归结于虚拟化及云计算的发展,相关人员最好具有虚拟系统及思杰系统经验的人。
5) 商务智能(Business Intelligence):这类需求大部分归因于企业日益将重心从节省成本转向技术投资。
6) 数据中心:虚拟化及云技术也排在其后
7) Web 2.0:围绕社交媒体的技术需求将会增加,Net,AJAX及PHP作关键后端技术,HTML,XML,CSS,Flash及Javascript作前端支持。
8) 安全:2010年需求为32%,现在有所下降,但由于日趋严重的安全问题,许多人又将此提到一个新的高度
9 )电信:对IP电话技术人员的需求也相当大,尤其是对Cisco IPCC电话中心系统熟悉的人。
posted @
2012-01-10 20:45 kylixlu 阅读(200) |
评论 (0) |
编辑 收藏
The Oracle TO_CHAR(datetime,
fmt)
function converts datetime values to a string in the format specified by
the fmt option.
MySQL has the DATE_FORMAT function that allows datetime values
converting to a string in the specified format.
SQLWays converts the Oracle TO_CHAR function to the MySQL DATE_FORMAT
function and converts elements of format string from Oracle to
corresponding specifier in MySQL as specified in the following table.
TABLE 56. Conversion of Oracle TO_CHAR(datetime) with format string to MySQL
Mapping of datetime format specifiers between MySQL and Oracle
|
MySQL
|
Oracle (independently from register)
|
Description
|
%a
|
DY
|
Abbreviated weekday name (Sun..Sat)
|
%b
|
MON
|
Abbreviated month name (Jan..Dec)
|
%D
|
-
|
Day of the month with English suffix (0th, 1st, 2nd, 3rd, etc.)
|
%d
%e
|
DD
|
Day of the month, numeric ((00..31) and (0..31))
|
%j
|
DDD
|
Day of year (001..366)
|
%m
%c
|
MM
|
Month, numeric ((00..12) and (0..12))
|
%M
|
MONTH
|
Month name (January..December)
|
%f
|
-
|
Microseconds (000000..999999)
|
%i
|
MI
|
Minutes, numeric (00..59)
|
%h
%I
%l
|
HH
HH12
|
Hour ((01..12) and (1..12))
|
%H
%k
|
HH24
|
Hour ((00..23) and (0..23))
|
%p
|
AM
PM
|
AM or PM
|
%r
|
-
|
Time, 12-hour (hh:mm:ss followed by AM or PM)
|
%S
%s
|
SS
|
Seconds ((00..59) and (0..59))
|
%T
|
-
|
Time, 24-hour (hh:mm:ss)
|
%u
|
WW
IW
|
Week (00..53), where Monday is the first day of week
|
%U
|
-
|
Week (00..53), where Sunday is the first day of week
|
%V
|
-
|
Week (01..53), where Sunday is the first day of week, used with %X
|
%v
|
WW
IW
|
Week (01..53), where Monday is the first day of week, used with %x
|
%W
|
DAY
|
Weekday name (Sunday..Saturday)
|
%w
|
-
|
Day of the week (0=Sunday .. 6=Saturday)
|
%X
|
-
|
Year for the week, where Sunday is the first day of the week, numeric 4
digits; used with %V
|
%x
|
-
|
Year for the week, where Monday is the first day of the week, numeric 4
digits; used with %v
|
%Y
|
YYYY
SYYYY
IYYY
|
Year, numeric, 4 digits
|
%y
|
YY
IYY
|
Year, numeric, 2 digits
|
-
|
J
|
Julian day; the number of days since January 1, 4712 BC.
|
-
|
Q
|
Quarter of year (1, 2, 3, 4; JAN-MAR = 1).
|
-
|
RR
|
Given a year with 2 digits:
· If the year is <50 and the last 2 digits of the current year are
>=50, then the first 2 digits of the returned year are 1 greater than
the first 2 digits of the current year.
· If the year is >=50 and the last 2 digits of the current year are
<50, then the first 2 digits of the returned year are 1 less than the
first 2 digits of the current year.
|
-
|
RRRR
|
Round year. Accepts either 4-digit or 2-digit input. If 2-digit,
provides the same return as RR. If you don't want this functionality,
then simply enter the 4-digit year.
|
-
|
W
|
Week of month (1-5) where week 1 starts on the first day of the month
and ends on the seventh.
|
-
|
SSSSS
|
Seconds past midnight (0 - 86399).
|
-
|
X
|
Local radix character.
|
-
|
Y,YYY
|
Year with comma in the position.
|
-
|
YEAR
SYEAR
|
Year, spelled out; "S" prefixes BC dates with "-".
|
-
|
YYY
|
3 digits of year.
|
-
|
Y
|
1 digit of year.
|
-
|
IY
|
2 digits of ISO year.
|
-
|
I
|
1 digit of ISO year.
|
-
|
AD
A.D.
|
AD indicator with or without periods.
|
-
|
BC
B.C.
|
BC indicator with or without periods.
|
-
|
CC
SCC
|
One greater than the first two digits of a four-digit year; "S" prefixes
BC dates with "-".
For example, '20' from '1900'.
|
-
|
D
|
Day of week (1 - 7).
|
-
|
A.M.
P.M.
|
Meridian indicator with periods.
|
-
|
TZH
|
Time zone hour.
|
-
|
TZM
|
Time zone minute.
|
-
|
TZR
|
Time zone region information.
|
-
|
RM
|
|
TABLE 57. Example of Conversion
posted @
2010-04-22 17:00 kylixlu 阅读(1194) |
评论 (0) |
编辑 收藏
近日在项目中写了个OPhone 调用Webservice的工具类,主要是使用了KSoap2来实现的,代码如下:
1package com.ictehi.ophone.util;
2
3import java.io.IOException;
4import java.util.Iterator;
5import java.util.Map;
6
7import org.ksoap2.SoapEnvelope;
8import org.ksoap2.SoapFault;
9import org.ksoap2.serialization.SoapObject;
10import org.ksoap2.serialization.SoapSerializationEnvelope;
11import org.ksoap2.transport.AndroidHttpTransport;
12import org.ksoap2.transport.HttpTransportSE;
13import org.xmlpull.v1.XmlPullParserException;
14
15import android.util.Log;
16
17public class WSUtils {
18
19 public WSUtils() {
20 }
21
22 /** *//**
23 * @author Eric.Lu
24 * @param endPoint
25 * @param methodName
26 * @param params
27 * @param wsdl
28 * @return SoapObject
29 */
30 public static SoapObject callWS(String nameSpace, String methodName,
31 Map params, String wsdl) {
32
33 final String SOAP_ACTION=nameSpace+methodName;
34 SoapObject request = new SoapObject(nameSpace, methodName);
35 SoapObject soapResult=null;
36
37 if(params !=null && !params.isEmpty()){
38 for(Iterator it=params.entrySet().iterator();it.hasNext();){//遍历MAP
39 Map.Entry<String, Object> e=(Map.Entry<String, Object>) it.next();
40 request.addProperty(e.getKey().toString(),e.getValue());
41 }
42 }
43
44 /** *//**
45 * 设置Soap版本
46 * 类型:VER1.0,VER1.1,VER1.2
47 */
48 // SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER10);//SOAP 1.0
49 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// SOAP 1.1
50 // SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);//SOAP 1.2
51
52 envelope.dotNet=true;//是否是dotNet WebService
53 envelope.bodyOut = request;
54
55// HttpTransportSE ht = new HttpTransportSE(wsdl);
56 AndroidHttpTransport androidHT=new AndroidHttpTransport(wsdl);
57 try {
58// ht.call(SOAP_ACTION, envelope);
59 androidHT.call(SOAP_ACTION,envelope);
60 } catch (IOException e) {
61 Log.e("IOException:", e.getMessage());
62 } catch (XmlPullParserException e1) {
63 Log.e("XmlPullParserException", e1.getMessage());
64 }
65 try {
66 soapResult=(SoapObject)envelope.getResponse();
67 } catch (SoapFault e) {
68 Log.e("SoapFault",e.getMessage());
69 }
70 return soapResult;
71 }
72}
73
74
75本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kylixlu/archive/2010/03/12/5372846.aspx
调用这个工具类的方法如下:
1HashMap<String, Object> params = new HashMap<String, Object>();
2 params.put("theCityName", peoples[position]);
3 String wsdl = "webservice的wsdl地址";
4 String nameSpace = "wsdl中的namespace";
5 String methodName = "方法名";//
6 // SoapObject result = WSUtils.callWS(nameSpace, methodName,
7 // wsdl,peoples[position]);
8 SoapObject result = WSUtils.callWS(nameSpace, methodName, params, wsdl);
9
10
11本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kylixlu/archive/2010/03/12/5372846.aspx
posted @
2010-03-24 09:23 kylixlu 阅读(800) |
评论 (0) |
编辑 收藏
摘要: 系统架构设计师考试大纲
一、考试说明:
1.考试目标
考试合格人员应能够根据系统需求规格说明书,结合应用领域和技术发
展的实际情况,考虑有关约束条件,设计正确、合理的软件架构,确保系统架构具有良好的特性;能够对项目睥系统架构进行描述、分析、设计与评估;能够按照相
关标准编写相应的设计文档;能够与系统分析师、项目管理...
阅读全文
posted @
2010-03-09 13:28 kylixlu 阅读(278) |
评论 (0) |
编辑 收藏
<?xml version="1.0" encoding="UTF-8"?>
<license>
<terms>
<issued_to>rapidhorse.com.cn</issued_to>
<license_identifier>SN732563653</license_identifier>
<edition>enterprise</edition>
<evaluation>N</evaluation>
<start_date>12/13/2007</start_date>
<expiration>5/29/2099</expiration>
<full_test_director>500</full_test_director>
<additional_defects>500</additional_defects>
<tolerance>0%</tolerance>
<requirements>Y</requirements>
<advanced_reports>Y</advanced_reports>
<business_process_testing>500</business_process_testing>
<version_control>Y</version_control>
<dashboard>Y</dashboard>
</terms>
<Signature>lA0FAVrF+UTDW2qVIDjVPCSpPKRUpKcoTO8/GI95D1RLIzQAq/8mv+HnIGQ0Grv9am8QKHfncRsARR153QxqKw==</Signature>
</license>
posted @
2010-02-24 17:24 kylixlu 阅读(266) |
评论 (1) |
编辑 收藏
permission:android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
permission:android.permission.FACTORY_TEST
permission:android.permission.SET_ACTIVITY_WATCHER
permission:android.permission.CLEAR_APP_USER_DATA
permission:android.permission.ACCESS_DOWNLOAD_MANAGER
permission:android.permission.CALL_PRIVILEGED
permission:android.permission.FORCE_BACK
permission:android.permission.ACCESS_CHECKIN_PROPERTIES
permission:android.permission.CONTROL_LOCATION_UPDATES
permission:android.permission.WRITE_SECURE_SETTINGS
permission:android.permission.READ_FRAME_BUFFER
permission:android.permission.INTERNAL_SYSTEM_WINDOW
permission:android.permission.ADD_SYSTEM_SERVICE
permission:android.permission.INJECT_EVENTS
permission:android.permission.MASTER_CLEAR
permission:android.permission.STATUS_LED
permission:android.permission.ACCESS_DRM
permission:android.permission.STATUS_BAR
permission:android.permission.PACKAGE_USAGE_STATS
permission:android.permission.BATTERY_STATS
permission:android.permission.INSTALL_PACKAGES
permission:android.permission.MANAGE_APP_TOKENS
permission:android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED
permission:android.permission.SET_PROCESS_FOREGROUND
permission:android.permission.BIND_INPUT_METHOD
permission:com.android.providers.streaming.permission.READ_ONLY
permission:android.permission.ACCESS_SURFACE_FLINGER
permission:android.permission.CHANGE_COMPONENT_ENABLED_STATE
permission:android.permission.READ_INPUT_STATE
permission:android.permission.DELETE_PACKAGES
permission:android.permission.UPDATE_DEVICE_STATS
permission:android.permission.BRICK
permission:android.permission.ACCESS_CACHE_FILESYSTEM
permission:android.permission.WRITE_GSERVICES
permission:android.permission.REBOOT
permission:android.permission.DELETE_CACHE_FILES
permission:com.android.providers.streaming.permission.WRITE_ONLY
permission:android.permission.FOTA_UPDATE
permission:android.permission.SET_ORIENTATION
permission:android.permission.DEVICE_POWER
posted @
2010-02-08 10:00 kylixlu 阅读(739) |
评论 (0) |
编辑 收藏
1.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/config/spring/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
解决方法:添加dom4j.jar
2.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/config/spring/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
解决方法: 添加jta.jar
posted @
2010-01-28 22:43 kylixlu 阅读(186) |
评论 (0) |
编辑 收藏
1. 查看你的Eclipse中使用的是什么SVN Interface
windows > preference > Team > SVN #SVN Interface
2. 如果是用的JavaHL, 找到以下目录并删除auth目录.
C:\Documents and Settings\[YourUserName]\Application Data\Subversion\
3. 如果你用的SVNKit, 找到以下目录并删除.keyring文件.
[eclipse]\configuration\org.eclipse.core.runtime
posted @
2009-12-21 17:08 kylixlu 阅读(264) |
评论 (0) |
编辑 收藏
使用svn log命令生成一个changelog.xml文件:
1.生成文件需要记录所有的变更:
svn log <path> -v --xml > changelog.xml
-v :verbose模式
--xml :输出xml文件
changelog.xml输出的xml文件名
2.生成的文件只需记录当前最新的变更:
svn log <path> -r HEAD -v --xml >changelog.xml
-r:revision
HEAD :最新的版本信息
还有两个参数与上面同解
BTW: svn log 还有好多参数,请自己使用
svn log -h 查阅
也许你执行了以上的命令后,你会发现自己的最新变更信息并不在changelog.xml中,这是为什么呢?
这是因为SVN中的“update”与"commit"是分开的.在版本做出变更后,还需执行以下的命令:
svn update <path>
当然svn update也有很多其它参数,详情请使用
svn update -h 查阅
先写到这里,后面还要介绍用ant脚本怎么来实现同样的操作.
posted @
2009-08-12 21:54 kylixlu 阅读(727) |
评论 (0) |
编辑 收藏
Eclipse+ADT是目前最推荐的一种开发Android的开发环境,不过有些Android程序是使用Android提供的一些工具(如:Android命令)和其它IDEs中建立的,那怎么样才能将这些非Eclipse中建立的Android项目导入进来呢?
1.首先要确保你的Eclipse安装了ADT(Android Development Tools)插件.(
详细资料请查阅官方文档)
2.新建一个Android项目
,此时选择"Create project form existing source",在Location中点"Browse...",先中Android项目所在文件夹。
其它的所以一切Eclipse会自动识别,之后你点"Finish",项目就成功导入到Eclipse中了。
posted @
2009-07-31 09:41 kylixlu 阅读(950) |
评论 (0) |
编辑 收藏
项目中的OTA Server中的一个功能。具体使用请看https://www.clickatell.com/developers/api_http.php
代码如下:
1 protected void SendSMS()
2 {
3
4 string api_id = "xxxxxx";//api_id请查阅clicktell网站帮助
5 string user = "xxxxxx";
6 string password = "xxxxx";
7 //string mobile = "xxxxxx";
8 string mobile = txtMobile.Text;//一个输入手机号的文本框
9
10 string appUri = getAppUri();//发送给手机的App链接,出于保密,此处假设了getAppUri()方法
11
12 StringBuilder smsParams = new StringBuilder();
13 smsParams.Append("api_id=" + api_id);
14 smsParams.Append("&user=" + user);
15 smsParams.Append("&password=" + password);
16 smsParams.Append("&to=" + mobile);
17 smsParams.Append("&text=" + appUri);
18
19
20
21 Uri smsuri = new Uri(string.Format("http://api.clickatell.com/http/sendmsg?{0}", smsParams));
22
23 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(smsuri);
24
25 request.AllowAutoRedirect = false;
26
27 request.Method = "GET";
28
29
30 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
31
32 }
33
34
这个方法不仅适用于clicktell公司的服务,其它的一些SMS服务提供商,用C#调用方法也差不多,仅供大家参考,呵呵
posted @
2009-07-16 21:52 kylixlu 阅读(218) |
评论 (0) |
编辑 收藏
protected void getAllDirs(string path)
{
DirectoryInfo dirinfo = new DirectoryInfo(@path);
DirectoryInfo[] dirs = dirinfo.GetDirectories();
for (int i = 0; i < dirs.Length; i++) {
Response.Write(dirs[i].FullName + "<br>");//页面上打印输出
getAllDirs(dirs[i].FullName);//递归
}
}
posted @
2009-07-16 20:31 kylixlu 阅读(177) |
评论 (0) |
编辑 收藏
我用了一个虚拟机做NightlyBuild脚本的测试,因为要装三个JDE的版本,发现装完JDK+ANT+三个JDE之后,硬盘没空间了,去虚拟机配置里看了一下,还没地方可以调整硬盘大小的。
不过VMWare,提供了以命令行的方式,调整硬盘的大小,在<VMWare_HOME>下有一个vmware-vdiskmanager.exe 可以增加虚拟硬盘的容量:
e.g :我要把硬盘变成5G大小,可以用以下命令
C:\VMware安装路径>vmware-vdiskmanager -x 6Gb X:\你虚拟机文件的路径\Windows" "XP" "Professional.vmdk
(
注意:我的虚拟机创建时用了默认文件名Windows XP Professional.vmdk,所以中间有空格,所以要用引号括起来)
如果命令正确,就会出现上图的操作.
D:\System\VMware\VMware Workstation>vmware-vdiskmanager -x 6Gb F:\VM_XP_EN\Windo
ws" "XP" "Professional.vmdk
Using log file C:\DOCUME~1\ERICLU~1.IBM\LOCALS~1\Temp\vmware-Eric.Lu\vdiskmanage
r.log
Grow: 100% done.
The old geometry C/H/S of the disk is: 10402/16/63
The new geometry C/H/S of the disk is: 12483/16/63
Disk expansion completed successfully.
WARNING: If the virtual disk is partitioned, you must use a third-party
utility in the virtual machine to expand the size of the
partitions. For more information, see:
http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1647
D:\System\VMware\VMware Workstation>
等Grow:100%后,并不等于我们的虚拟机硬盘就是5Gb了,我们要用PQ之类的软件对其进行重新分配置,调整分区大小,才会有效果,不然 硬盘的分区大小还是原来那么大。
posted @
2009-07-02 20:01 kylixlu 阅读(1594) |
评论 (0) |
编辑 收藏
Ant的概念
可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令。当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷。最Ant开发者在开发跨平台的应用时,用样也是基于这些缺陷对Ant做了更好的设计。
Ant 与 makefile
Makefile有一些不足之处,比如很多人都会碰到的烦人的Tab问题。最初的Ant开发者多次强调”只是我在Tab前面加了一个空格,所以我的命令就不能执行”。有一些工具在一定程度上解决了这个问题,但还是有很多其他的问题。Ant则与一般基于命令的工具有所不同,它是Java类的扩展。Ant运行需要的XML格式的文件不是Shell命令文件。它是由一个Project组成的,而一个Project又可分成可多target,target再细分又分成很多task,每一个task都是通过一个实现特定接口的java类来完成的。
Ant的优点
Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。跨平台性。Ant是存Java语言编写的,所示具有很好的跨平台性。操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件时XML格式的文件,所以和容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。
Ant 开发
Ant的构建文件
当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。
(1) src存放文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,发布以后的代码。
Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。
(1) 核心任务。核心任务是Ant自带的任务。
(2) 可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件。
(3) 用户自定义的任务。用户自定义的任务实用户自己开发的任务。
1.<project>标签
每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如下。
(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。
(3) name表示项目名。
(4) description表示项目的描述。
每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。
2.<target>标签
一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
(1) .name表示标明,这个属性是必须的。
(2) .depends表示依赖的目标。
(3) if表示仅当属性设置时才执行。
(4) unless表示当属性没有设置时才执行。
(5) description表示项目的描述。
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执行的顺序是prepare->compile->run。一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。
3.<mkdir>标签
该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:
<mkdir dir=”${class.root}”/>
通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。
4<jar>标签
该标签用来生成一个JAR文件,其属性如下。
(1) destfile表示JAR文件名。
(2) basedir表示被归档的文件名。
(3) includes表示别归档的文件模式。
(4) exchudes表示被排除的文件模式。
5.<javac标签>
该标签用于编译一个或一组java文件,其属性如下。
(1).srcdir表示源程序的目录。
(2).destdir表示class文件的输出目录。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的类路径。
(6).debug表示包含的调试信息。
(7).optimize表示是否使用优化。
(8).verbose 表示提供详细的输出信息。
(9).fileonerror表示当碰到错误就自动停止。
6.<java>标签
该标签用来执行编译生成的.class文件,其属性如下。
(1).classname 表示将执行的类名。
(2).jar表示包含该类的JAR文件名。
(3).classpath所表示用到的类路径。
(4).fork表示在一个新的虚拟机中运行该类。
(5).failonerror表示当出现错误时自动停止。
(6).output 表示输出文件。
(7).append表示追加或者覆盖默认文件。
7.<delete>标签
该标签用于删除一个文件或一组文件,去属性如下。
(1)/file表示要删除的文件。
(2).dir表示要删除的目录。
(3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
(4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。
(5).verbose表示指定是否列出所删除的文件,默认值为不列出。
8.<copy>标签
该标签用于文件或文件集的拷贝,其属性如下。
(1).file 表示源文件。
(2).tofile 表示目标文件。
(3).todir 表示目标目录。
(4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。
(5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。
(6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止。
(7).verbose 表示制定是否显示详细信息,默认值不显示。
Ant的数据类型
在构建文件中为了标识文件或文件组,经常需要使用数据类型。数据类型包含在org.apache.tool.ant.types包中。下面镜简单介绍构建文件中一些常用的数据类型。
1. argument 类型
由Ant构建文件调用的程序,可以通过<arg>元素向其传递命令行参数,如apply,exec和java任务均可接受嵌套<arg>元素,可以为各自的过程调用指定参数。以下是<arg>的所有属性。
(1).values 是一个命令参数。如果参数种有空格,但又想将它作为单独一个值,则使用此属性。
(2).file表示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目录。
(3).line表示用空格分隔的多个参数列表。
(4).path表示路径。
2.ervironment 类型
由Ant构建文件调用的外部命令或程序,<env>元素制定了哪些环境变量要传递给正在执行的系统命令,<env>元素可以接受以下属性。
(1).file表示环境变量值得文件名。此文件名要被转换位一个绝对路径。
(2).path表示环境变量的路径。Ant会将它转换为一个本地约定。
(3).value 表示环境变量的一个直接变量。
(4).key 表示环境变量名。
注意 file path 或 value只能取一个。
3.filelist类型
Filelist 是一个支持命名的文件列表的数据类型,包含在一个filelist类型中的文件不一定是存在的文件。以下是其所有的属性。
(1).dir是用于计算绝对文件名的目录。
(2).files 是用逗号分隔的文件名列表。
(3).refid 是对某处定义的一个<filelist>的引用。
注意 dir 和 files 都是必要的,除非指定了refid(这种情况下,dir和files都不允许使用)。
4.fileset类型
Fileset 数据类型定义了一组文件,并通常表示为<fileset>元素。不过,许多ant任务构建成了隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。以下为fileset 的属性列表。
(1).dir表示fileset 的基目录。
(2).casesensitive的值如果为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true.
(3).defaultexcludes 用来确定是否使用默认的排除模式,默认为true。
(4).excludes 是用逗号分隔的需要派出的文件模式列表。
(5).excludesfile 表示每行包含一个排除模式的文件的文件名。
(6).includes 是用逗号分隔的,需要包含的文件模式列表。
(7).includesfile 表示每行包括一个包含模式的文件名。
5.patternset 类型
Fileset 是对文件的分组,而patternset是对模式的分组,他们是紧密相关的概念。
<patternset>支持4个属性:includes excludex includexfile 和 excludesfile,与fileset相同。Patternset 还允许以下嵌套元素:include,exclude,includefile 和 excludesfile.
6.filterset 类型
Filterset定义了一组过滤器,这些过滤器将在文件移动或复制时完成文件的文本替换。
主要属性如下:
(1).begintoken 表示嵌套过滤器所搜索的记号,这是标识其开始的字符串。
(2).endtoken表示嵌套过滤器所搜索的记号这是标识其结束的字符串。
(3).id是过滤器的唯一标志符。
(4).refid是对构建文件中某处定义一个过滤器的引用。
7.Path类型
Path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作揖个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符,其拥有的属性如下。
(1).location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。
(2).refid 是对当前构建文件中某处定义的一个path的引用。
(3).path表示一个文件或路径名列表。
8.mapper类型
Mapper类型定义了一组输入文件和一组输出文件间的关系,其属性如下。
(1).classname 表示实现mapper类的类名。当内置mapper不满足要求时,用于创建定制mapper.
(2).classpath表示查找一个定制mapper时所用的类型路径。
(3).classpathref是对某处定义的一个类路径的引用。
(4).from属性的含义取决于所用的mapper.
(5).to属性的含义取决于所用的mapper.
(6).type属性的取值为identity,flatten glob merge regexp 其中之一,它定义了要是用的内置mapper的类型。
Ant 的运行
安装好Ant并且配置好路径之后,在命令行中切换到构建文件的目录,输入Ant命令就可以运行Ant.若没有指定任何参数,Ant会在当前目录下查询build.xml文件。如果找到了就用该文件作为构建文件。如果使用了 –find 选项,Ant 就会在上级目录中找构建文件,直至到达文件系统得跟目录。如果构建文件的名字不是build.xml ,则Ant运行的时候就可以使用 –buildfile file ,这里file 指定了要使用的构建文件的名称,示例如下:
Ant
如下说明了表示当前目录的构建文件为build.xml 运行 ant 执行默认的目标。
Ant –buildfile test.xml
使用当前目录下的test.xml 文件运行Ant ,执行默认的目标
posted @
2009-06-05 20:22 kylixlu 阅读(278) |
评论 (0) |
编辑 收藏
小写
α
|
β
|
γ
|
δ
|
ε
|
ζ
|
Alpha
|
Beta
|
Gamma
|
Delta
|
Epsilon
|
Zeta
|
ν
|
ξ
|
ο
|
π
|
ρ
|
σ
|
Nu
|
Xi
|
Omicron
|
Pi
|
Rho
|
Sigma
|
η
|
θ
|
ι
|
κ
|
λ
|
μ
|
Eta
|
Theta
|
Iota
|
Kappa
|
Lambada
|
Mu
|
τ
|
υ
|
φ
|
χ
|
ψ
|
ω
|
Tau
|
Upsilon
|
Phi
|
Chi
|
Psi
|
Omega
|
大写
α
|
β
|
γ
|
δ
|
ε
|
ζ
|
Alpha
|
Beta
|
Gamma
|
Delta
|
Epsilon
|
Zeta
|
ν
|
ξ
|
ο
|
π
|
ρ
|
σ
|
Nu
|
Xi
|
Omicron
|
Pi
|
Rho
|
Sigma
|
η
|
θ
|
ι
|
κ
|
λ
|
μ
|
Eta
|
Theta
|
Iota
|
Kappa
|
Lambada
|
Mu
|
τ
|
υ
|
φ
|
χ
|
ψ
|
ω
|
Tau
|
Upsilon
|
Phi
|
Chi
|
Psi
|
Omega
|
posted @
2009-05-06 17:03 kylixlu 阅读(192) |
评论 (0) |
编辑 收藏
最近经常发生Android的配置文件(像:AndroidManifest.xml)在ECLIPSE中读取出错的情况,报错情况如下:
Could not open the editor: The editor class could not be instantiated. This usually indicates a missing no-arg constructor or that
the editor's class name was mistyped in plugin.xml.
这个问题可能是由于编辑器是用JDK1.5编译而造成的,而我使用的是JDK1.6。
我把JDK设置成1.5后问题解决了(方法:Windows->Preferences->Java->Compiler->Compiler compliance level:1.5)。
如图所示:
posted @
2009-04-29 21:04 kylixlu 阅读(1280) |
评论 (0) |
编辑 收藏
http://www.blogjava.net/Files/kylixlu/NMEA0183.7z
posted @
2009-04-22 20:13 kylixlu 阅读(402) |
评论 (0) |
编辑 收藏
http://java.sun.com/blueprints/patterns/catalog.html
posted @
2009-04-15 20:33 kylixlu 阅读(124) |
评论 (0) |
编辑 收藏
1. 打开 Android的模拟器,%Android_HOME%\tools\emulator.exe
2. 打开一个COMMAND窗口,输入:adb shell 连接模拟器
3. 使用"cd"命令将当前目录调整成 ../data/com.android.providers.settings/databases (注意是'/')
4.我们使用'ls'命令可以看到有个settings.db数据文件
5.使用'sqlite3'连接这个数据文件
6.我们来查看一下数据库和库中的表单
7.用Insert语句往system表中插入proxy的设置(e.g:
Insert into system Values(_id,'http_proxy','IPAddress:port');)
8.我们可以用'Select * From system'来查看一下我们插入的配置,下图可以看到我们插入那个配置
9.删除这个配置(e.g:
Delete From system Where _id=1984)
我们可以再用'Select * from system',查看一下这个数据库,如下图可见,我们插入的配置已经删除了,不过我试了一下,好像要重启一下模拟器,才能使用新的配置,不知道是不是我机器的问题,没有仔细研究。
posted @
2009-03-12 15:30 kylixlu 阅读(1391) |
评论 (0) |
编辑 收藏
复习多线程,一个经典的实例:生产者消费者问题:
1.number表示产品编号,flag表示现在应该由谁来操作.
2.ProcuctData类中有两个同步方法setNumber()和getNumber(),分别代表生产者生产产品和消费者消费 产品。
3.两个线程类Producer和Consumer分别代表生产者与消费者
Java代码
- package cn.luxsoft.javafirststep.Thread;
-
- class ProductData {
-
-
- private int number;
-
-
- private boolean flag = true;
-
- public synchronized void setNumber(int number) {
- if (!flag) {
- try {
-
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- this.number = number;
-
-
- flag = false;
-
-
- notify();
- }
-
- public synchronized int getNumber() {
- if (flag) {
- try {
-
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
-
- flag = true;
-
-
- notify();
- return this.number;
- }
- }
-
- class Procucer extends Thread {
- private ProductData s;
-
- Procucer(ProductData s) {
- this.s = s;
- }
-
- @Override
- public void run() {
- for (int i = 0; i < 10; i++) {
- s.setNumber(i);
- System.out.println("P[" + i + "]生产.");
- }
- }
- }
-
- class Consumer extends Thread {
- private ProductData s;
-
- Consumer(ProductData s) {
- this.s = s;
- }
-
- public void run() {
- int i;
-
- do {
- i = s.getNumber();
- System.out.println("P[" + i + "]消费.**");
- } while (i != 9);
- }
- }
-
- public class ProducerConsumer {
-
-
-
-
-
- public static void main(String[] args) {
-
- ProductData s = new ProductData();
- Thread producer = new Procucer(s);
- Thread consumer = new Consumer(s);
-
- producer.start();
- consumer.start();
- }
-
- }
文章来源:
http://www.my1984.net/?action=show&id=177
posted @
2009-03-08 17:12 kylixlu 阅读(784) |
评论 (0) |
编辑 收藏
一个JAR包,可用RAR等解压文件解压缩后查看代码hfdp.jar
文章来源:
http://www.my1984.net/?action=show&id=176
posted @
2009-03-08 16:25 kylixlu 阅读(178) |
评论 (0) |
编辑 收藏
包括对bug的修复和在7.0M2和 6.6版本的加强。提供的支持包括:Eclipse 3.4.1/Ganymede、REST web服务、新的myeclipse操作板、spring工具集更新、集成Manven2、open JPA支持、高级javascript工具、专业的jsdt实现、报表工具加强、jsf和ICEfaces工具更。
The MyEclipse 7.0 production release includes enhancements and bug fixes for the MyEclipse environment over the previous 7.0 milestone and 6.6 production releases. Notably, this release includes support for the Eclipse 3.4.1/Ganymede platform, REST Web Services, a new MyEclipse dashboard, Spring tools update, integration with Maven 2 (m2e), Open JPA support, advances in JavaScript tooling, a professional implimentation of JSDT, enhancements to MyEclipse Reports tooling and updates to MyEclipse's extensive JSF and ICEfaces tooling.
windows集成版本下载地址: http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0/myeclipse-7.0-win32.exe
文章来源:
http://www.my1984.net/?action=show&id=169
posted @
2009-03-01 15:17 kylixlu 阅读(113) |
评论 (0) |
编辑 收藏
/Files/kylixlu/intellij.idea.v8_keygen.rar
posted @
2009-02-08 12:22 kylixlu 阅读(120) |
评论 (0) |
编辑 收藏
1. JS代码:
JavaScript代码
- function SelectAll(chkbox)
- {
- var chkHeader=chkbox;
- state=chkHeader.checked;
- elem=chkHeader.form.elements;
- for(i=0;i<elem.length;i++)
- if(elem[i].type=="checkbox" && elem[i].id!=chkHeader.id)
- {
- if(elem[i].checked!=state)
- elem[i].click();
- }
- }
2.GridView代码:
XML/HTML代码
- <Columns>
- <asp:TemplateField>
- <HeaderTemplate>
- <input type="checkbox" id='chkHeader' onclick="SelectAll(this)" />
- </HeaderTemplate>
- <ItemTemplate>
- <asp:CheckBox ID="gvChkBox" runat="server" />
- </ItemTemplate>
- </asp:TemplateField>
3.后台获取CheckBox状态代码
C#代码
- bool chkBoxState = ((CheckBox)gr.FindControl("gvChkBox")).Checked;
说明: 1.JS实现了对CHECKBOX的全选(取消全选)功能
2.实现了GRIDVIEW的第一列显示为CHECKBOX
3.实现了对GRIDVIEW 中的gvChkBox控件的取值
文章来源:
http://www.my1984.net/?action=show&id=162
posted @
2008-12-22 14:41 kylixlu 阅读(228) |
评论 (0) |
编辑 收藏
这个做法没什么新意,就是就用一个Hidden,不过里面有些问题有搞了半天,听说细细说来。
还是先上代码(代码跟上一篇的差不多):
1.JS的代码
JavaScript代码
- function onClientClick()
- {
-
- var table=document.getElementById("<%=GridView1.ClientID %>");
- for(var i=1;i<table.rows.length;i++)
- {
- var AbsenseType=table.rows[i].cells[3].getElementsByTagName("select")[0].value;
- var AbsenseDay=table.rows[i].cells[3].getElementsByTagName("select")[1].value;
- var WotDay=table.rows[i].cells[4].getElementsByTagName("select")[0].value;
- if(AbsenseType!=12 && AbsenseDay == "请选择")
- {
- alert("第"+i+"行数据“未选缺勤时间”错误!");
- ra=1;
-
- }
- else if(AbsenseType==12 && AbsenseDay != "请选择")
- {
- alert("第"+i+"行数据“未缺勤,但选了缺勤时间”错误!");
- r=1;
- }
- else if(AbsenseDay=="" && WotDay=="")
- {
-
- }
-
- }
- document.getElementById("<%=Hidden1.ClientID %>").value=r;
- }
-
2.Hidden
XML/HTML代码
- <input id="Hidden1" type="hidden" runat="Server" value="" />
3.C#服务端
C#代码
- Response.Write("Hidden1.Value=" + Hidden1.Value + "</br>");
这个里面有一点我很搞不懂:网上很多同志都说在给Hidden赋值时要用下面这样的语句(而且都说成功了)
JavaScript代码
- document.getElementById("Hidden1").value=r;
一开始我也是这样的,但我用了ASP.net的BUTTON来触发的,死活取不到值。后来我用了HTML中的BUTTON进了测试,发现报了一个空对象的错误,我才发现,这种方法根本无法取到Hidden控件的值,为什么,因为这个Hidden 控件是runat="Server"的,即为一个服务端的控件,我把runat="Server"鼓起去掉后,即:
XML/HTML代码
- <input id="Hidden1" type="hidden" value="" />
用:
JavaScript代码
- document.getElementById("Hidden1").value=r;
就可以正常取到值。
后来想来想去,我用了
JavaScript代码
- document.getElementById("<%=Hidden1.ClientID %>").value=r;
这样对于服务端的控件就可以正确取到值拉。同理:要取一个JS的返回值也是一样的做法了:)
文章来源:
http://www.my1984.net/?action=show&id=160
posted @
2008-12-18 22:32 kylixlu 阅读(1265) |
评论 (0) |
编辑 收藏
今天实现了两个效果,一个是用JS来遍历GRIDVIEW中的DROPDOWNLIST控件,一个是从C#服务端来读取JS中的变量(当然返回值的原理也一样)。下面先介紹一下用JS来遍历GRIDVIEW中控件的效果。
不说废话,先上代码:
JavaScript代码
- function onClientClick()
- {
-
- var table=document.getElementById("<%=GridView1.ClientID %>");
- for(var i=1;i<table.rows.length;i++)
- {
- var AbsenseType=table.rows[i].cells[3].getElementsByTagName("select")[0].value;
- var AbsenseDay=table.rows[i].cells[3].getElementsByTagName("select")[1].value;
- var WotDay=table.rows[i].cells[4].getElementsByTagName("select")[0].value;
- if(AbsenseType!=12 && AbsenseDay == "请选择")
- {
- alert("第"+i+"行数据“未选缺勤时间”错误!");
- ra=1;
-
- }
- else if(AbsenseType==12 && AbsenseDay != "请选择")
- {
- alert("第"+i+"行数据“未缺勤,但选了缺勤时间”错误!");
- r=1;
- }
- }
- }
-
这里有几点要注意的:
1.
JavaScript代码
- var table=document.getElementById("<%=GridView1.ClientID %>");
getElementById里面一定是
"<%=GridView1.ClientID %>",GridView1是我的GridView的ID,如下所示:
ASP/Visual Basic代码
- <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
- BackColor="White" AllowPaging="True" PageSize="50"
- BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="3" ForeColor="Black"
- PagerSettings-Position="TopAndBottom" Width="100%" GridLines="Vertical">
2.
JavaScript代码
- var AbsenseType=table.rows[i].cells[3].getElementsByTagName("select")[0].value;
rows[i]是指GridView的行,Cells[i]是指GridView的单元格,getElementsByTagName("select")[0]表示取得
这个单元格中第一个dropdownlist控件(因为在前台用浏览器查看源代码,我们发现Asp.net的dropdownlist就是HTML里的select),所以getElementsByTagName里应该是“select”。
差不多就是这样了,OK,结束,嘿嘿。
文章来源:
http://www.my1984.net/?action=show&id=159
posted @
2008-12-18 22:16 kylixlu 阅读(1310) |
评论 (0) |
编辑 收藏
■“文本框”用於顯示單個實例資料。文本框可以放在報表上的任何位置,可以包含標籤、欄位或計算資料。您可以使用運算式來定義文字方塊中的資料。
■“表”是用於創建表格格式報表或向報表添加表結構的資料區域。
■“矩陣”是將資料排列成在特定資料點相交的列和行的資料區域。矩陣的功能與交叉表和透視表類似。與包括一組靜態列的表不同的是,矩陣的列可以是動態的。可以定義包含靜態列、靜態行、動態列和動態行的矩陣。
■“圖像”用於在報表中顯示二進位圖像資料。可以使用 .bmp、.jpeg、.gif 和 .png 格式的外部圖像、嵌入圖像或資料庫圖像。
■“子報表”用於將一個報表嵌入到另一個報表。子報表可以是獨立運行的完整報表,也可以是嵌入到主報表中才表現最佳的報表。定義子報表時,還可以定義用於篩選子報表資料的參數。
■“清單”是用於顯示單個欄位的重複行資料或包含其他報表項的資料區域。
■“矩形”用作圖形元素或作為其他報表項的容器。如果在矩形內放入報表項,則可以隨矩形一起移動這些報表項。
■“線條”是可放在頁面上任何位置的圖形元素。線條沒有與其關聯的資料。
文章来源:
http://www.my1984.net/?action=show&id=158
posted @
2008-12-03 09:51 kylixlu 阅读(457) |
评论 (0) |
编辑 收藏
1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)
1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //不显示秒
1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y");
1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m");
1.12 取当前年月日,格式为:2003-9-23
string strYMD=currentTime.ToString("d");
1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t");
更多介绍:
在使用Asp.net的过程中,我们经常需要对时间日期进行转换,达到不同的显示效果。默认格式为:2006-6-6 14:33:34 ,如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?
这里将要用到:DateTime.ToString的方法(String, IFormatProvider)
示例:
using System;
using System.Globalization;
String format="D";
DateTime date=DataTime.Now;
Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));
结果输出
Thursday, June 16, 2006
在这里列出了参数format格式详细用法
=======================
格式字符 关联属性/说明
d ShortDatePattern
D LongDatePattern
f 完整日期和时间(长日期和短时间)
F FullDateTimePattern(长日期和长时间)
g 常规(短日期和短时间)
G 常规(短日期和长时间)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用于显示通用时间的格式
U 使用通用时间的完整日期和时间(长日期和长时间)
y、Y YearMonthPattern
下表列出了可被合并以构造自定义模式的模式
========================================
这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。
格式模式 说明 :
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM 月份的完整名称,在 MonthNames 中定义。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。
f 秒的小数精度为一位。其余数字被截断。
ff 秒的小数精度为两位。其余数字被截断。
fff 秒的小数精度为三位。其余数字被截断。
ffff 秒的小数精度为四位。其余数字被截断。
fffff 秒的小数精度为五位。其余数字被截断。
ffffff 秒的小数精度为六位。其余数字被截断。
fffffff 秒的小数精度为七位。其余数字被截断。
t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。
tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。
z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。
zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。
zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。
: 在 TimeSeparator 中定义的默认时间分隔符。
/ 在 DateSeparator 中定义的默认日期分隔符。
% c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。
\ c 其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\\”。
只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,
DateTime.ToString( "d") 返回 DateTime 值;“d”是标准短日期模式。
DateTime.ToString( "%d") 返回月中的某天;“%d”是自定义模式。
DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。
比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式
如要得到2005年06月 这样格式的时间
可以这样写:
date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)
如此类推.
下面列出一些Asp.net中具体的日期格式化用法:
============================================
1.绑定时格式化日期方法:
<ASP:BOUNDCOLUMN DATAFIELD= "JoinTime " DATAFORMATSTRING= "{0:yyyy-MM-dd} " >
<ITEMSTYLE WIDTH= "18% " > </ITEMSTYLE >
</ASP:BOUNDCOLUMN >
2.数据控件如DataGrid/DataList等的件格式化日期方法:
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();
3.用String类转换日期显示格式:
String.Format( "yyyy-MM-dd ",yourDateTime);
4.用Convert方法转换日期显示格式:
Convert.ToDateTime("2005-8-23").ToString
("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库
5.直接用ToString方法转换日期显示格式:
DateTime.Now.ToString("yyyyMMddhhmmss");
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")
6.只显示年月
DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")
7.显示时间所有部分,包括:年月日时分秒
<asp:BoundColumn DataField="收款时间" HeaderText="收款时间"
DataFormatString="{0:yyyy-MM-dd HH24:mm:ss}">
</asp:BoundColumn>
[ASP.NET] 如何在GridView中使用DataFromatString
在我们从业务逻辑层获得数据实体时候,接下来的事情就是要绑定到控件中。数据实体中的一些字段可以直接绑定到界面中,但是有一些字段需要重新格 式化格式。比如货币单位字段,需要显示货币符号和每隔三位显示分隔符;再比如日期字段,数据库中存放的是日期和时间,但是在界面上需要按照XXXX年XX 月XX日的格式显示。这时候我们就用到了DataFormatString属性。
<asp:GridView ID="grvResult" runat="server" AutoGenerateColumns="False" Width="100%">
<Columns>
<asp:BoundField HeaderText="预定日期" DataField="OperationDate" DataFormatString="{0:yyyy-MM-dd}" HtmlEncode="False">
</asp:BoundField>
<asp:BoundField HeaderText="订单总计" DataField="TotalRate" DataFormatString="{0:C}" HtmlEncode="False">
</asp:BoundField>
</Columns>
</asp:GridView>
例如上面的代码展示了日期和货币两种绑定方式。DataFormatString中的{0}是固定的格式,这和 String.Fromat(“{0}”, someString)中的{0}是一个用法,表示绑定上下文的参数索引编号。然后,在后面加入格式化字符串,具体的使用方法可以参考MSDN。
这里需要注意以下几点
1. 在GridView中的asp:BoundField使用DataFormatString必须设置属性HtmlEncode="False",否则不起作用。
2. 如果需要使用日期类型的格式化字符串,必须数据实体中对应的字段也应该日起类型的。
3. 格式化字符串C代表货币单位,需要绑定的数据类型应该是数字类型的。如果是字符串类型的不起作用,需要手动添加格式化字符串为DataFormatString="¥{0:C}"。
文章来源:
http://www.my1984.net/?action=show&id=150
posted @
2008-11-05 23:34 kylixlu 阅读(975) |
评论 (0) |
编辑 收藏
原文地址:http://www.cnblogs.com/catxp/archive/2006/10/20/534408.html
//大家在做报表或查询的时候都会有给用户预设一些可选的日期范围(如上图)
//如本年度销售额、本季度利润、本月新增客户
//C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了
//今天
DateTime.Now.Date.ToShortDateString();
//昨天,就是今天的日期减一
DateTime.Now.AddDays(-1).ToShortDateString();
//明天,同理,加一
DateTime.Now.AddDays(1).ToShortDateString();
//本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止
DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
//如果你还不明白,再看一下中文显示星期几的方法就应该懂了
//由于DayOfWeek返回的是数字的星期几,我们要把它转换成汉字方便我们阅读,有些人可能会用switch来一个一个地对照,其实不用那么麻烦的
string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];
//上周,同理,一个周是7天,上周就是本周再减去7天,下周也是一样
DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
//下周
DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
//本月,很多人都会说本月的第一天嘛肯定是1号,最后一天就是下个月一号再减一天。当然这是对的
//一般的写法
DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1"; //第一天
DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最后一天
//巧用C#里ToString的字符格式化更简便
DateTime.Now.ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();
//上个月,减去一个月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//下个月,加去一个月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();
//7天后
DateTime.Now.Date.ToShortDateString();
DateTime.Now.AddDays(7).ToShortDateString();
//7天前
DateTime.Now.AddDays(-7).ToShortDateString();
DateTime.Now.Date.ToShortDateString();
//本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();
//上年度,不用再解释了吧
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();
//下年度
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();
//本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月
//首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了
DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
//同理,本季度的最后一天就是下季度的第一天减一
DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//下季度,相信你们都知道了。。。。收工
DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//上季度
DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
文章来源:
http://www.my1984.net/?action=show&id=128
posted @
2008-09-16 20:59 kylixlu 阅读(173) |
评论 (0) |
编辑 收藏
摘要: C#代码
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
&n...
阅读全文
posted @
2008-07-22 23:57 kylixlu 阅读(2654) |
评论 (0) |
编辑 收藏
C#代码
- if ((GridView1.Rows[i].RowState & DataControlRowState.Edit) == DataControlRowState.Edit) {
- //GridView为编辑状态的操作
- } else {
- //GridView为正常状态的操作
- }
GridView1.Rows[i]只是表示取得当前行,若在GRIDVIEW的相关的事件中取得当前行方法可以为:e.Row.RowState
文章来源:
http://www.my1984.net/?action=show&id=112
posted @
2008-07-22 16:06 kylixlu 阅读(159) |
评论 (0) |
编辑 收藏
刚刚在看C#学习笔记,发现一个arity的单词,好像以前接触过,我还以为是书印刷错的,经过放狗查询,找到如下解释:
arity 元数 arity 是一个合成词,源于如binary (arity=2)、tertiary (arity=3),等等中的后缀。
文章来源:
http://www.my1984.net/?action=show&id=105
posted @
2008-06-28 13:59 kylixlu 阅读(219) |
评论 (0) |
编辑 收藏
CodeSmith 4.1.2 专业版 破解下载地址
文章来源:
http://www.my1984.net/?action=show&id=96
posted @
2008-06-21 15:45 kylixlu 阅读(547) |
评论 (0) |
编辑 收藏
.NET设计模式,最近没时间看了,先记录一下,以后再看。
http://terrylee.cnblogs.com/archive/2006/06/01/334911.html
文章来源:
http://www.my1984.net/?action=show&id=81
posted @
2008-05-28 22:01 kylixlu 阅读(53) |
评论 (0) |
编辑 收藏
//比较DateTime类型
DateTime dt1=DateTime.Now;
DateTime dt2=Convert.ToDateTime ("2006-11-09 18:04:11");
if(dt1.CompareTo (dt2)< 0) //CompareTo:0-两者相等
Response.Write ("<script>alert(\"dt1<dt2\");</script>");
else
Response.Write ("<script>alert(\"dt1>dt2\");</script>");
//比较string
DateTime dt3=DateTime.Now ;
string strdt3=dt3.ToString ("yyyy-MM-dd HH:mm:ss");
string strdt4="2006-11-09 18:04:11";
//字符串比较时,主要把时间都转换成yyyy-MM-dd HH:mm:ss的格式
if (strdt3.CompareTo(strdt4)<0)//CompareTo:0-两者相等
Response.Write ("<script>alert(\"strdt3<strdt4\");</script>");
else
Response.Write ("<script>alert(\"strdt3>strdt4\");</script>");
文章来源:
http://www.my1984.net/?action=show&id=79
posted @
2008-05-27 10:31 kylixlu 阅读(2900) |
评论 (0) |
编辑 收藏
- 使用VS2005 工具--->导入导出设置--->重置所有设置;此种方法网上介绍甚多,但与我的环境却没有其作用;
- 关闭VS,然后在命令行运行microsoft visual studio 8\common7\ide\devenv.exe /setup /resetuserdata /resetsettings 打开VS2005,智能感知恢复正常。
文章来源:
http://www.my1984.net/?action=show&id=76
posted @
2008-05-25 23:19 kylixlu 阅读(383) |
评论 (0) |
编辑 收藏
下载:C#高级编程(第四版)
文章来源:
http://www.my1984.net/?action=show&id=72
posted @
2008-05-23 09:11 kylixlu 阅读(149) |
评论 (0) |
编辑 收藏
让GridView控件在绑定的数据源没有数据时也显示标题
阅读全文文章来源:
http://www.my1984.net/?action=show&id=71
posted @
2008-05-22 23:20 kylixlu 阅读(413) |
评论 (0) |
编辑 收藏
生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新(用history.go(-1)也会变)
原型参考ALIBABA http://china.alibaba.com/member/showimage
产生验证码图片的文件-----image.jsp
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
---------------使用验证码图片的文件---------a.jsp------------------------------------
<%@ page contentType="text/html;charset=gb2312" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>认证码输入页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<form method=post action="check.jsp">
<table>
<tr>
<td align=left>系统产生的认证码:</td>
<td><img border=0 src="image.jsp"></td>
</tr>
<tr>
<td align=left>输入上面的认证码:</td>
<td><input type=text name=rand maxlength=4 value=""></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="提交检测"></td>
</tr>
</form>
</body>
</html>
-----------------验证的页面----------check.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title>认证码验证页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<%
String rand = (String)session.getAttribute("rand");
String input = request.getParameter("rand");
%>
系统产生的认证码为: <%= rand %><br>
您输入的认证码为: <%= input %><br>
<br>
<%
if (rand.equals(input)) {
%>
<font color=green>输入相同,认证成功!</font>
<%
} else {
%>
<font color=red>输入不同,认证失败!</font>
<%
}
%>
</body>
</html>
posted @
2008-04-24 23:50 kylixlu 阅读(183) |
评论 (0) |
编辑 收藏
点击下载
破解文件下载
posted @
2008-03-11 19:36 kylixlu 阅读(6547) |
评论 (31) |
编辑 收藏
function isDate(oStartDate){
var a=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})/;
if (!a.test(oStartDate)){
return false
} else{
return true
}
}
posted @
2008-03-05 09:23 kylixlu 阅读(1246) |
评论 (0) |
编辑 收藏
网上COPY地,拿来用一下,哈
1<script language="javascript">
2
3//验证给定的日期是否合法 ,参数格式要求:yyyy-mm-dd 可以根据情况更改正则表达式
4function isDate(oStartDate)
5{
6 //对日期格式进行验证 要求为2000-2099年 格式为 yyyy-mm-dd 并且可以正常转换成正确的日期
7 var pat_hd=/^20\d{2}-((0[1-9]{1})|(1[0-2]{1}))-((0[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/;
8
9 try{
10 if(!pat_hd.test(oStartDate)){throw "日期非法!";}
11 var arr_hd=oStartDate.split("-");
12 var dateTmp;
13 dateTmp= new Date(arr_hd[0],parseFloat(arr_hd[1])-1,parseFloat(arr_hd[2]));
14 if(dateTmp.getFullYear()!=parseFloat(arr_hd[0]) || dateTmp.getMonth()!=parseFloat(arr_hd[1]) -1 || dateTmp.getDate()!=parseFloat(arr_hd[2]))
15 {
16 throw "日期非法!";
17 }
18 }
19 catch(ex)
20 {
21 if(ex.description)
22 {return false;}
23 else
24 {return false;}
25 }
26 return true;
27}
28
29//调用
30
31alert(isDate("2005-12-12"));
32alert(isDate("2004-13-30"));
33alert(isDate("2005-12-32"));
34alert(isDate("2005-02-30"));
35
36</script>
37
38
posted @
2008-02-28 20:06 kylixlu 阅读(253) |
评论 (0) |
编辑 收藏
昨天把公司机器关了,今天早上发现ORACLE启动不了,输入cmd->lsnrctl后,出现如下错误,
经查资料,发现是主机名可能解析有问题,后来在D:\oracle\ora92\network\admin下打开listener.ora文件后将HOST后的主机名 (ADDRESS = (PROTOCOL = TCP)(HOST = SUZSOFT-8CB5627)(PORT = 1521))
改成IP即可解决上面遇到问题 (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.7.115)(PORT = 1521))
posted @
2008-02-27 10:16 kylixlu 阅读(4163) |
评论 (3) |
编辑 收藏
很多人也许并不清楚,null event其实不是空事件,因为不是没有等待事件,而是Oracle忘记了刚才等待的事件的名字具体是什么了,但却保留了该事件的真实情况。Oracle的开发人员直到9.2.0.3才更新了这些事件的名称。
那是不是我们每当遇到性能问题的时候都要patch到9.2.0.3呢?
我们已经知道他的真实情况依然在v$session_wait的p1、p2、p3参数里体现,所以,我们可以根据这些参数,找出这个null event究竟是什么等待事件。
相关信息:
1. lck processes to pick up extra or missed 'posts' (messages)。
in all cases that can be identified the wait time is zero,
although on most ports this is changed to 1/100th second in
order to force the process to be rescheduled.
2. multiple db writers.
two cases:
- when the master has sent i/o requests to the slaves, it
waits on this event for up to 6 seconds until the slaves
signal that the i/o is complete.
- the slaves wait on this event for up to 3 seconds whilst
waiting for requests from the master db writer.
目前已经被证实的会涉及到null event
的等待事件还有有sql.net message to client、
db file scattered (or sequential) read
posted @
2008-02-15 01:03 kylixlu 阅读(185) |
评论 (0) |
编辑 收藏
与无压缩格式下存储数据相比,新的Oracle数据压缩技术能够确保以较小的开销节省三倍以上的磁盘存储空间。这一点比仅节省磁盘空间要具有更大的优势,因为它能够使企业节约更多的开支,以便有更多的资金来巩固自己的地位。
自动诊断知识库(Automatic Diagnostic Repository,ADR)是专门针对严重错误的知识库。该知识库基本上能够自动完成一些以往需要由数据库管理员来手动完成的操作。
作为ADR的一部分,SQL性能分析器(SQL Performance Analyzer,SPA)是最让人惊喜的特性之一。SQL性能分析器是一个整体调整工具,管理员可以通过该工具在数据库上定义和重演(replay) 一个典型的工作负载,之后管理员可以调节整体参数来使数据库尽快的达到最佳性能——而这一任务同样也是许多年以来由数据库管理员手动完成的。
由于获得了最优的初始参数,数据库管理员就不需要调整数以万计的SQL语句。管理员需要做的就是给定一个典型的负载 ,由SAP根据历史记录来决定SQL的最终设置,而不用管理员来检测哪一个SQL设置是最合理的。
多年以来,甲骨文公司一直在努力完成地另一个新特性便是“联机更新”(在不down机的情况下更新软件)。实际上,很难从软件工程的角度来设计一个运行时能自动升级的软件。由于真正的应用集群(Real Application Clusters ,RAC)特性,甲骨文公司再一次对其他的数据库供应商造成了更大的压力。在实际的使用过程中,数据库产品的用户总是希望产品有持续的高可用性,这并不是说只需满足下次补丁更新之前的3年的时间就够了。
自动内存管理特性可以追根溯源至Oracle 9i,那时甲骨文公司推出首款自动调节存储池的工具。AMM工具其实就是一种探测机制。实际上,Oracle 11g 有很多随机访问存储池,当AMM探测到某个存储池中已满时,它将整个RAM从一个区域分配到其他相对合适的区域。
posted @
2008-02-15 01:01 kylixlu 阅读(197) |
评论 (0) |
编辑 收藏
当你想用Java写一Facebook的应用?你把在facebook的帐号中加入的程序开发模块,下载了相关的java类库。忽然你发现不得不停下来:开发相关的入门介绍,样例代码和文档说明在哪儿?这样的挫败感令人愤怒,而最终导致你不得不放弃。
但愿有人会尽快写一个不错的应用Java 开发facebook应用的入门指南。也许只需要你给我些好吃的巧克力,我们可以写些相关的介绍文档,老实说我们的确也解决了不少相关的问题。这里有一些技巧帮助你使用java开始建立自己的 facebook应用。 这并不是一个完整的入门指南,但他可以帮你在着手做时少走些弯路。
八个注意事项辅助你构建Java/facebook应用
1.为了你的幸福和健康,建议你使用5.0或更高的JDK开发包。
2.不用看facebook java开发包中的列子,因为那些例子是针对java桌面应用程序的。而通常你是需要写一个web应用,这两种应用的区别还是很大的。 一开始,你需要一个web应用服务容器,你可以能会选择tomcat,但我不会,这里面有另一个故事,我会找个合适的时间再告诉你。Facebook的网络应用有一个不常见的调用模式。大多数你的页面会被facebook调用。用户请求一个facebook的页面,页面中的主要内容会从你的服务器中返回给用户。你体统的内容会融合到facebook的页面里返回给用户。大多数情况下这些流程不需要你的干预就能很好的执行。但需要注意的是你服务器端产生的页面中的javascript是不能执行的,这就意味着普通的ajax不再在facebook中应用。如果你需要使用AJAX的技术实现facebook 提供的 mock-ajax不能完成的功能,则需要通过facebook的页面跳到你服务配器上的一般页面。
3.配置你在facebook上的应用程序
不要忘了填写facebook应用的配置文件,你应该设置: 应用程序的回调网址。
应用程序的名字- 这个名字用来表示标识在facebook的页面。(这些页面可以是用iframe嵌入到facebook的导航页,也可以是用FBML标记的页面)。一但设定,比如http://apps.facebook.com/yourappname/yourpagename 这个页面就会从facebok产生一个请求到你的服务器 .对于新用户来说,这就是一个你的应用程序的欢迎页面,邀请用户来使用传播你的这个应用。
4.用facebookrestclient
最重要的阶级,在客户端类库中最重要的类是facebookrestclient.这个类中包含一系列调用facebook服务端的方法,并涵盖了大部分你需要的功能。可惜facebookrestclient是不是个架构清晰的类。几乎所有的请求,需要一个facebookrestclient 这是建造一个会话密钥 .用户登陆后可以从CGI变量中获得会话的密钥。(参考 FacebookParam.SESSION_KEY.toString())没有登陆的用户需要引导到一个登陆页面。 试试以下方法:
// 创建一个无会话状态的FacebookRestClient
FacebookRestClient client = new FacebookRestClient ( 你的api密钥 , 你的加密密钥 ) ;
String token = client.authcreateToken () ;
String loginURL = “http : //www.facebook.com/login.php?v=1.0&apikey=&”+ YOUR APIKEY +“&auth_token =”+ token ;
// 这里转向到登陆页面
// 登陆后就会返回会话key
FacebookRestClient.auth_getSession() 以我的经验基本没用。他的作用是把一个无会话的client变成一个有会话的。我发现从CGI变量中获取会话要比试用这个方法简单。
当有一个会话key的FacebookRestClient,你可以调用这个类提供的各种facebook编辑方法。这些方法可以很方便与facebook进行交换操作。但不幸的事这些方法返回的是未经处理的XML文档,这些文档后续的处理会比较麻烦。
比如 friends_get()返回的是
<document>
<friendsgetresponse>
<uid>1</uid>
<uid>2</uid>
<uid>3</uid>
</friendsgetresponse>
</document>
你也许想封装一些提取信息的方法,例如调用friends_get(),试试这个
Document d = client . friends_get () ;
NodeList userIDNodes = d . getElementsByTagName ( " uid " ) ;
int fcount = ids . getLength () ;
List < Integer > friends = new ArrayList < Integer > () ;
for ( int i = 0 ; i < fcount ; i ++ )
{ Node node = userIDNodes . item ( i ) ;
String idText = node . getTextContent () ;
Integer id = Integer . valueOf ( idText ) ;
friends . add ( id ) ; }
这样friends的列表里就填充好了用户的id.
5.servlet返回局部页面
当你生产在facebook中的页面时,比如这样的一个地址http://apps.facebook.com/yourappname/yourpagename,你必须返回的一个HTML或FBML标记的页面片段,而不是一个完全的HTML页面。
6.学习FBML .
FBML这是一套特有的facebook标签。试用标签可以让你很方便的完成很多功能(比如显示用户的名称和图片)。
7.用户邀请好友
你想完成病毒式推广的邀请好友?facebook最近修改了他的api(2007.11)。新版本主要改进了一个特殊的form,fb:form.
原来完成这功能的方法FacebookRestClient.notifications_sendRequest()已经不再使用了,如果你不慎调用将会得到一个异常。
8.用户档案信息显示页面
要想将一些信息放入用户的档案信息页面,使用FacebookRestClient.profile_setFBML()。这个方法复写了你在应用里设定的默认信息页面。当你设定了用户的个人档案的FBML页面,这些页面被流量时,facebook会缓存这些页面信息而不会即时更新。这样就使得用户信息的动态更新会麻烦一些。当一个事件触发用户信息改变时,你需要重新调用profile_setFBML()更新这些信息。幸运的时既然你已经有一个登陆的客户端可以做任何事情,所以这个客户端也可以任意设置你的用户资料的数据项。
posted @
2008-02-15 01:00 kylixlu 阅读(459) |
评论 (0) |
编辑 收藏
Bean是Enterprise Java Bean的缩写,一个Bean扮演着应用程序素材的角色。她包含有一个functional interface,一个life-cycle interface,以及一个实做它所支援的商业方法的类别。
Bean Instance(Bean实例)
一个Bean Instance是Bean位于一个容器中的instantiation,如果把bean比作class,那么Bean Instance就是Java Object。
Bean-managed persistence(Bean自己所管理的永续性)
这个术语是用来描述Enterprise Java Bean如何来存储它们的state到数据库或者是其他的存储机制。容器将促使Bean呼叫Bean的EjbLoad()和EjbSave()方法。
Container(容器)
一个Bean的容器会实做bean的home
interfaces与remote interfaces。它应该提供一组公用程序类别以便能够隐藏bean
instances,介入方法调用,维持交易完整性与bean
instances池的一般管理。虽然Ejb规则中规定一个容器必须管理超过一种以上的bean,不过通常每个容器只有一个bean。
Container-managed demarcation
对于一个enterprise bean,不论何时,当其中的一个商业方法被呼叫,容器便自动启动一项新的交易。商业方法完成后,交易就结束了。容器启动交易的形式由bean的交易属性来决定,或者,由商业方法本身来决定(如果有指明的话)。
Container-managed persistence(委托容器管理的永续性)
Bean开发者可以委托容器来负责记录Bean的最新状态。Bean的状态必须由
Bean中的许多public Fields得到。容器可以确保这些public fields在任何bean的方法被唤醒之前为正确的。public
fields必须在deployment descriptor中定义,然后才产生container classes。
Entity beans
Entity beans 代表可以辨认的永续物件。典型的实例就是:它可以代表关系数据库中个别的rows。当然,也可以是档案系统中的档案,或者是任何其他独一无二的可辨识资料。
Home
每一个Enterprise
Bean,不论是Session或者是Entity bean,都有一个interface来让客户端能够建立与移除一个bean
instance。以Entity为例,home interface 提供一些方法以允许客户端对于一个bean
instance来作定位用。这个interface遵循Java RMI interface的规定。每个home
interface都继承自一个远端界面,即EJBHome。
Remote
一个bean的remote interface 描述对于一个bean
instance中可供客户端呼叫的方法集合。这个interface 遵循Java RMI interface的规定。每个remote
interface都继承自一个远端界面,即EJBObject。
Session beans
Session beans为 particular client所建立。如果经过一段被称为timeout的指定空闲时间之后,就不再存在。
Session synchronization
Session beans 可选择性地实做Session
Synchronization interface。这样可以允许Session beans在交易将完成之前与完成之后被通知。session
bean可以使用beforeCompletion()方法来否决交易的成功完成,并且能够使用afterCompletion()来判断交易成功与否。
Transaction Attribute (交易属性)
一项transaction
attribute可以用在bean与其特殊的商业方法上。其可能的值有六种,分别是TX_NOT_SUPPORTED,TX_REQUIRED,
TX_SUPPORTS,TX_REQUIRES_NEW,TX_MANDATORY,TX_BEAN_MANAGED。
posted @
2008-02-05 19:09 kylixlu 阅读(219) |
评论 (0) |
编辑 收藏
Hibernate一共包括了23个jar包,令人眼花缭乱。本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进行取舍。
下载Hibernate,例如2.0.3稳定版本,解压缩,可以看到一个hibernate2.jar和lib目录下有22个jar包:
hibernate2.jar:
Hibernate的库,没有什么可说的,必须使用的jar包
cglib-asm.jar:
CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包
dom4j.jar:
dom4j是一个Java的XML
API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML
API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM
developerWorks上面可以找到一篇文章,对主流的Java XML
API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j,直到现在。如今你可以看到越
来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,
Hibernate用它来读写配置文件。
odmg.jar:
ODMG是一个ORM的规范,Hibernate实现了ODMG规范,这是一个核心的库,必须使用的jar包。
commons-collections.jar:
Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
commons-beanutils.jar:
Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。
commons-lang.jar:
Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。
commons-logging.jar:
Apache
Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本身包含了一个Simple
Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的
java.util.logging,如果也找不到就用Simple
Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sun把log4j加入JDK1.4,
然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包
的功能比log4j差的很远,性能也一般。后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用
commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j,java.util.logging或
者它自带的Simple
Logger。不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需
要5us。你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log4j的配置文件,你只需要到Apache
网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。
使用Hibernate必须的jar包就是以上的这几个,剩下的都是可选的。
ant.jar:
Ant编译工具的jar包,用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码,那么就没有什么用,可选的jar包
optional.jar:
Ant的一个辅助包。
c3p0.jar:
C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池,就需要这个jar包。
proxool.jar:
也是一个连接池,同上。
commons-pool.jar, commons-dbcp.jar:
DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。
实际上Hibernate自己也实现了一个非常非常简单的数据库连接池,加上上面
3个,你实际上可以在Hibernate上选择4种不同的数据库连接池,选择哪一个看个人的偏好,不过DBCP可能更通用一些。另外强调一点,如果在
EJB中使用Hibernate,一定要用App Server的连接池,不要用以上4种连接池,否则容器管理事务不起作用。
connector.jar:
JCA 规范,如果你在App Server上把Hibernate配置为Connector的话,就需要这个jar。不过实际上一般App Server肯定会带上这个包,所以实际上是多余的包。
jaas.jar:
JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以实际上是多余的包。
jcs.jar:
如果你准备在Hibernate中使用JCS的话,那么必须包括它,否则就不用。
JDBC2_0-stdext.jar:
JDBC2.0的扩展包,一般来说数据库连接池会用上它。不过App Server都会带上,所以也是多余的。
jta.jar:
JTA规范,当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。
junit.jar:
Junit包,当你运行Hibernate自带的测试代码的时候需要,否则就不用。
xalan.jar, xerces.jar, xml-apis.jar:
Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是
JAXP。一般App
Server都会带上,JDK1.4也包含了解析器,不过不是Xerces,是Crimson,效率比较差,不过Hibernate用XML只不过是读取
配置文件,性能没什么紧要的,所以也是多余的。
posted @
2008-02-05 18:57 kylixlu 阅读(189) |
评论 (0) |
编辑 收藏
解决JAVA加密出口限制
jce_policy-1_5_0 download
posted @
2008-01-28 14:36 kylixlu 阅读(798) |
评论 (1) |
编辑 收藏
以前也有過個問題,忘記怎麼弄了,GOOGLE一把,找到了答案,為了防止忘記,記錄一下,嘻嘻
需要新建一个 jaxp.properties, 内容如下:
javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl
保存文件到$JAVA_HOME/jre/lib/下面
接下来可能会出现下面的错误信息:
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAX
ParserFactoryImpl could not be instantiated: java.lang.NullPointerException
因此还需要把xercesImpl.jar复制到D:\jdk1.5.0_01\jre\lib\endorsed下面(没有这个目录就创建这个目录)
重新启动resin,我的webapp启动成功了。
访问 http://lizongbo.myresintest.com/mywebapp/,页面正常出现。
b.另外一种更简单的解决方法,不需要修改jdk的配置
((此方法没有测试过,请参考http://www-900.ibm.com/developerWorks/cn/webservices/ws-axisfaq/index.shtml和http://www.caucho.com/quercus/faq/question.xtp?question_id=295)):
<host id="lizongbo.myresintest.com" root-directory=".">
<web-app id='/' document-directory="webapps/ROOT"/>
<web-app id='/lizongbo' document-directory="E:/jb/oscachedemo/test">
<system-property javax.xml.transform.TransformerFactory="org.apache.xalan.processor.TransformerFactoryImpl"/>
<system-property javax.xml.parsers.DocumentBuilderFactory="org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/>
<system-property javax.xml.parsers.SAXParserFactory="org.apache.xerces.jaxp.SAXParserFactoryImpl"/>
<system-property org.xml.sax.driver="org.apache.xerces.parsers.SAXParser"/>
</web-app>
</host>
posted @
2008-01-28 12:49 kylixlu 阅读(971) |
评论 (0) |
编辑 收藏
最近要做这方面的工作,收集点资料,理解一下
何谓数字证书?
数字证书是一个经证书认证中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的数据文件。认证中心的数字签名可以确保证书信息的真实性,用户公钥信息可以保证数字信息传输的完整性,用户的数字签名可以保证数字信息的不可否认性。
数字证书是各类终端实体和最终用户在网上进行信息交流及商务活动的身份证明,在电子交易的各个环节,交易的各方都需验证对方数字证书的有效性,从而解决相互间的信任问题。
认证中心(CA)作为权威的、可信赖的、公正的第三方机构,专门负责为各种认证需求提供数字证书服务。认证中心颁发的数字证书均遵循X.509 V3标准。X.509标准在编排公共密钥密码格式方面已被广为接受。
数字证书的功能主要包括:身份验证、信息传输安全、信息保密性(存储与交易)、信息完整性、交易的不可否认性。
数字安全证书的工作流程
如果客户A想和银行B通信,他首先必须从数据库中取得银行B的证书,然后对它进行验证。如果他们使用相同的CA(证书认证中心),事情就很简单,客户A只需验证银行B证书上CA的签名。如果他们使用不同的CA,问题就较为复杂。客户A必须从CA的树形结构底部开始,从底层CA往上层CA查询,一直追踪到同一个CA为止,找出共同的信任CA。目前个人获取网上银行安全证书的途径都是通过银行申请,所以双方肯定采用同一证书认证中心颁发的证书。
现在假设客户A向银行B传送数字信息,为了保证信息传送的真实性、完整性和不可否认性,需要对要传送的信息进行数字加密和数字签名,其传送过程如下:
(1)客户A准备好要传送的数字信息(明文)。
(2)客户A对数字信息进行哈希(hash)运算,得到一个信息摘要。
3)客户A用自己的私钥(SK)对信息摘要进行加密得到客户A的数字签名,并将其附在数字信息上。
4)客户A随机产生一个加密密钥(DES密钥),并用此密钥对要发送的信息进行加密,形成密文。
5)客户A用双方共有的公钥(PK)对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给乙。
6)银行B收到客户A传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。
7)银行B然后用DES密钥对收到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。
8)银行B用双方共有的公钥(PK)对客户A的数字签名进行解密,得到信息摘要。银行B用相同的hash算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。
9)银行B将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
posted @
2008-01-22 10:50 kylixlu 阅读(2247) |
评论 (3) |
编辑 收藏