数据加载中……

2009年5月17日

JavaScript双击文本实现可编辑

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>双击文本实现可编辑</title>
<style>
<!--这李预先定义text的css展示效果-->
input.a {border:1px solid #fff;background:#fff;}
input.b {border:1px solid #369;background:#fff;}
</style>
</head>
<body>
<a href="http://www.jrose.cn">JavaScript之家欢迎你</a>
<input class="a" id="inputText" readonly value="www.jrose.cn"  type="text" /><input type="submit" value="修改" style="display:none;" id="submit" />
<script type="text/javascript">
/*
在JavaScript中其实实现这种需求的方式有很多,这里只提供了其中的一种方法,
就是先把当前text的css属性定义好,这样看起来好像是用了两个组件,一个text,一个label.
实际上就只使用了一个text.当热第二种方法就是使用前面介绍的两个组件.规定到底都是DHTML的灵活运用.
<a href="http://www.jrose.cn">JavaScript之家</a>
*/
var inputText = document.getElementById("inputText");
var subm = document.getElementById("submit");
//很简单的操作,注册两个函数
inputText.ondblclick = function()
{
this.readOnly = false;
this.className = "b";
subm.style.display = "";
}
subm.onclick = function()
{
inputText.readOnly = true;
inputText.className = "a";
this.style.display = "none";
}
</script>
</body>
</html>

posted @ 2009-05-17 08:50 jrose 阅读(735) | 评论 (0)编辑 收藏

2009年5月13日

JAVA TIMER用法学习

 

JAVA TIMER用法学习

     Timer类是用来执行任务的类,它接受一个TimerTask做参数

     Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率.看个简单的例子:



import java.io.IOException;
import java.util.Timer;

public class TimerTest {
       
    
public static void main(String[] args){

54com.cn


        Timer timer = 
new Timer();
        timer.schedule(
new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
        
while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了
            
try {
                
int ch = System.in.read();
                
if(ch-'c'==0){
                    timer.cancel();//
使用这个方法退出任务
                    
                }
            } 
catch (IOException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
    
static class MyTask extends java.util.TimerTask{
        @Override
        
public void run() {
            
// TODO Auto-generated method stub
            System.out.println("________");
        }
    }


    
    
    
    
}


    如果你使用的是JDK 5+,还有一个scheduleAtFixedRate模式可以用,在这个模式下,Timer会尽量的让任务在一个固定的频率下运行,举例说明:在上面的例子中,我们想让MyTask在1秒钟后,每两秒钟执行一次,但是因为java不是实时的(其实java实时性很差.....),所以,我们在上个程序中表达的原义并不能够严格执行.如果我们调用的是scheduleAtFixedRate,那么,Timer会尽量让你的Task执行的频率保持在2秒一次.运行上面的程序,假设使用的是scheduleAtFixedRate,那么下面的场景就是可能的:1秒钟后,MyTask 执行一次,因为系统繁忙,之后的2.5秒后MyTask 才得以执行第二次,然后,Timer记下了这个延迟,并尝试在下一个任务的时候弥补这个延迟,那么,1.5秒后,MyTask 将执行的三次."以固定的频率而不是固定的延迟时间去执行一个任务"

下面给出一个复杂点的例子,其中告诉大家怎么退出单个TimerTask,怎么退出所有Task

package MyTimerTest;

import java.io.IOException;
import java.util.Timer;




/* JavaScript之家http://www.jorse.cn
 * 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务
 * 退出任务,退出定时器.
 * 因为TimerTask的status域是包级可访问的,所以没有办法在java.util.包外
 * 得到其状态,这对编程造成一些不便 .我们不能判断某个Task的状态了.
 * 
 */


public class TimerTest {

    
public static void main(String[] args) {
        Timer timer = 
new Timer();
        MyTask myTask1 = 
new MyTask();
        MyTask myTask2 = 
new MyTask();
        myTask2.setInfo("myTask-2");
        timer.schedule(myTask1, 1000, 2000);
        timer.scheduleAtFixedRate(myTask2, 2000, 3000);
        
while (true{

feedom.net


            
try {


                
byte[] info = new byte[1024];
                
int len = System.in.read(info);
                String strInfo = 
new String(info, 0, len, "GBK");//从控制台读出信息
                if (strInfo.charAt(strInfo.length() - 1) == ' ') {
                    strInfo = strInfo.substring(0, strInfo.length() - 2);
                }
                
if (strInfo.startsWith("Cancel-1")) {                     myTask1.cancel();//退出单个任务
                    // 其实应该在这里判断
myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到
                    // myTask2的状态,所以,这里不能做出是否退出循环的判断.
                } else if (strInfo.startsWith("Cancel-2")) {

feedom.net


                    myTask2.cancel();
                } 
else if (strInfo.startsWith("Cancel-All")) {

JavaScript之家http://www.jorse.cn


                    timer.cancel();
//退出Timer
                    break;
                } 
else {
                    
// 只对myTask1作出判断,偷个懒^_^
                    myTask1.setInfo(strInfo);
                }
            } 
catch (IOException e) {                 // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

JavaScript之家http://www.jorse.cn
    }

    
static class MyTask extends java.util.TimerTask {

54com.cn


        String info = "^_^";

        @Override
        
public void run() {


            
// TODO Auto-generated method stub
            System.out.println(info);
        }

        
public String getInfo() {
            
return info;
        }

        
public void setInfo(String info) {


            
this.info = info;
        }

    }

}
JavaScript之家http://www.jorse.cn

posted @ 2009-05-13 06:36 jrose 阅读(69997) | 评论 (2)编辑 收藏

2009年5月12日

MYSQL存储过程

 

 

drop procedure if exists pro_rep_shadow_rs;

delimiter |

----------------------------------

-- rep_shadow_rs

-- 用来处理信息的增加更新和删除

-- 每次只更新上次以来没有做过的数据

-- 根据不同的标志位

-- 需要一个输出的参数,

-- 如果返回为0,则调用失败,事务回滚

-- 如果返回为1,调用成功,事务提交

--

-- 测试方法

-- call pro_rep_shadow_rs(@rtn);

-- select @rtn;

----------------------------------

create procedure pro_rep_shadow_rs(out rtn int)

begin

    -- 声明变量,所有的声明必须在非声明的语句前面

    declare iLast_rep_sync_id int default -1;

    declare iMax_rep_sync_id int default -1;

    -- 如果出现异常,或自动处理并rollback,但不再通知调用方了

    -- 如果希望应用获得异常,需要将下面这一句,以及启动事务和提交事务的语句全部去掉

    declare exit handler for sqlexception rollback;

    -- 查找上一次的

    select eid into iLast_rep_sync_id from rep_de_proc_log where tbl='rep_shadow_rs';

    -- 如果不存在,则增加一行

    if iLast_rep_sync_id=-1 then

     insert into rep_de_proc_log(rid,eid,tbl) values(0,0,'rep_shadow_rs');

     set iLast_rep_sync_id = 0;

    end if;

   

    -- 下一个数字

    set iLast_rep_sync_id=iLast_rep_sync_id+1;

    -- 设置默认的返回值为0失败

    set rtn=0;

   

    -- 启动事务

    start transaction;

    -- 查找最大编号

    select max(rep_sync_id) into iMax_rep_sync_id from rep_shadow_rs;

    -- 有新数据

    if iMax_rep_sync_id>=iLast_rep_sync_id then

       -- 调用

       call pro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id);

       -- 更新日志

       update rep_de_proc_log set rid=iLast_rep_sync_id,eid=iMax_rep_sync_id where tbl='rep_shadow_rs';

    end if;

   

    -- 运行没有异常提交事务

    commit;

    -- 设置返回值为1

    set rtn=1;

end;

|

delimiter ;

drop procedure if exists pro_rep_shadow_rs_do;

delimiter |

---------------------------------

-- 处理指定编号范围内的数据

-- 需要输入2个参数

-- last_rep_sync_id 是编号的最小值

-- max_rep_sync_id 是编号的最大值

-- 无返回值

---------------------------------

create procedure pro_rep_shadow_rs_do(last_rep_sync_id int, max_rep_sync_id int)

begin

    declare iRep_operationtype varchar(1);

    declare iRep_status varchar(1);

    declare iRep_Sync_id int;

    declare iId int;

    -- 这个用于处理游标到达最后一行的情况

    declare stop int default 0;

    -- 声明游标

    declare cur cursor for select id,Rep_operationtype,iRep_status,rep_sync_id from rep_shadow_rs where rep_sync_id between last_rep_sync_id and max_rep_sync_id;

    -- 声明游标的异常处理,设置一个终止标记

    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1;

   

    -- 打开游标

    open cur;

   

    -- 读取一行数据到变量

    fetch cur into iId,iRep_operationtype,iRep_status,iRep_Sync_id;

    -- 这个就是判断是否游标已经到达了最后

    while stop <> 1 do

       -- 各种判断

        if iRep_operationtype='I' then

           insert into rs0811 (id,fnbm) select id,fnbm from rep_shadow_rs where rep_sync_id=iRep_sync_id;

       elseif iRep_operationtype='U' then

       begin

           if iRep_status='A' then

              insert into rs0811 (id,fnbm) select id,fnbm from rep_shadow_rs where rep_sync_id=iRep_sync_id;

           elseif iRep_status='B' then

              delete from rs0811 where id=iId;

           end if;

       end;

       elseif iRep_operationtype='D' then

           delete from rs0811 where id=iId;

       end if;   

      

       -- 读取下一行的数据 

       fetch cur into iId,iRep_operationtype,iRep_status,iRep_Sync_id;

    end while;    -- 循环结束

    close cur; -- 关闭游标

 end;

|

posted @ 2009-05-12 04:25 jrose 阅读(244) | 评论 (0)编辑 收藏

2009年5月11日

Java处理json学习

 

  php5处理json就2个函数;方便的很;但常用的java处理起来就很麻烦;通常用JSON-lib许多包;

我总结了一个简单的java处理json的方法如下:

1:下载另外一个java的小包就可以了;  http://www.JSON.org/java/json_simple.zip

里面有源码和文档例题和编程的lib包;编程只需要json_simple.jar这个包就行;才10几k。

2:在后端java中解析json的代码

a:把json字符串变成java数组对象形式:

String s="[0,{""1"":{""2"":{""3"":{""4"":[5,{""6"":7}]}}}}]";
  Object obj=JSONValue.parse(s);
  JSONArray array=(JSONArray)obj;
  System.out.println(array.get(1));
b
把java对象形式变成json字符串:

  JSONObject obj2=new JSONObject();
  obj2.put("phone","123456");
  obj2.put("zip","7890");
  obj.put("contact",obj2);
  System.out.print(obj);

c把java数组形式变成json字符串

  JSONArray array=new JSONArray();
  array.add("hello");
  array.add(new Integer(123));
  array.add(new Boolean(false));
  array.add(null);
  array.add(new Double(123.45));
  array.add(obj2);//see above
  System.out.print(array);

3:在前端的javascript中解析json的代码:

var Json = {//把javascript的数组或对象转换成Json格式的字符串
 toString: function(obj){
 switch(typeof(obj)){
   case 'string':
    return '"' + obj.replace(/(["""])/g, '""$1') + '"';
   case 'array':
    return '[' + obj.map(Json.toString).join(',') + ']';
   case 'object':
    var string = [];
    for (var property in obj) string.push(Json.toString(property) + ':' + Json.toString(obj[property]));
    return '{' + string.join(',') + '}';
   case 'number':
    if (isFinite(obj)) break;
   case false:
    return 'null';
  }
  return String(obj);
 },//把Json格式的字符串转换成javascript的数组或对象
 evaluate: function(str, secure){
  return ((typeof(str) != 'string') || (secure && !str.test(/^("("".|[^""""n"r])*?"|[,:{}"["]0-9."-+Eaeflnr-u "n"r"t])+?$/))) ? null : eval('(' + str + ')');
 }
}

posted @ 2009-05-11 06:27 jrose 阅读(1794) | 评论 (0)编辑 收藏
仅列出标题