2007年12月29日星期六

又是 年

又到年了,google了张年的图片,贴上,添点年味,添点喜庆,祝所有~~元旦快乐

2007年12月27日星期四

C# winform 打印当前窗体

private void btnPrint_Click(object sender, EventArgs e)
        {
            SendKeys.Send("%{PRTSC}");
            Application.DoEvents();
            this.printDocument1.Print();  
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            IDataObject iData = Clipboard.GetDataObject();
            Image img = (Image)iData.GetData(DataFormats.Bitmap);
            e.Graphics.DrawImage(img, 0, 0);
        }

2007年12月26日星期三

Vector 还是ArrayList――哪一个更好(收集)

要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素:
l API
l 同步处理
l 数据增长性
l 使用模式
下面针对这4个方面进行一一探讨
API
在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector类似于ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。

[b]同步性
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
数据增长
从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度, Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
使用模式
在ArrayList 和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如, LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组 (Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

Javascript技巧参考

Javascript技巧参考
事件源对象
event.srcElement.tagName
event.srcElement.type
捕获释放
event.srcElement.setCapture();
event.srcElement.releaseCapture();
事件按键
event.keyCode
event.shiftKey
event.altKey
event.ctrlKey
事件返回值
event.returnValue
鼠标位置
event.x
event.y
窗体活动元素
document.activeElement
绑定事件
document.captureEvents(Event.KEYDOWN);
访问窗体元素
document.all("txt").focus();
document.all("txt").select();
窗体命令
document.execCommand
窗体COOKIE
document.cookie
菜单事件
document.oncontextmenu
创建元素
document.createElement("SPAN");
根据鼠标获得元素:
document.elementFromPoint(event.x,event.y).tagName=="TD
document.elementFromPoint(event.x,event.y).appendChild(ms)
窗体图片
document.images[索引]
窗体事件绑定
document.onmousedown=scrollwindow;
元素
document.窗体.elements[索引]
对象绑定事件
document.all.xxx.detachEvent('onclick',a);
插件数目
navigator.plugins
取变量类型
typeof($js_libpath) == "undefined"
下拉框
下拉框.options[索引]
下拉框.options.length
查找对象
document.getElementsByName("r1");
document.getElementById(id);
定时
timer=setInterval('scrollwindow()',delay);
clearInterval(timer);
UNCODE编码
escape() ,unescape
父对象
obj.parentElement(dhtml)
obj.parentNode(dom)
交换表的行
TableID.moveRow(2,1)
替换CSS
document.all.csss.href = "a.css";
并排显示
display:inline
隐藏焦点
hidefocus=true
根据宽度换行
style="word-break:break-all"
自动刷新
<meta HTTP-EQUIV="refresh" CONTENT="8;URL=http://c98.yeah.net">
简单邮件
<a href="mailto:aaa@bbb.com?subject=ccc&body=xxxyyy">
快速转到位置
obj.scrollIntoView(true)

<a name="first">
<a href="#first">anchors</a>
网页传递参数
location.search();
可编辑
obj.contenteditable=true
执行菜单命令
obj.execCommand
双字节字符
/[^\x00-\xff]/
汉字
/[\u4e00-\u9fa5]/
让英文字符串超出表格宽度自动换行
word-wrap: break-word; word-break: break-all;
透明背景
<IFRAME src="1.htm" width=300 height=180 allowtransparency></iframe>
获得style内容
obj.style.cssText
HTML标签
document.documentElement.innerHTML
第一个style标签
document.styleSheets[0]
style标签里的第一个样式
document.styleSheets[0].rules[0]
防止点击空链接时,页面往往重置到页首端。
<a href="javascript:function()">word</a>
上一网页源
asp:
request.servervariables("HTTP_REFERER")
javascript:
document.referrer
释放内存
CollectGarbage();
禁止右键
document.oncontextmenu = function() { return false;}
禁止保存
<noscript><iframe src="*.htm"></iframe></noscript>
禁 止选取<body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false"onmouseup="document.selection.empty()>
禁止粘贴
<input type=text onpaste="return false">
地址栏图标
<link rel="Shortcut Icon" href="favicon.ico">
favicon.ico 名字最好不变16*16的16色,放虚拟目录根目录下
收藏栏图标
<link rel="Bookmark" href="favicon.ico">
查看源码
<input type=button value=查看网页源代码 onclick="window.location = 'view-source:'+ 'http://www.csdn.net/'">
关闭输入法
<input style="ime-mode:disabled">
自动全选
<input type=text name=text1 value="123" onfocus="this.select()">
ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
文本框的默认值
<input type=text value="123" onfocus="alert(this.defaultValue)">
title换行
obj.title = "123 sdfs "
获得时间所代表的微秒
var n1 = new Date("2004-10-10".replace(/-/g, "\/")).getTime()
窗口是否关闭
win.closed
checkbox扁平
<input type=checkbox style="position: absolute; clip:rect(5px 15px 15px 5px)"><br>
获取选中内容
document.selection.createRange().duplicate().text
自动完成功能
<input type=text autocomplete=on>打开该功能
<input type=text autocomplete=off>关闭该功能
窗口最大化
<body onload="window.resizeTo(window.screen.width - 4,window.screen.height-50);window.moveTo(-4,-4)">
无关闭按钮IE
window.open("aa.htm", "meizz", "fullscreen=7");
统一编码/解码
alert(decodeURIComponent(encodeURIComponent("http://你好.com?as= hehe")))
encodeURIComponent对":"、"/"、";" 和 "?"也编码
表格行指示
<tr onmouseover="this.bgColor='#f0f0f0'" onmouseout="this.bgColor='#ffffff'">

//各种尺寸

s += "\r\n网页可见区域宽:"+ document.body.clientWidth;
s += "\r\n网页可见区域高:"+ document.body.clientHeight;
s += "\r\n网页可见区域高:"+ document.body.offsetWeight +" (包括边线的宽)";
s += "\r\n网页可见区域高:"+ document.body.offsetHeight +" (包括边线的宽)";
s += "\r\n网页正文全文宽:"+ document.body.scrollWidth;
s += "\r\n网页正文全文高:"+ document.body.scrollHeight;
s += "\r\n网页被卷去的高:"+ document.body.scrollTop;
s += "\r\n网页被卷去的左:"+ document.body.scrollLeft;
s += "\r\n网页正文部分上:"+ window.screenTop;
s += "\r\n网页正文部分左:"+ window.screenLeft;
s += "\r\n屏幕分辨率的高:"+ window.screen.height;
s += "\r\n屏幕分辨率的宽:"+ window.screen.width;
s += "\r\n屏幕可用工作区高度:"+ window.screen.availHeight;
s += "\r\n屏幕可用工作区宽度:"+ window.screen.availWidth;
//过滤数字

<input type=text onkeypress="return event.keyCode>=48&&event.keyCode<=57||(this.value.indexOf('.')<0?event.keyCode==46:false)" onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false">
//特殊用途

<input type=button value=导入收藏夹 onclick="window.external.ImportExportFavorites(true,'http://localhost');">
<input type=button value=导出收藏夹 onclick="window.external.ImportExportFavorites(false,'http://localhost');">
<input type=button value=整理收藏夹 onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)">
<input type=button value=语言设置 onclick="window.external.ShowBrowserUI('LanguageDialog', null)">
<input type=button value=加入收藏夹 onclick="window.external.AddFavorite('http://www.google.com/', 'google')">
<input type=button value=加入到频道 onclick="window.external.addChannel('http://www.google.com/')">
<input type=button value=加入到频道 onclick="window.external.showBrowserUI('PrivacySettings',null)">
//不缓存

<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">


//正则匹配
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
以下是例子:
利用正则表达式限制网页表单里的文本框输入内容:
用 正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
1.用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
//消除图像工具栏

<IMG SRC="mypicture.jpg" HEIGHT="100px" WIDTH="100px" GALLERYIMG="false">
or
<head>
<meta http-equiv="imagetoolbar" content="no">
</head>
//无提示关闭


function Close()
{
var ua=navigator.userAgent
var ie=navigator.appName=="Microsoft Internet Explorer"?true:false
if(ie)
{
var IEversion=parseFloat(ua.substring(ua.indexOf("MSIE ")+5,ua.indexOf(";",ua.indexOf("MSIE "))))
if(IEversion< 5.5)
{
var str = '<object id=noTipClose classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">'
str += '<param name="Command" value="Close"></object>';
document.body.insertAdjacentHTML("beforeEnd", str);
document.all.noTipClose.Click();
}
else
{
window.opener =null;
window.close();
}
}
else
{
window.close()
}
}
//取得控件得绝对位置(1)


<script language="javascript">
function getoffset(e)
{
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent)
{
t+=e.offsetTop;
l+=e.offsetLeft;
}
var rec = new Array(1);
rec[0] = t;
rec[1] = l;
return rec
}
</script>
//获得控件的绝对位置(2)

oRect = obj.getBoundingClientRect();
oRect.left
oRect.
//最小化,最大化,关闭

<object id=min classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=max classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=close classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" value="Close"></OBJECT>
<input type=button value=最小化 onclick=min.Click()>
<input type=button value=最大化 onclick=max.Click()>
<input type=button value=关闭 onclick=close.Click()>



//光标停在文字最后

<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
//页面进入和退出的特效


进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使
用哪种特效,取值为1-23:
0 矩形缩小
1 矩形扩大
2 圆形缩小
3 圆形扩大
4 下到上刷新
5 上到下刷新
6 左到右刷新
7 右到左刷新
8 竖百叶窗
9 横百叶窗
10 错位横百叶窗
11 错位竖百叶窗
12 点扩散
13 左右到中间刷新
14 中间到左右刷新
15 中间到上下
16 上下到中间
17 右下到左上
18 右上到左下
19 左上到右下
20 左下到右上
21 横条
22 竖条
23
//网页是否被检索

<meta name="ROBOTS" content="属性值">
其中属性值有以下一些:
属性值为"all": 文件将被检索,且页上链接可被查询;
属性值为"none": 文件不被检索,而且不查询页上的链接;
属性值为"index": 文件将被检索;
属性值为"follow": 查询页上的链接;
属性值为"noindex": 文件不检索,但可被查询链接;
属性值为"nofollow":

//打印分页

<p style="page-break-after:always">page1</p>
<p style="page-break-after:always">page2</p>

//设置打印


<object id="factory" style="display:none" viewastext
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360"
></object>
<input type=button value=页面设置 onclick="factory.printing.PageSetup()">
<input type=button value=打印预览 onclick="factory.printing.Preview()">

<script language=javascript>
function window.onload()
{
// -- advanced features
factory.printing.SetMarginMeasure(2) // measure margins in inches
factory.printing.SetPageRange(false, 1, 3) // need pages from 1 to 3
factory.printing.printer = "HP DeskJet 870C"
factory.printing.copies = 2
factory.printing.collate = true
factory.printing.paperSize = "A4"
factory.printing.paperSource = "Manual feed"
// -- basic features
factory.printing.header = "居左显示&b居中显示&b居右显示页码,第&p页/共&P页"
factory.printing.footer = "(自定义页脚)"
factory.printing.portrait = false
factory.printing.leftMargin = 0.75
factory.printing.topMargin = 1.5
factory.printing.rightMargin = 0.75
factory.printing.bottomMargin = 1.5
}
function Print(frame) {
factory.printing.Print(true, frame) // print with prompt
}
</script>
<input type=button value="打印本页" onclick="factory.printing.Print(false)">
<input type=button value="页面设置" onclick="factory.printing.PageSetup()">
<input type=button value="打印预览" onclick="factory.printing.Preview()"><br>
<a href="http://www.meadroid.com/scriptx/docs/printdoc.htm?static" target=_blank>具体使用手册,更多信息,点这里</a>

//自带的打印预览

WebBrowser.ExecWB(1,1) 打开
Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
Web.ExecWB(4,1) 保存网页
Web.ExecWB(6,1) 打印
Web.ExecWB(7,1) 打印预览
Web.ExecWB(8,1) 打印页面设置
Web.ExecWB(10,1) 查看页面属性
Web.ExecWB(15,1) 好像是撤销,有待确认
Web.ExecWB(17,1) 全选
Web.ExecWB(22,1) 刷新
Web.ExecWB(45,1) 关闭窗体无提示
<style media=print>
.Noprint{display:none;}<!--用本样式在打印时隐藏非打印项目-->
.PageNext{page-break-after: always;}<!--控制分页-->
</style>
<object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object>

<center class="Noprint" >
<input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)>
<input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
</p>
<p> <input type=button value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)>
</center>
//去掉打印时的页眉页脚


<script language="JavaScript">
var HKEY_Root,HKEY_Path,HKEY_Key;
HKEY_Root="HKEY_CURRENT_USER";
HKEY_Path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
//设置网页打印的页眉页脚为空
function PageSetup_Null()
{
try
{
var Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
}
catch(e){}
}
//设置网页打印的页眉页脚为默认值
function PageSetup_Default()
{
try
{
var Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&w&b页码,&p/&P");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&u&b&d");
}
catch(e){}
}
</script>
<input type="button" value="清空页码" onclick=PageSetup_Null()>
<input type="button" value="恢复页码" onclick=PageSetup_Default()>
//浏览器验证


function checkBrowser()
{
this.ver=navigator.appVersion
this.dom=document.getElementById?1:0
this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
this.ie4=(document.all && !this.dom)?1:0;
this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.mac=(this.ver.indexOf('Mac') > -1) ?1:0;
this.ope=(navigator.userAgent.indexOf('Opera')>-1);
this.ie=(this.ie6 || this.ie5 || this.ie4)
this.ns=(this.ns4 || this.ns5)
this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns5 || this.ns4 || this.mac || this.ope)
this.nbw=(!this.bw)
return this;
}
//计算内容宽和高

<SCRIPT language="javascript">
function test(obj)
{
var range = obj.createTextRange();
alert("内容区宽度: " + range.boundingWidth
+ "px\r\n内容区高度: " + range.boundingHeight + "px");

}
</SCRIPT>
<BODY>
<Textarea id="txt" height="150">sdf</textarea><INPUT type="button" value="计算内容宽度" onClick="test(txt)">
</BODY>
//无模式的提示框

function modelessAlert(Msg)
{
window.showModelessDialog("javascript:alert(\""+escape(Msg)+"\");window.close();","","status:no;resizable:no;help:no;dialogHeight:height:30px;dialogHeight:40px;");
}

//屏蔽按键
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<noscript><meta http-equiv="refresh" content="0;url=about:noscript"></noscript>
<title>屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键</title>
</head>
<body>
<script language="Javascript"><!--
//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
//Author: meizz(梅花雨) 2002-6-18
function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠标右键
function window.onhelp(){return false} //屏蔽F1帮助
function document.onkeydown()
{
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←
(window.event.keyCode==39))) //屏蔽 Alt+ 方向键 →
{
alert("不准你使用ALT+方向键前进或后退网页!");
event.returnValue=false;
}
/* 注:这还不是真正地屏蔽 Alt+ 方向键,
因为 Alt+ 方向键弹出警告框时,按住 Alt 键不放,
用鼠标点掉警告框,这种屏蔽方法就失效了。以后若
有哪位高手有真正屏蔽 Alt 键的方法,请告知。*/
if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116)|| //屏蔽 F5 刷新键
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11
if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽 Ctrl+n
if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽 shift+F10
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽 shift 加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)) //屏蔽Alt+F4
{
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;
}
}
</script>
屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键
</body>
</html>
//屏蔽打印
<style>
@media print{
* {display:none}
}
</style>

//移动的图层,拖动


1.<span style='position:absolute;width:200;height:200;background:red' onmousedown=MouseDown(this) onmousemove=MouseMove() onmouseup=MouseUp()>meizz</span>
<script language=javascript>
var Obj;
function MouseDown(obj)
{
Obj=obj;
Obj.setCapture();
Obj.l=event.x-Obj.style.pixelLeft;
Obj.t=event.y-Obj.style.pixelTop;
}
function MouseMove()
{
if(Obj!=null)
{
Obj.style.left = event.x-Obj.l;
Obj.style.top = event.y-Obj.t;
}
}
function MouseUp()
{
if(Obj!=null)
{
Obj.releaseCapture();
Obj=null;
}
}
</script>
2.
<div id="myDiv" src="logo.gif" ondrag="doDrag();" onmouseover="this.style.cursor='hand'" style="position:absolute;left=100;top=100;" onmousedown="doMouseDown();">
<a href="#" onclick="return false"><h1>wlecome</h1></a>
</div>
<script language="JavaScript" type="text/javascript">
var orgMouseX;
var orgMouseY;
var orgObjX;
var orgObjY;
function doDrag()
{
var myObject=document.all.myDiv;

var x=event.clientX;
var y=event.clientY;
myObject.style.left=x-(orgMouseX-orgObjX);
myObject.style.top=y-(orgMouseY-orgObjY);

}
function doMouseDown()
{
orgMouseX=event.clientX;
orgMouseY=event.clientY;
orgObjX=parseInt(document.all.myDiv.style.left);
orgObjY=parseInt(document.all.myDiv.style.top);
}

</script>

//文档状态改变


<iframe src="a.html" id="f" name="f" scrolling="no" frameborder=0 marginwidth=0 marginheight=0></iframe>
<script>
var doc=window.frames["f"].document;
function s(){
if (doc.readyState=="complete"){
document.all.f.style.height=doc.body.scrollHeight
document.all.f.style.width=doc.body.scrollWidth
}
}
doc.onreadystatechange=s
</script>

//刷新后不变的文本框

<HTML>
<HEAD>
<META NAME="save" CONTENT="history">
<STYLE>
.sHistory {behavior:url(#default#savehistory);}
</STYLE>
</HEAD>
<BODY>
<INPUT class=sHistory type=text id=oPersistInput>
</BODY>
</HTML>
//访问剪贴板

(1)拖拽访问
event.dataTransfer.setData("URL", oImage.src);
sImageURL = event.dataTransfer.getData("URL")
(2)普通访问
window.clipboardData.setData("Text",oSource.innerText);
window.clipboardData.getData("Text");
//操作COOKIE


function SetCookie(sName, sValue)
{
document.cookie = sName + "=" + escape(sValue) + "; ";
}
function GetCookie(sName)
{
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++)
{

var aCrumb = aCookie[i].split("=");
if (sName == aCrumb[0])
return unescape(aCrumb[1]);
}

}
function DelCookie(sName)
{
document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}
//setTimeout增加参数

<script>
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) {
if(typeof fRef == 'function'){
var argu = Array.prototype.slice.call(arguments,2);
var f = (function(){ fRef.apply(null, argu); });
return _st(f, mDelay);
}
return _st(fRef,mDelay);
}
function test(x){
alert(x);
}
window.setTimeout(test,1000,'fason');
</script>

//自定义的apply,call

Function.prototype.apply = function (obj, argu) {
if (obj) obj.constructor.prototype._caller = this;
var argus = new Array();
for (var i=0;i<argu.length;i++)
argus[i] = "argu[" + i + "]";
var r;
eval("r = " + (obj ? ("obj._caller(" + argus.join(",") + ");") : ("this(" + argus.join(",") + ");")));
return r;
};
Function.prototype.call = function (obj) {
var argu = new Array();
for (var i=1;i<arguments.length;i++)
argu[i-1] = arguments[i];
return this.apply(obj, argu);
};

//下载文件

function DownURL(strRemoteURL,strLocalURL)
{
try
{
var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
xmlHTTP.open("Get",strRemoteURL,false);
xmlHTTP.send();
var adodbStream=new ActiveXObject("ADODB.Stream");
adodbStream.Type=1;//1=adTypeBinary
adodbStream.Open();
adodbStream.write(xmlHTTP.responseBody);
adodbStream.SaveToFile(strLocalURL,2);
adodbStream.Close();
adodbStream=null;
xmlHTTP=null;

}
catch(e)
{
window.confirm("下载URL出错!");
}
//window.confirm("下载完成.");
}

//检验连接是否有效

function getXML(URL)
{
var xmlhttp = new ActiveXObject("microsoft.xmlhttp");
xmlhttp.Open("GET",URL, false);
try
{
xmlhttp.Send();
}
catch(e){}
finally
{
var result = xmlhttp.responseText;
if(result)
{
if(xmlhttp.Status==200)
{
return(true);
}
else
{
return(false);
}
}
else
{
return(false);
}
}
}
//POST代替FORM

<SCRIPT language="VBScript">
Function URLEncoding(vstrIn)
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00)\ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
URLEncoding = strReturn
End Function
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
dim strA,oReq
strA = URLEncoding("submit1=Submit&text1=中文")
set oReq = CreateObject("MSXML2.XMLHTTP")
oReq.open "POST","http://ServerName/VDir/TstResult.asp",false
oReq.setRequestHeader "Content-Length",Len(strA)
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
oReq.send strA
msgbox bytes2BSTR(oReq.responseBody)
</SCRIPT>
//readyState是xmlhttp返回数据的进度,0=载入中,1=未初始化,2=已载入,3=运行中,4=完成

//组件是否安装
isComponentInstalled("{6B053A4B-A7EC-4D3D-4567-B8FF8A1A5739}", "componentID"))

//检查网页是否存在


function CheckURL(URL)
{
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("GET",URL, false);
try
{
xmlhttp.Send();
var result = xmlhttp.status;
}
catch(e) {return(false); }
if(result==200)
{
return true;
}
xmlhttp = null;
return false;
}
//连接数据库


<script language="javascript">
//用 JavaScript 写服务器端连接数据库的代码示例
var conn = new ActiveXObject("ADODB.Connection");
conn.Open("Provider=SQLOLEDB.1; Data Source=localhost; User ID=sa; "
+"Password=; Initial Catalog=pubs");
var rs = new ActiveXObject("ADODB.Recordset");
var sql="select * from authors";
rs.open(sql, conn);
shtml = "<table width='100%' border=1>";
shtml +="<tr bgcolor='#f4f4f4'><td>au_id</td><td>au_lname</td><td>au_fname</td><td>phone</td><td>address</td><td> city</td><td>state</td><td>zip</td></tr>";
while(!rs.EOF)
{
shtml += "<tr><td>" + rs("au_id") + "</td><td>" + rs("au_lname") + "</td><td>" + rs("au_fname") + "</td><td>" + rs("phone") + "</td><td>" + rs("address") + "</td><td>" + rs("city") + "</td><td>" + rs("state") + "</td><td>" + rs("zip") + "</td></tr>";
rs.moveNext;
}
shtml += "</table>";
document.write(shtml);
rs.close();
rs = null;
conn.close();
conn = null;
</script>
//使用数据岛


<html>
<body>
srno:<input type=text datasrc=#xmldate DataFLD=srno size="76"><BR>
times:<input type=text datasrc=#xmldate DataFLD=times size="76"><BR>
<input id="first" TYPE=button value="<< 第一条记录" onclick="xmldate.recordset.moveFirst()">
<input id="prev" TYPE=button value="<上一条记录" onclick="xmldate.recordset.movePrevious()">
<input id="next" TYPE=button value="下一条记录>" onclick="xmldate.recordset.moveNext()">
<input id="last" TYPE=button value="最后一条记录>>" onclick="xmldate.recordset.moveLast()">
<input id="Add" TYPE=button value="添加新记录" onclick="xmldate.recordset.addNew()">

<XML ID="xmldate">
<infolist>
<info ><srno>20041025-01</srno><times>null</times></info>
<info ><srno>20041101-09</srno><times>2004年10月1日2点22分0秒</times></info>
</infolist>
</XML>
</body>
</html>
//获得参数

<body>
<a href="javascript:location.href=location.href + '?a=1&b=2'">search</a>
<script language="JavaScript">
<!--
var a = location.search.substr(1);
if(a.length>0)
{
var re = /([^&]*?)\=([^&]*)/g
var s = a.match(re);
for(var i= 0;i<s.length;i++)
{
alert(s[i]);
alert(s[i].split("=")[1]);
}
}
//-->
</script>
</body>
//可编辑SELECT

<input type=text name=re_name style="width:100px;height:21px;font-size:10pt;"><span style="width:18px;border:0px solid red;"><select name="r00" style="margin-left:-100px;width:118px; background-color:#FFEEEE;" onChange="document.all.re_name.value=this.value;">
<option value="1">11111111<option>
<option value="2">222222</option>
<option value="3">333333</option>
</select>
</span>

ComboBox 手动绑定数据项


===========ValueObject.cs============

using System;
using System.Collections.Generic;
using System.Text;

namespace psms.util
{
    class ValueObject
    {
        private string value;
        private string text;

        public ValueObject(string v, string t)
        {
            this.value = v;
            this.text = t;
        }

        public string Value
        {
            get { return this.value;}
        }
        public string Text
        {
            get { return this.text; }
        }

    }
}

===============绑定数据===============

this.combIn_Acc.Items.Add(new util.ValueObject("", ""));
this.combIn_Acc.Items.Add(new util.ValueObject("0","未做帐"));
this.combIn_Acc.Items.Add(new util.ValueObject("1", "已做帐"));
           
this.combIn_Acc.ValueMember = "value";
this.combIn_Acc.DisplayMember = "text";
this.combIn_Acc.SelectedIndex = 0;


================取值==================


if (this.combIn_Acc.SelectedIndex >= 0)
{
   if (((util.ValueObject)this.combIn_Acc.SelectedItem).Value.ToString() != "")
   {
       condition.Append(" and in_acc = ").Append(((util.ValueObject)this.combIn_Acc.SelectedItem).Value.ToString()).Append(" ");
   }
}


不知道为什么this.combIn_Acc.SelectedValue总是报空指针异常,想不明白,换了上面的取值方法终于可行了

2007年12月25日星期二

jdbc bath

conn = getConnection();
conn.setAutoCommit(false);
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("INSERT INTO user(id,name) VALUES(?, ?)");     
for (int i = 0; i < 10000; i++) {
    ps.setInt(1,i);
    ps.setString(2,"name_"+String.valueOf(i));
    ps.addBatch();
    //ps.clearParameters(); 这句话报空指针异常,不知为什么
}
ps.executeBatch();
conn.commit();

sqlserver 删除重复记录(转)

数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……
方法一

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

方法二

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct * from tableName


就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

2007年12月23日星期日

解决方案管理器中就选中文件

我同时打开了多个文件,我编辑哪个文件,在解决方案管理器中就选中哪个文件
我记得可以的,忘了在哪设了
原来在这 ,呵呵


2007年12月22日星期六

sql语句 删除数据中的前后空格

DECLARE   @T_SQL   varchar(8000)
set @T_SQL=''
select @T_SQL=@T_SQL + name +'=ltrim(rtrim('+ name + ')),' from syscolumns where id=object_id('vipinfo')   and   name   <>   'id'
set   @T_SQL   =   'update   vipinfo   set   '   +   left(@T_SQL,len(@T_SQL)-1)
exec   (@T_SQL)

C#访问数据库方法

        #region 执行查询语句返回影响行数
        public static int ExecuteNonQuery(string str_cmd,out string str_error)
        {
            int i=0;
            str_error=string.Empty;
            SqlConnection conn=CreateConn();
            SqlCommand cmd=new SqlCommand(str_cmd,conn);
            try
            {
                conn.Open();
                i=cmd.ExecuteNonQuery();
            }
            catch(Exception ex)
            {
                str_error=ex.Message;
            }
            finally
            {
                conn.Close();
            }
            return i;
        }
        #endregion
        #region 返回第一行第一列
        public static string ExecuteScalar(string str_cmd,out string str_error)
        {
            string str_value=string.Empty;
            str_error=string.Empty;
            SqlConnection conn=CreateConn();
            SqlCommand cmd=new SqlCommand(str_cmd,conn);
            try
            {
                conn.Open();
                str_value=cmd.ExecuteScalar().ToString();
            }
            catch(Exception ex)
            {
                str_error=ex.Message;
            }
            finally
            {
                conn.Close();
            }
            return str_value;
        }
        #endregion
        #region 返回datatbale from datareader
        public static DataTable ExecuteReader(string str_cmd,out string str_error)
        {
            DataTable dt=new DataTable();
            SqlDataReader dr=null;
             str_error=string.Empty;
            SqlConnection conn=CreateConn();
            SqlCommand cmd=new SqlCommand(str_cmd,conn);
            try
            {
                conn.Open();
                dr=cmd.ExecuteReader();
                dt=DataReaderToTable(dr);
            }
            catch(Exception ex)
            {
                str_error=ex.Message;
            }
            finally
            {
                conn.Close();
            }
            return dt;
         }
        #region 循环SqlDataReader填入Table
        private static DataTable DataReaderToTable(SqlDataReader dr)
        {
            DataTable dt=new DataTable();
            int count=dr.FieldCount;
            int index=1;
            if(count>0)
            {
                for(int i=0;i<count;i++)
                {
                    dt.Columns.Add(dr.GetName(i),dr.GetFieldType(i));
                }
                dt.Columns.Add("id");//编号
                dt.BeginLoadData();
                while(dr.Read())
                {
                    object[] objectRow=new object[count+1];
                    for(int i=0;i<count;i++)
                    {
                   
                        objectRow[i]=dr[dr.GetName(i)];
                    }
                    objectRow[count]=index;//编号
                    dt.LoadDataRow(objectRow,true);
                    index++;
                }
                dt.EndLoadData();
            }
            return dt;

        }
        #endregion
        public static SqlConnection CreateConn()
        {
            //string str_conn="server=.;database=bidding;user id=sa;pwd=jhc;";
            SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnStr"]);
            return conn;
        }

C# 中的“事件”

C# 中的“事件”是当对象满足一定条件,发生某些事情时,类向该类的客户提供通知的一种方法。使用事件,拥有该事件的对象不必知道需要通知谁,一旦满足了某个条件,将自动调用该事件,正确通知每个需要通知的对象。通过使用事件,提高了程序的模块化程度。
  
  要在程序中使用自定义事件,需按以下步骤进行:
  
  1、声明事件
  
  要在类内声明事件,首先必须声明该事件的委托类型:
  public delegate void SelectionChangedEventHandler(object sender,
  SelectionChangedEventArgs e);
  
  说明:由于本示例程序需在事件中传递数据,因此定义了EventArgs的派生类SelectionChangedEventArgs。
  public class SelectionChangedEventArgs : EventArgs
  {
  private string m_selection;
  
  //本属性用于传递事件数据
  public string Selection
  {
  get { return m_selection; }
  }
  
  public SelectionChangedEventArgs(string selection)
  {
  m_selection = selection;
  }
  }
  
  委托类型定义传递给处理该事件的方法的一组参数。多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。
  
  接下来,声明事件本身:
  public event SelectionChangedEventHandler SelectionChanged;
  
  2、调用事件
  
  如果没有任何客户将委托与该事件挂钩,该字段将为空;否则该字段引用应在调用该事件时调用的委托。因此,调用事件时通常先检查是否为空,然后再调用事件。
  public class Form2 : System.Windows.Forms.Form
  {
  ... ...
  
  public event SelectionChangedEventHandler SelectionChanged;
  
  ... ...
  
  private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
  {
  if (SelectionChanged != null)
  {
  SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);
  SelectionChanged(this, E);
  }
  }
  }
  
  3、与事件挂钩
  
  为了开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用 += 将该委托写到事件可能连接到的其他任何委托上。
  public class Form1 : System.Windows.Forms.Form
  {
  ... ...
  
  private Form2 m_frm2;
  
  ... ...
  
  public Form1()
  {
  ... ...
  
  m_frm2 = new Form2();
  
  //与事件挂钩
  m_frm2.SelectionChanged += new SelectionChangedEventHandler(frm2_SelectionChanged);
  }
  
  ... ...
  
  private void button1_Click(object sender, System.EventArgs e)
  {
  m_frm2.ShowDialog();
  }
  
  private void frm2_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
  //获取事件传递过来的数据
  textBox1.Text = e.Selection;
  }
  }

2007年12月21日星期五

“GenerateResource”任务意外失败

错误    1    “GenerateResource”任务意外失败。
System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
   在 Microsoft.Build.Shared.ExceptionHandling.RethrowUnlessFileIO(Exception e)
   在 Microsoft.Build.Tasks.GenerateResource.NeedSeparateAppDomain()
   在 Microsoft.Build.Tasks.GenerateResource.Execute()
   在 Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound)

vs.net 2005保存时报这样的错误,之前所作的是更改了窗体的背景图片,不知所云,关了vs.net 2005,重新打开又好了,莫名其妙,啥子原因?

2007年12月19日星期三

IE与FireFox的兼容性问题及解决(转)

偷来的知识 嘿嘿

document.getElementById("apple") 以ID来访问对象,且一个ID在页面中必须是唯一的
document.getElementsByTagName("div")[0] 以标签名来访问对象

1.setAttribute(string name, string value):增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。

设置对象的属性则应该采用:
document.getElementById("apple").setAttribute("width","100")
document.getElementsByTagName("div")[0].setAttribute("width","100")
访问对象的属性则采用:
document.getElementById("apple").getAttribute("width")
document.getElementsByTagName("div")[0].getAttribute("width")

我们经常需要在JavaScript中给Element动态添加各种属性,这可以通过使用setAttribute()来实现,这就涉及到了浏览器的兼容性问题。
var bar = document.getElementById("foo");
bar.setAttribute("onclick", "javascript:alert('This is a test!');");
这里利用setAttribute指定e的onclick属性,简单,很好理解。但是IE不支持,IE并不是不支持setAttribute这个函数,
而是不支持用setAttribute设置某些属性,例如对象属性、集合属性、事件属性,也就是说用setAttribute设置style和onclick这些属性
在IE中是行不通的。为达到兼容各种浏览器的效果,可以用点符号法来设置Element的对象属性、集合属性和事件属性。
document.getElementById("foo").className = "fruit";
document.getElementById("foo").style.cssText = "color: #00f;";
document.getElementById("foo").style.color = "#00f";
document.getElementById("foo").onclick= function () { alert("This is a test!"); }


2、关于class和className
class属性在W3C DOM中扮演着很重要的角色,但由于浏览器差异性仍然存在。使用setAttribute("class", vName)语句动态设置
Element的class属性在firefox中是行的通的,在IE中却不行。因为使用IE内核的浏览器不认识"class",要改用"className";
同样,firefox 也不认识"className"。所以常用的方法是二者兼备:
     element.setAttribute("class", vName);
     element.setAttribute("className", vName);    //for IE

关于IE下TABLE无法插入新行的问题
IE下TABLE无论是用innerHTML还是appendChild插入<tr>都没有效果,而其他浏览器却显示正常。解决他的方法是,将<tr>加到TABLE的<tbody>元素中,如下面所示:

var row = document.createElement("tr");
var cell = document.createElement("td");
var cell_text = document.createTextNode("香蕉不吃苹果");
cell.appendChild(cell_text);
row.appendChild(cell);
document.getElementsByTagName("tbody")[0].appendChild(row);


window.event

IE:有window.event对象
FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event)

鼠标当前坐标
IE:event.x和event.y。
FF:event.pageX和event.pageY。
通用:两者都有event.clientX和event.clientY属性。

鼠标当前坐标(加上滚动条滚过的距离)
IE:event.offsetX和event.offsetY。
FF:event.layerX和event.layerY。

标签的x和y的坐标位置:style.posLeft 和 style.posTop
IE:有。
FF:没有。
通用:object.offsetLeft 和 object.offsetTop。

窗体的高度和宽度
IE:document.body.offsetWidth和document.body.offsetHeight。注意:此时页面一定要有body标签。
FF:window.innerWidth和window.innerHegiht,以及document.documentElement.clientWidth和document.documentElement.clientHeight。
通用:document.body.clientWidth和document.body.clientHeight。

添加事件
IE:element.attachEvent("onclick", func);。
FF:element.addEventListener("click", func, true)。
通用:element.onclick=func。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样的, onclick只有执行一个过程,而attachEvent和addEventListener执行的是一个过程列表,也就是多个过程。例如: element.attachEvent("onclick", func1);element.attachEvent("onclick", func2)这样func1和func2都会被执行。

标签的自定义属性
IE:如果给标签div1定义了一个属性value,可以div1.value和div1["value"]取得该值。
FF:不能用div1.value和div1["value"]取。
通用:div1.getAttribute("value")。

父节点、子节点和删除节点
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。

CSS:透明
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。

设置CSS 的STYLE
document.getElementById('look').style.cssText="display:none;";//通用
document.getElementById('look').setAttribute("style","display:none;");//firefox

2007年12月15日星期六

将截断字符串或二进制数据。\r\n语句已终止

哈哈 ,周五的晚上,明天周末,有些松懈
这是今天晚上唯一的成果
执行SqlTranaction成功了
下面的错误不是执行事务的关系

见到 “将截断字符串或二进制数据。\r\n语句已终止。”的错误信息开始有些不知所措,在网上查,原来是超了数据库字段长度所致,调整数据库字段长度,果然如此。

好长时间不用vs.net刚开始都不知道怎么查看运行中变量的信息,突然想起来在 即时窗口中 输入 “ ? 变量名” 然后回车,会输出当前这个变量的值

哈哈 ,还是有点印象的嘛。

? ex
{"将截断字符串或二进制数据。\r\n语句已终止。"}
    [System.Data.SqlClient.SqlException]: {"将截断字符串或二进制数据。\r\n语句已终止。"}
    Data: {System.Collections.ListDictionaryInternal}
    HelpLink: null
    InnerException: null
    Message: "将截断字符串或二进制数据。\r\n语句已终止。"
    Source: ".Net SqlClient Data Provider"
    StackTrace: "   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)\r\n   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)\r\n   在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\r\n   在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\r\n   在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n   在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)\r\n   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)\r\n   在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQu
ery(DbAsyncResult result, String methodName, Boolean sendToPipe)\r\n   在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()\r\n   在 psms.DBUtility.SqlHelper.ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, String cmdText, SqlParameter[] commandParameters) 位置 D:\\network\\psms\\DBUtility\\SQLHelper.cs:行号 91\r\n   在 psms.SQLServerDAL.InTable.insertInTable(InTableInfo data) 位置 D:\\network\\psms\\SQLServerDAL\\InTable.cs:行号 152"
    TargetSite: {Void OnError(System.Data.SqlClient.SqlException, Boolean)}

2007年12月12日星期三

Oracle insert大字符串方法


Oracle insert大字符串方法
try {
            conn = getConnection();
            pstmt = conn
                    .prepareStatement("Insert into offidutychk(decno,offino,checkdate,checkcontent) "+
                                        "Values(seq_decno.nextval, ?,?,?)");
            pstmt.setString(1, hezhi.getOffino());
            pstmt.setDate(2, hezhi.getCheckDate());
            pstmt.setCharacterStream(3,
                    new InputStreamReader(new ByteArrayInputStream(hezhi.getCheckContent().getBytes())), hezhi.getCheckContent().length());
            //pstmt.setString(3, hezhi.getCheckContent());
           
//            判断插入操作是否成功
            if (pstmt.executeUpdate() == 1)
                succ = true;
            else
                succ = false;
        } catch (Exception e) {
            succ = false;
            e.printStackTrace();
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            }
           
            closeConnection(conn);
        }







Oracle update大字符串方法
        Connection conn = null;
        PreparedStatement pstmt = null;
        int length=hezhi.getCheckContent().length();
        String s1="";
        String s2="";
        if(length>1000){
            s1=hezhi.getCheckContent().substring(0,1000);
            s2=hezhi.getCheckContent().substring(1000,length);
        }else{
            s1=hezhi.getCheckContent();
           
        }
try {
            conn = getConnection();
            pstmt = conn
                    .prepareStatement("update offidutychk set checkdate=?,checkcontent=?||? "+
                                        "where decno=?");
           
            pstmt.setDate(1, hezhi.getCheckDate());
           
//            pstmt.setCharacterStream(2,
//                    new InputStreamReader(new ByteArrayInputStream(hezhi.getCheckContent().getBytes())), hezhi.getCheckContent().length());
//            //pstmt.setString(2, hezhi.getCheckContent());
            pstmt.setString(2, s1);
            pstmt.setString(3, s2);
            pstmt.setInt(4, hezhi.getDecno());
           
//            判断更新操作是否成功
            if (pstmt.executeUpdate() == 1)
                succ = true;
            else
                succ = false;
        } catch (Exception e) {
            succ = false;
            e.printStackTrace();
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
           
            closeConnection(conn);
        }

重拾C#.net

扔了一年多的C#因为要做个东西,又拾起来了,跟原来不同的是现在用vs.2005了,用2003的时候就时刻关注着2005的发布,现在用2005了,好像又要出什么2008了,唉...跟不上脚步啊

记录一个小问题吧,在绑定ComboBox的时候想动态改变选定的值

原以为 comboBox.SelectItem = "":就行了

不灵,遂在网上查,原来要这么写

this.cob.SelectedItem = this.cob.Items[this.cob.FindString(" 选定的值")];

这大圈绕的......

记下来,以备后患 呵呵

接着干活.......

2007年11月28日星期三

启动Tomcat报错

ERROR (StandardManager.java:638) - Exception loading sessions from persistent storage
ERROR (StandardManager.java:372) - IOException while loading persisted sessions: java.io.EOFException
启动Tomcat报错
网上搜,说因为tomcat上次没有正常关闭,EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。把 work\Catalina\localhost\应用名\sessions.ser文件删除,OK

2007年11月28日 星期三

在apache-tomcat-5.5.17使用Struts Tag会抛出Failer to load or instantiate TagExtraInfo class:org.apache.struts.taglib.bean.CookieTei的异常
解决方法:删除WEB_INF/lib/javax.servlet.jsp.jar。(jsp jar包会引起冲突)

IE不能登录百度

好久没写日志了,今天饶有兴趣上来baidu,发现登录不了,我用的是傲游,转到Ie还是登录不了,而换到FireFox就很顺利地打开了,我晕
还发现google帐户也不能访问,再晕,难道我的Ie坏了?中毒了?只能这么想,也不能baidu和google把Ie给封了啊,呵呵,问题查找中

在eclipse中设置字体

今天来了兴趣,装了个eclipse的汉化包和 vss for eclipse的插件
开始不知为何老加载不上,在网上查把configuration文件夹删了,让eclipse重建,好,删,Shift+Delete,按下回车的那一刻后悔了,这要是不行就完蛋了,果不其然,eclipse起不来了,我晕
将eclipse文件夹重新覆盖
打开发现不是MyEclipse原来的字体了,用习惯了看着别扭
在字体中找啊找,看着哪个也不像,索性打开Myeclipse找到里面的字体原来是,Courier New
在eclipse中设置字体

2007年11月13日星期二

解决局域网访问共享工具

对于局域网内的朋友共享设置一直都比较麻烦的事情,关闭共享,又不知道如何为更安全的关闭,开启共享更担心共享安全性问题,这个小工具 方便大家的共享设置.

内附上设置原理,有兴趣的朋友也可以手动设置
关闭局域网共享
开通局域网共享(访问本机无需验证即可进入)
开通局域网共享(访问本机需填用户名及密码)

局域网互访第一关卡:
系统默认:利用IPC$通道可以建立空连接,匿名枚举出该机有多少帐户.显然有一定的安全隐患黑客可以利用扫描器,找到开放IPC$共享的电脑,匿名枚举出该机的所有用户帐号,如果用户的帐号不设密码,则容易被入侵.
建议禁止空连接.这样即使用户不设密码,上网也不会有多大的风险.但会影响到局域网互访.

局域网互访第二关卡:
本地安全策略-安全选项-帐户:使用空白密码的本地帐户只允许进行控制台登录.系统默认值是:已启用.说明:很多人的帐户并没有加密码.这样,当局域网中 别的电脑访问本机时,会弹出错误提示:登录失败:用户帐户限制......这是XP系统的一条安全策略造成的,防止别人趁你空密码时进入你的电脑.如果您 的电脑是家用的,没必要设密码,那就应把它设为:已停用.

局域网互访第三关卡:
控制面板-防火墙-例外-文件和打印机共享系统默认:不选.说明:所有的策略都设置好了,局域网依然不能访问,提示:您没有权限使用网络资源,找不到网络路径!这是因为XP还有一道关卡,就是防火墙,必须要经过防火墙的允许才行.

知识普及:
IPC$入侵是黑客惯用的手段.IPC$漏洞不能穿越路由器,所以用路由器上网的用户不必担心开放了局域网共享会有什么隐患.但要注意:路由器会被人扫描并窃取保存在里面的ADSL帐号密码.所以也不要大意,赶快把路由器默认的用户名和密码改掉.

下载地址

2007年11月12日星期一

2007年11月6日 星期二

//**读取properties配置文件的类

import java.util.*;
import java.io.*;

public final class ParseProperties {
private static Properties properties = null;

    private ParseProperties() {
    }

    public static String getProperties(String propStr){
    if(properties==null){
       try{
        InputStream is=ParseProperties.class.getClassLoader().getResourceAsStream("runqianServ.properties");
        properties = new Properties();
             properties.load(is);
             is.close();
       }catch(Exception e){
                e.printStackTrace();
            }
    }
        return properties.getProperty(propStr);
    }
   
    public static void main(String[] args) {
        String driver=ParseProperties.getProperties("runqianServ");
        System.out.println(driver);
    }


}

在apache-tomcat-5.5.17使用Struts Tag会抛出Failer to load or instantiate TagExtraInfo class:org.apache.struts.taglib.bean.CookieTei的异常。(这只是bean标签,其它标签异常略)
    解决方法:删除WEB_INF/lib/javax.servlet.jsp.jar。(jsp jar包会引起冲突)

2007年10月27日星期六

2007年10月26日 星期五

        对于javascript框架一直再用DWR,昨天听人说了个JQuery,不知道什么东西,在网上一查,也是个javascript框架,看论坛上的帖子好像功能还挺强大,落伍喽,就知道个DWR

        这不这两天就在折腾这东西,今天终于看到效果了

        下面是用DWR动态向table中添加行,并且设定行的css属性,比较爽,呵呵

function returnQueryRpt(list){
var cellfuncs = [  
            function(data){return data[1];},
            function(data){  
            var id = data[0];
            var rqname = data[2];
            return "<a href=\"javascript:printReport('" + rqname + "','" + id + "')\"><img src=\"<%=path%>/images/pic_edit.gif\" alt=\"填报或修改\" width=\"16\" height=\"16\" border=\"0\"></a>";  
            }
        ];
        DWRUtil.removeAllRows('addRowsBasic');   
        DWRUtil.addRows('addRowsBasic',list,cellfuncs,{  
        rowCreator:function(options) {  
            var row = document.createElement("tr");
            row.setAttribute("id",options.rowData.id);
            return row;  
        },  
        cellCreator:function(options) {  
            var td = document.createElement("td");
            td.style.color = "#003366";
            if(options.rowIndex%2==0){
             td.style.backgroundColor = "#F5f5f5";
            }else{
             td.style.backgroundColor = "#E6EEF7";
            }
            return td;  
        }         
        });
}



****************************************************************************************************************


2008-01-15补充
今天更新成了dwr2.0.2
有以下改动
1、首先启动报错
- Marking servlet dwr-invoker as unavailable
- Error loading WebappClassLoader
delegate: false
repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@9fdee
uk.ltd.getahead.dwr.DWRServlet
java.lang.ClassNotFoundException: uk.ltd.getahead.dwr.DWRServlet

dwr官方网站有如下解释
The DWR package has changed from uk.ltd.getahead to org.directwebremoting. There are deprecated stubs in place for backwards compatibility, however more future proof code will use the new package names. The change that will affect most people is the altered servlet name. The preferred name is now: org.directwebremoting.servlet.DwrServlet
改成<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>就OK了

2、上面的例子如果直接升级到2.0会直接出来html代码
要加上下面这句
dwr.util._escapeHtml = false;
如果为true,就直接
出来html代码

3、
DWRUtil 改成了 dwr.util


2007年10月22日星期一

2007年10月22日 星期一

看看与上次写东西的时间跨度,好家伙,整整三个月了,这三个月都极少上网了,极少登录了,最主要的原因是公司把外网给断了,没有明确的理由,就这样,网络离我远了很多,毕竟一天里大多的时间是在公司嘛

这三个月,经过了很多事情,最大的一件是我结婚了,哈哈,想想,之前和之后,也没什么变化嘛,还是在路上、干活、 吃喝拉撒睡,大家听说我结婚了都很吃惊,这就是效率,呵呵!大家祝福我吧,嘻嘻!

说现在为啥能上了呢,哈哈,不知哪位高人偷偷“挖了个隧道”偷偷上网,哈哈,咱也偷偷沾个光,希望这地下工作能长久维持啊!

工作方面,感觉老摆弄那些死沉滥调的代码也没什么意思,想学点新东西

在研究struts2,呵呵

2007年7月26日星期四

抽象类和接口的区别

抽象类和接口的区别
1、一个类可以实现任意多个接口,但它最多且只能作为一个抽象类的子类。
2、一个抽象类可以含有若干个非抽象方法,而接口的所有方法,无论是否显示的声明为抽象的,都是抽象的。
3、一个抽象类可以声明实例变量,其子类可以继承这些实例变量,而接口不能声明实例变量,不过接口可以声明static final修饰的域。
4、一个抽象类可以声明构造方法,而抽象类不能。
5、一个抽象类的可见类修饰符可以是public\protected\private或者无修饰符(表示包内可见),而接口的可见性修饰符只能是public,或者无修饰符。
6、一个抽象类的抽象方法(非抽象方法还可以是private,当然是不能被继承)可见性修饰符可以是public\protected或者无修饰符(表示包内可见),而一个接口的方法只能是public。
7、一个抽象类是从Object类派生来的,它继承了Object类的clone()和eauals()方法。

共同点
1、都不能被实例化
2、子类必须实现抽象类或接口中的全部抽象方法

2007年7月24日星期二

降低收益预期 关注基金十金

http://www.sina.com.cn 2007年07月23日 02:40 中国证券网-上海证券报

基金下半年投资策略

  ●我们判断下半年市场将宽幅震荡,投资基金注意两点:一是必须调整投资基金的收益与风险预期,降低基金的收益预期,提高基金投资的风险意识。二是基金在平衡和下跌的市场有其固有的优势,包括资金优势、选股的优势等等,这些优势保证了基金战胜市场的可能性更大。下半年完全靠资金推动市场的可能性不大,市场的主要驱动因素将回归到业绩与增长。基于这样的判断,基金下半年面临的系统性机会将较前期减少,但结构性机会将被进一步强化。就是要加强投资的风险意识,适当控制基金和股票的投资比例;在基金和股票的品种选择上,可以加大基金的投资占比,下半年的市场环境决定了做股民不如做基民。

  ●下半年重点配置的基金品种主要是封闭式基金和股票型基金。下半年基金仍将维持上半年一、二季度的收益排序顺序:封闭式基金———股票型基金———混合型基金———保本型基金———债券型基金。结合市场分析和基金选取的业绩与辅助性因素,我们推出下半年的基金“十金”:嘉实服务增值行业、华夏大盘精选、博时主题行业、上投摩根中国优势、易方达深证100ETF、建信优选成长、华夏上证50ETF、基金泰和( 2.711,0.09,3.28%)、基金安顺( 2.159,0.08,3.70%)、基金科汇( 3.268,0.07,2.28%)。⊙中信建投 黄常忠

  下半年基金运行的市场环境分析

  下半年我们对市场的总体判断是:股指可能在宽幅震荡中运行,市场存在的主要是结构性机会。影响或者说推动市场的诸多因素将发生局部变化,市场的流动性过剩虽不会得到完全的控制,但货币与财政政策的连续调控将会使这一问题得到缓解,下半年完全靠资金推动市场的可能性不大,市场的主要驱动因素将回归到业绩与增长。基于这样的判断,基金下半年面临的系统性机会将较前期减少,但结构性机会将被进一步强化,主要理由如下:

  1、基金的价值投资有望成为市场主流

  下半年市场将回归业绩驱动,宏观经济与上市公司业绩的高速增长将成为市场的主要驱动因素。国家统计局数据:1-5月份,全国规模以上工业企业实现利润9026亿元,比上年同期增长42.1%,宏观经济和微观经济主体依然良好。从对上市公司业绩增长的预期看,很多券商的下半年策略报告认为,7月开始公布的中期业绩增速约为50%-60%,2007年全年的盈利增长预期为40%-45%,2008年全年的盈利增长预期为25%。

  从具体的财务指标看,上市公司的赢利状况也明显改善,2005 年后企业营运效率的改善显著,且处于上升期;企业经营性现金流改善程度显著,募集的资金数倍于以往,企业内在的扩张冲动较大;息税前利润显著高于贷款利率,企业举债经营有较好的杠杆收益,微观领域对加息不敏感。规模的扩张和良好的营运效率,导致盈利的显著改善,至少一两年内看不到逆转的迹象。

  市场发生的结构性转变对于基金净值的影响非常明显,随着市场对于价值投资理念在5 、6月份的回归,基金在业绩上所体现出来的优势也越来越明显。在5 月份所经历的两次大的跌幅中,以基金重仓股为代表的大盘蓝筹板块成为最具抗跌性的品种,特别是在5 月底所经历的市场大幅回落中,大盘蓝筹板块所体现出的成长性和价值安全性有力的推动了基金业绩的相对提升,这一时期,主动投资的股票方向基金表现得相对强势,二季度,股票———股票型基金净值上涨35.01%,股票———指数型基金净值上涨32.73%,混合———偏股型基金净值上涨33.16%,混合———平衡型基金净值上涨33.16%。无论是从基金与市场指数的对比,还是从主动投资的股票方向基金与指数型基金的对比中,都充分展现了在市场震荡加剧的环境中,基金价值投资和分散风险所具备的优势。

  2、基金的资金优势将更加明显

  判断下半年市场的宽幅震荡走势以及市场由资金推动回归到价值推动的一个很重要的因素就是资金供求和资金结构的变化。

  基金等机构资金的优势将更加凸现。存量方面,股票方向基金资产净值在6月末已经达16711.20亿元,占沪深A股流通市值的31%左右。增量方面,伴随市场震荡的风险教育,股民开户数开始减少,很多理性投资者开始投向基金,调查显示,5月以来,市场的震荡下跌,基金并没有出现大规模的集中赎回,基金整体还呈现净申购状态,最新统计显示,二季度的震荡市场,基金的净申购仍高达1800亿。这样在总量上,基金等机构资金的市场占比将进一步提高;结构上基金投资相对集中于蓝筹、指标股,对市场的影响也更大。

  3、股指期货有望助推蓝筹行情

  股指期货是影响下半年市场的重要事件,海外的市场经验表明,股指期货虽不能改变市场的长期趋势,但对以基金持有的蓝筹为标的的指数成份股将带来更多的投资机会。指数期货的套期保值、资产配置功能,需要标的指数成份股的配合,市场对大市值品种的投资需求,市场对战略性筹码的需求,市场对大市值权重股的需求,使得蓝筹股稀缺性价值得到提升,机构通过调控此类股票的股价来影响指数的情况出现的可能性很大。

  机构投资者对成份股的更多配置,才能使其在现货、期货操作中把握更多主动。相对于无指数期货时代,增量资金的介入、存量资金对组合配置的调整,都将加大标的指数成份股的投资,由此,股指期货推出,标的指数成份股可能享受较高溢价。

  对于基金来讲,股指期货套利机制的存在,将增加标的指数的市场流动性,使得基金应对申购赎回的流动性成本更低,这样反过来又增加了标的蓝筹对基金的吸引力。两者的相互作用与强化,将使市场的价值投资理念得到加强,标的与蓝筹的机会更多。对于封闭式基金,股指期货推出带来的机会更多:1、股指期货增加了基金的投资品种和避险工具;2、股指期货增加了基金所持股票的流动性,而流动性是影响封闭式基金折价的重要因素;3、股指期货为封闭式基金提供了套利机会,到期时间越近,机会也明显,套利机会的存在也会减少封闭式基金的折价幅度;4、国际经验表明,有股指期货的市场封闭式基金的折价率较低。

  4、震荡市场有利于基金获得超额收益

  市场经验表明,基金在单边上涨的普涨行情中很难获得超越指数的超额收益。今年一季度的单边市场,基金大都输给了市场;今年二季度市场的强势整理,基金才凸现了部分优势,表现稍强于市场。从6月调整以来的基金表现,可以看出,调整的市场,基金的表现远好于指数。

  基金表现呈现的这种规律性,存在合理的解释。基金在单边牛市中,股票型基金在股票资产的配置比例上存在制度性弱点,单边牛市中,最有效的股票资产配置比例就是满仓操作,但因为目前股票型基金较少利用杠杆操作,且作为开放式基金需要保持一定的流动性以应对投资者的赎回需求,此外,一些股票型基金对股票资产的最高配置比例也有一定的限制,因此在实际操作中股票型基金无法达到满仓的状态。2007 年第一季度末,股票型基金的平均仓位只有80.98%,存在着近20%的低效率甚至无效率的仓位。此外,单边普涨行情,基金的行业和个股选择优势也无从发挥。

  涨时重势,跌时重质,在平衡或下跌的市场,基金的价值投资优势才能凸现出来,同时,股票资产配置比例的限制也成为了控制风险的有效手段。2007 年下半年股票型基金在行业选择和个股选择上的优势将重新显现。下半年我们预期市场的结构性分化,将以业绩、股指期货、人民币升值等因素展开,在这分化的过程中,迎合这些因素的基金———重点行业和重点股票将占据优势,获得超额收益。

  下半年基金投资策略

  根据以上分析,我们得出了基金系统性机会减少,结构性机会增多的判断。因此,投资基金的绝对收益预期应该降低,而相对收益预期可以提高。这样的判断落实到具体的投资策略上,就是要加强投资的风险意识,适当控制基金和股票的投资比例;在基金和股票的品种选择上,可以加大基金的投资占比,下半年的市场环境决定了做股民不如做基民。

  在基金品种的选取上,首先当然是考虑业绩,但过去的业绩并不代表未来。因此,除考察过去业绩排名和业绩稳定性之外,还应该结合对市场的整体和结构性行情判断,添加一些辅助性指标和因素。

  1、基金类型的选取。基于下半年震荡行情和基金在震荡行情中存在相对优势的判断,下半年收益较高的仍将是股票型基金。虽然股票型基金的绝对收益预期需要降低,但半年20%左右的增长预期也远高于保本和债券型基金。因此,在基金的收益排序预测上,下半年仍将维持上半年一、二季度的顺序:封闭式基金———股票型基金———混合型基金———保本型基金———债券型基金。下半年重点配置的基金品种主要是封闭式基金和股票型基金。

  2、基金规模的考虑。下半年,规模适中的基金取得较好收益的可能性较大,主要原因有:(1)经验表明,规模过大的基金没有取得过很好的历史业绩,这与管理经验和能力有关,也与市场的流动性有关。下半年预计市场的交易量将有所降低,市场的流动性将有所下降,大基金的流动性约束将更加明显。(2)小基金的制约因素除缺乏稳定性外,主要是与行情特点有关,下半年我们判断是蓝筹行情,小基金的投向一般不是大的蓝筹板块和大市值的龙头个股。

  3、基金管理公司的选取。

  基金管理公司的选取主要考虑两方面:一是基金规模,基金规模的大小决定基金公司的盈利水平,基金规模的大小在一定程度上也决定基金公司的生存。基金公司的核心竞争力在于人才,不论是人才的内部培养还是外部引进,都需要一定的物质基础,盈利能力和激励机制决定人才的流向。而优秀的管理人才反过来将推动基金公司的投资管理能力和风险控制能力,从而大幅提升基金公司的基金规模。二是成立时间,只有经历一定时间的市场考验,基金公司才能在制度上保证和提高投资管理能力和风险控制能力,才能在不同的市场环境下取得较为稳定的收益。

  参考以上辅助性因素后,基金的选取最后要落实到业绩上,考察业绩,既要考虑以往的排名,也要考虑收益的稳定。我们根据附表各阶段的基金表现,结合以上市场分析和基金选取的辅助性因素,推出下半年的基金“十金”(见表)。

  下半年基金“十金”

  基金名称                  管理人      单位净值(元)上半年净值增长(%)

  嘉实服务增值行业           嘉实          3.38          74.81

  华夏大盘精选               华夏          4.70          109.55

  博时主题行业               博时          2.11           96.03

  上投摩根中国优势           上投摩根       4.06          74.24

  易方达深证100ETF           易方达         4.04          106.55

  建信优选成长               建信           1.94           88.15

  华夏上证50ETF              华夏           2.89           64.15

  基金泰和                   嘉实           3.15           76.04

  基金安顺                   华安           2.61           66.35

  基金科汇                   易方达         3.47           65.90

相关报道:

  基金圈定下半年投资策略 四大投资关键词可诠释

  招商基金2007年下半年投资策略报告

  上投摩根基金投资策略:三条主线把握投资机会

新闻

加息了我们如何理财 专家提醒回避单一长期储蓄http://www.sina.com.cn 2007年07月23日 07:10 都市快报

  记 者 吴小敏

  距上次加息短短两个月之后,央行宣布再次加息,这已是今年4个月内(3月18日—7月21日)的第3次加息。与此同时,从8月15日起,存款利息税将从20%降为5%。业内人士分析,虽然央行连续加息,但目前流动性过剩的问题还未得到彻底解决,预计年内央行还会再加息一到两次。在加息周期里,如果只进行单一的长期储蓄,那资产可能还会遭受负利率的侵蚀,因此理财产品的选择显得尤为重要。本报邀请了银行专业人士,为市民理财提供建议。

  只存款躲不过资产缩水

  这次加息的一个重要原因是刚刚公布的CPI(居民消费价格指数)又创纪录,今年6月份创出了涨幅4.4%的新高。工行浙江省分行理财专家表示,如果CPI继续维持在目前高位,即使加息、降税“两箭齐发”还是难改负利率。这意味着,虽然表面上看,你的存款利息在不断增加,但实际上你的资产还是在“缩水”。

  以10万元存款为例,加息后一年期 存款利率为3.33%,如果扣除5%的利息税,那么税后存款利率为3.1635%,而6月份CPI涨幅高达4.4%。这就意味着1年期存款的实际利率为:3.1635%-4.4%=-1.2365%。也就是说,你将10万元存进银行,1年后它的实际购买力变成了98763.5元,有1236.5元在通货膨胀中“蒸发”了(由于每个月的CPI数据不尽相同,数据仅供参考)。

  就算退一步,以今年上半年CPI涨幅3.2%来计算,目前的存款依然是负利率。由此可见,虽然存款利息在不停地加,但单一存款的风险还是很大,必须通过理财来规避通货膨胀带来的资产缩水。

  中短期固定收益类产品加保本浮动收益类产品的组合,好处有:一、投资期限相对较短,在加息周期下能及时转换新产品;二、固定收益有保障,目前年收益率一般在3.5%—4.5%左右,可以在一定程度上弥补负利率的损失,固定收益类产品可以选择6个月到一年的信托型产品,比如浦发银行( 41.68,0.61,1.49%)最新推出的一款信托理财产品,年固定收益率达到4.38%;三、保本浮动收益类产品一般与汇率或者股票指数挂钩,如果达到预设条件,则可获得较高收益,如果没有达到预设条件,这些产品最终也是保本的。比如各家银行的打新股类理财产品就是一个不错的选择。

  国债可做资产配置

  利息税从20%降为5%,对国债和教育储蓄等免税理财产品冲击较大。以今年5月份发行的2007年凭证式(三期)国债为例,3年期票面年利率只有3.66%,而3年期银行存款的实际收益率为4.45%;5年期国债票面年利率为4.08%,也低于最新的同期银行存款4.96%的实际收益率。

  郭剑表示,投资国债最大的风险来自利率变化,事实上,国债与固定收益类理财产品很相似,都属于稳健型投资品种,但与理财产品灵活的投资期限相比,国债长达3-5年的投资期限使其面临很多的利率风险,尤其是在加息的周期下。对投资者来说,国债最好作为投资组合的一部分,而且不宜太多。

  利息税降为5%后,手续烦琐的教育储蓄事实上已经没有多大意义,对此,广发银行杭州分行理财专家表示,不妨用基金定投取代教育储蓄。

  债券型基金受冲击最大

  加息对基金投资的影响有多大?郭剑说,股票型基金的影响主要来自股市,加息后受到冲击最大的是债券型基金,往往央行宣布加息后的第一个工作日债市就出现大幅下跌,加息导致的债券价格下降将打破债券市场的平静,特别是一些中长期债券品种,对加息和债券市场调整更加敏感,债券价格仍有下跌空间。

  货币型基金严格来说不是投资工具,而是现金管理工具,投资货币型基金的目的大多用来替代活期存款,因为货币型基金的利率为2.5%左右,而流动性跟活期存款差不多。因此,货币型基金也不受加息影响。

  选择固贷要量力而行

  央行频繁加息,固定利率房贷(简称固贷)业务的优势越来越明显,也越来越受到购房者的关注。这两天,建行、农行、招行、中信、光大等一批开办固贷业务的银行,接到咨询固贷业务的电话猛增了几倍。据了解,从今年年初至今,杭州市场上固贷业务猛增五成以上。

  不过,郭剑提醒市民,固贷虽然可以避开不断的加息,但并非适合所有的人,一定要根据各自的经济实力量力而行。因为固贷的利率一般都会略高于同期央行利率,且期限都较短(最长10年),这也意味着如果选择固贷,月供压力要比普通的浮动利率房贷大出很多。另外,目前是处在加息周期,但过个几年说不定就要降息,这也存在一定风险。

2007年7月23日 星期一

      逼着自己写点东西,下面就println一些东西出来\n

      有是一个星期,时间过的真快,上周的心情,真是此起彼伏,就像sin曲线,呵呵,现在还好,好像让人看到希望了,天要亮了,呵呵,最近工作也是比较闲,使得有空想那些恼人的事,还不如忙的不可开交,没时间想,呵呵,希望天亮了。

      想想都有点紧张,呵呵,真的长大了啊,需要承担的越来越多了,同时权利也越来越大了,很多可以自己选择了,都是相辅相成的,钱真他妈的是好东西,呵呵。生活好像变得非常紧凑,说紧凑好像还褒义了点,变得没有时间思考,回味,休息。恩,这个不是人呆的城市就是这样的。挣钱...挣钱@#¥%……&****(

2007年7月18日星期三

2007年7月17日

     有半个月没写了,有时候想起来,没心情,就放下了,期间遇到几个问题解决了应该记下来,也没记,期间也许有些心情,写写或许好些,也没写,就这样,一晃半个月过去了,这些天公司里没什么要紧的事,闲的慌,感觉会的东西太少啊,很多一知半解啊。

      真他娘的生气,以前的哥们儿上来告诉我明年要当爹了,这鄙视也算是给我信儿了又?靠,级别见长啊,上次还是五一七天里头,提前了个把月,这次强啊,都上升到年了哦,太他妈强了,自己还在这以为多么一口闷呢,感情深嘛,唉,算了,忽觉身边没两个真格的时候铁的兄弟啊,净是他妈有事了冒出来没事了就认识你是谁啊。

过活。

2007年7月3日星期二

2007年7月2日 星期一

SQL Server和Oracle的常用函数对比

---------数学函数

1.绝对值
S:select abs(-1) value
O:select abs(-1) value from dual

2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual

3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from dual

4.取整(截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from dual

5.四舍五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346

6.e为底的幂
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from dual 2.71828182

7.取e为底的对数
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from dual; 1

8.取10为底对数
S:select log10(10) value 1
O:select log(10,10) value from dual; 1

9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from dual 16

10.取平方根
S:select SQRT(4) value 2
O:select SQRT(4) value from dual 2

11.求任意数为底的幂
S:select power(3,4) value 81
O:select power(3,4) value from dual 81

12.取随机数
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual;

13.取符号
S:select sign(-8) value -1
O:select sign(-8) value from dual -1

----------三角函数相关

14.圆周率
S:SELECT PI() value 3.1415926535897931
O:不知道

15.sin,cos,tan 参数都以弧度为单位
例如:select sin(PI()/2) value 得到1(SQLServer)

16.Asin,Acos,Atan,Atan2 返回弧度

17.弧度角度互换(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度

---------数值间比较

18. 求集合最大值
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a

O:select greatest(1,-2,4,3) value from dual

19. 求集合最小值
S:select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a

O:select least(1,-2,4,3) value from dual

20.如何处理null值(F2中的null以10代替)
S:select F1,IsNull(F2,10) value from Tbl
O:select F1,nvl(F2,10) value from Tbl

--------字符串函数

21.求字符序号
S:select ascii('a') value
O:select ascii('a') value from dual

22.从序号求字符
S:select char(97) value
O:select chr(97) value from dual

23.连接
S:select '11'+'22'+'33' value
O:select CONCAT('11','22')||33 value from dual

23.子串位置 --返回3
S:select CHARINDEX('s','sdsq',2) value
O:select INSTR('sdsq','s',2) value from dual

23.模糊子串的位置 --返回2,参数去掉中间%则返回7
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=996&d=dwn1rn
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发现,但是instr可以通过第四个参数控制出现次数
select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

24.求子串
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from dual

25.子串代替 返回aijklmnef
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

26.子串全部替换
S:Replace
O:select Translate('fasdbfasegas','fa','我' ) value from dual

27.长度
S:len,datalength
O:length

28.大小写转换 lower,upper

29.单词首字母大写
S:没发现
O:select INITCAP('abcd dsaf df') value from dual

30.左补空格(LPAD的第一个参数为空格则同space函数)
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from dual

31.右补空格(RPAD的第一个参数为空格则同space函数)
S:select 'abcd'+space(10) value
O:select RPAD('abcd',14) value from dual

32.删除空格
S:ltrim,rtrim
O:ltrim,rtrim,trim

33. 重复字符串
S:select REPLICATE('abcd',2) value
O:没发现

34.发音相似性比较(这两个单词返回值一样,发音相同)
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差
返回0-4,4为同音,1最高

--------------日期函数

35.系统时间
S:select getdate() value
O:select sysdate value from dual

36.前后几日
直接与整数相加减

37.求日期
S:select convert(char(10),getdate(),20) value
O:select trunc(sysdate) value from dual
select to_char(sysdate,'yyyy-mm-dd') value from dual

38.求时间
S:select convert(char(8),getdate(),108) value
O:select to_char(sysdate,'hh24:mm:ss') value from dual

39.取日期时间的其他部分
S:DATEPART 和 DATENAME 函数 (第一个参数决定)
O:to_char函数 第二个参数决定

参数---------------------------------下表需要补充
year yy, yyyy
quarter qq, q (季度)
month mm, m (m O无效)
dayofyear dy, y (O表星期)
day dd, d (d O无效)
week wk, ww (wk O无效)
weekday dw (O不清楚)
Hour hh,hh12,hh24 (hh12,hh24 S无效)
minute mi, n (n O无效)
second ss, s (s O无效)
millisecond ms (O无效)
----------------------------------------------

40.当月最后一天
S:不知道
O:select LAST_DAY(sysdate) value from dual

41.本星期的某一天(比如星期日)
S:不知道
O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

42.字符串转时间
S:可以直接转或者select cast('2004-09-08'as datetime) value
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

43.求两日期某一部分的差(比如秒)
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用两个日期相减(比如d1-d2=12.3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

44.根据差值求新的日期(比如分钟)
S:select dateadd(mi,8,getdate()) value
O:SELECT sysdate+8/60/24 vaule FROM DUAL;

45.求不同时区时间
S:不知道
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

-----时区参数,北京在东8区应该是Ydt-------
AST ADT 大西洋标准时间
BST BDT 白令海标准时间
CST CDT 中部标准时间
EST EDT 东部标准时间
GMT 格林尼治标准时间
HST HDT 阿拉斯加—夏威夷标准时间
MST MDT 山区标准时间
NST 纽芬兰标准时间
PST PDT 太平洋标准时间
YST YDT YUKON标准时间

Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

函数 Oracle Microsoft SQL Server
把字符转换为ASCII ASCII ASCII
字串连接 CONCAT (expression + expression)
把ASCII转换为字符 CHR CHAR
返回字符串中的开始字符(左起) INSTR CHARINDEX
把字符转换为小写 LOWER LOWER
把字符转换为大写 UPPER UPPER
填充字符串的左边 LPAD N/A
清除开始的空白 LTRIM LTRIM
清除尾部的空白 RTRIM RTRIM
字符串中的起始模式(pattern) INSTR PATINDEX
多次重复字符串 RPAD REPLICATE
字符串的语音表示 SOUNDEX SOUNDEX
重复空格的字串 RPAD SPACE
从数字数据转换为字符数据 TO_CHAR STR
子串 SUBSTR SUBSTRING
替换字符 REPLACE STUFF
将字串中的每个词首字母大写 INITCAP N/A
翻译字符串 TRANSLATE N/A
字符串长度 LENGTH DATELENGTH or LEN
列表中最大的字符串 GREATEST N/A
列表中最小的字符串 LEAST N/A
如果为NULL则转换字串 NVL ISNULL

日期函数

函数 Oracle Microsoft SQL Server
日期相加 (date column +/- value) or
ADD_MONTHS DATEADD
两个日期的差 (date column +/- value) or
MONTHS_BETWEEN DATEDIFF
当前日期和时间 SYSDATE GETDATE()
一个月的最后一天 LAST_DAY N/A
时区转换 NEW_TIME N/A
日期后的第一个周日 NEXT_DAY N/A
代表日期的字符串 TO_CHAR DATENAME
代表日期的整数 TO_NUMBER
(TO_CHAR)) DATEPART
日期舍入 ROUND CONVERT
日期截断 TRUNC CONVERT
字符串转换为日期 TO_DATE CONVERT
如果为NULL则转换日期 NVL ISNULL

转换函数

函数 Oracle Microsoft SQL Server
数字转换为字符 TO_CHAR CONVERT
字符转换为数字 TO_NUMBER CONVERT
日期转换为字符 TO_CHAR CONVERT
字符转换为日期 TO_DATE CONVERT
16进制转换为2进制 HEX_TO_RAW CONVERT
2进制转换为16进制 RAW_TO_HEX CONVERT

其它行级别的函数

函数 Oracle Microsoft SQL Server
返回第一个非空表达式 DECODE COALESCE
当前序列值 CURRVAL N/A
下一个序列值 NEXTVAL N/A
如果exp1 = exp2, 返回null DECODE NULLIF
用户登录账号ID数字 UID SUSER_ID
用户登录名 USER SUSER_NAME
用户数据库ID数字 UID USER_ID
用户数据库名 USER USER_NAME
当前用户 CURRENT_USER CURRENT_USER
用户环境(audit trail) USERENV N/A
在CONNECT BY子句中的级别 LEVEL N/A

合计函数

函数 Oracle Microsoft SQL Server
Average AVG AVG
Count COUNT COUNT
Maximum MAX MAX
Minimum MIN MIN
Standard deviation STDDEV STDEV or STDEVP
Summation SUM SUM
Variance VARIANCE VAR or VARP

Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:
EXTRACT(YEAR FROM 日期)

来源:http://borland.mblogger.cn/jinjazz/posts/18954.aspx

心情不好,心慌,喘不上起来,如何是好....,想想也没什么事啊,天还没塌,只是不知道如何是好,没有我可走的路,好像在一个独木桥上哪边都有一条猛兽在那恶狠狠的看着我,哪个都不好惹啊,真希望自己是诸葛亮,运筹帷幄,真希望自己是中500万的那个,好多事也就容易了,呵呵,可惜,自己什么狗屁都不是,早上骑车背着那笔记本(公家的)上班,里面还装了些乱七八糟的,真沉,一路上腰都挺不起来,压死我了,呵呵。可是又有什么办法呢,没有别的地方可放。

唉...说的自己有点可怜,突然想起被某人看到又该说我活该了,呵呵,唉...,无言以对,不清楚什么才是大家都认为正确的。虽然都是猛兽,但都不想惹,Sorry

2007年6月26日星期二

2007年6月25日 星期一

天气好热,37摄氏度,接着完成要我做的页面,做完了数数一共建了24个jsp,功夫不负有心人啊,哈哈哈,要下班的时候,机子慢的要死,干脆重启,闲自己关机太慢,干脆强制关机重启,奶奶的,没想到重起来,eclipse起不来了,提示要我运行chkdsk,折腾了半天终于起来了,chkdsk /f

2007年6月22日星期五

2007年6月22日 星期五

今天

一星期又过去了,过的真快,好家伙,呵呵,:-),补了一早上blog,省得小李儿拿这个说事儿,给自己不写找理由,看,我补上了,你补补我瞅瞅?/

接着做苦差事.....

2007年6月21日 星期四

做了一天那些页面,烦琐,查那么多字段出来显示,我得一个一个对应,真他娘的苦差事。

小李儿这周开始上班啦,在这恭喜一下小李儿,还希望天天开开心心,别想那么多烦恼。另外工作刚开始肯定会遇到点困难的,要胜不骄败不馁。

图片上字是不是写错了还是故意的?!呵呵

2007年6月20日 星期三

总结了好几天了,好像说的都是些不令人满意不令人高兴的事 哦。也是,这几天怎么这么没有高兴的事呢,好久没有了。来上班了了,头儿问我培训的那系统怎么能应用到我们现有开发的系统中,我竟然说不出来,就是不知道怎么用,狂晕,早知道问问,呵呵,尴尬了,干什么去了,培训了半天啥不知道。呵呵。下午,因为现在的系统没什么事了,给我分了些另一个系统的开发工作,没什么技术含量就是烦琐,想想狗日的是不是整我呢啊。哈哈哈

2007年6月19日 星期二

接着无聊的培训,无聊

晚上回去可早了一会儿,车子还没气了,还得修车,气死人了,还碰上一个孬师傅蒸腾了半天也没弄好,没办法,换人

周末,当年的同宿同学打过电话来要帮忙找当年的成绩单急用,义不容辞,马上行动,扫描,上网,发送过去,可惜没派上用场,后来通过短信聊了几句,听说一个自己觉得处的还不错的同学结婚了,在石家庄请的客,觉得不是滋味,没叫我去,呵呵,咱真是甘愿想花那钱啊,跟别的哥们发这牢骚,哥们说不怪他,可能你什么什么原因什么原因,可我就是生气。呵呵,唉....算了,也可能是我,当时也没上赶着问问人家,什么时候结婚啊,具体什么时间啊,娘的,我也不是你爹。

2007年6月18日 星期一

培训不令人满意,知道离住的地方不远,9点培训,8点多一点就到了,在信息工程学院里转,买了点吃的当早餐,看毕业生们穿着学士服在照相,不由想起想当年,哈哈,转眼毕业都一年喽,到了要培训的教室,竟然一个人没有,等,九点整才有人来开门,我晕,真娘的准时,可是学生们一个没来,最后等到10点才开始,我晕,中午吃饭,老师带我们到食堂餐厅,指引我们到了一个单间,都落座,发现老师不见了,等会儿吧,等,不来,大家还是吃吧,算了,不说这些没用的了。

讲的内容嘛,自己感觉比较无聊,就是一个自助建站系统嘛,在网上见过好几个这样的网站,不需要任何编程,会操作IE就行了。无聊,还好,能上网,呵呵呵!

2007年6月15日 星期五

我的天啊,整整拉了一星期没写过了,没那么清闲了,要是俺有个笔记本是的也就写了,呵呵呵呵呵,想想,周五下班了都头儿跑过来要我周一去一个地方培训,什么TRS,WCM5.2的培训,没听说过,据说是一个内容管理系统,服从安排吧,还好离我住的地方不远。

2007年6月15日星期五

2007年6月14日 星期四

     装了个润乾报表开发工具,关了eclipse再打开就起不来了,弹出个窗口说让我看.log,我晕,一大堆异常,捡了一个 java.lang.NoClassDefFoundError: org/eclipse/core/runtime/Plugin在google搜,说jdk的问题,在环境变量里的path,jdk放在前面去就好了,狗日的。

path:    D:\oracle\ora90\bin;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Sun\AppServer\jdk\bin;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Rational\common

   path:    C:\Sun\AppServer\jdk\bin;D:\oracle\ora90\bin;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Rational\common

2007年6月13日星期三

2007年6月13日 星期三

今天早上出来,发现自行车又没气了,我狂晕,这是怎么回事,刚换的新胎啊,疯了,今天本来就吃来晚了,没办法,去坐公交吧,还好,车在还可以接受的时间里来了,上车,还好,人还不多,站了一会儿还有座了,还好,路上还不是很堵,看着那些乱加塞儿的小p车,真生气,他一个加塞儿,让后面的好多车以及车上我们这么多等车上班的人等他把塞儿加进去,素质,素质,还好,8点55分下了车,奔向电梯,"还好",等电梯的超人多,爬楼梯,狂喘着爬上了12层,打卡,看时间,还好,8点59分,接着喘...

2007年6月12日 星期二

     今天有活干,哈哈,做了个页面,最后搞美观的时候,疯了,那表格怎么就对不齐的,狗日的,俺就搞这个费劲,最后折腾到6点多,终于像个样子了,下班回家更倒霉,这几天车子老没气,去修还找不到漏气的地方,回去的时候发现又没多少了,不过还能骑,想想,省得明天早上着急还是打点吧,花了两毛钱打气,可没走出一站地,一点没了,我狂晕,这不玩我呢吗,不打没准还骑回去,推着走,可找到一个修车的,我说师傅有内胎没给我换个新的算了,这个时候天开始掉雨点,娘的,早不下晚不下,师傅很利索,刷刷刷换上了,车闸又弄不好了,说我那有毛病得换新的,没办法我说先把闸线给我松开吧(不松开老刹着车),这个时候雨开始哗下起来了,赶忙给了钱找地方避雨,等了10分钟,下小了,出发,没走出多远,发现地面是干的,连湿都没湿,我狂晕,难到就我修车那块下了?!下的还挺大,都积水了,以后的路上,路面都是干的,找了个修车的修闸,我这骑车的没刹车可不行,又花了6块,我发现这些修车的都娘的不实在,狂要钱,高薪啊,等我买些工具回来,有毛病了自己修。

     今天遇上一个问题,用javascript的window.location='';想转向另一个页面,这个链接是拼起来的,中间有一些用户输入的参数,可有中文的时候会是乱码,这哪行,想起来,昨天晚上刚学了一招,用String str = java.net.URLEncoder.encode("/中文.jsp","GBK"); //使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。倒是相关,不对症啊,问人,google,结果找到对症的说,找到tomcat的server.xml中的<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>

加入URIEncoding="GBK"即可,还真灵,呵呵呵。