myJavaBlog

java世界
随笔 - 43, 文章 - 0, 评论 - 2, 引用 - 0
数据加载中……

教你如何将普通表转换为分区表

需求描述:
一个表已经上线,但是上线之后发现该表的数据量很大,而且会删除历史数据,该表上要建立多个唯一索引,现在的问题就是在建表的时候是建立了一个普通表,现在需要将普通表转化为分区表,并尽量减少对应用的影响
1、使用ctas的方式来建立
create table t1
(
ID VARCHAR2(60) not null,
a VARCHAR2(60) not null,
b VARCHAR2(60) not null,
create_time TIMESTAMP(6) not null,
d NUMBER(2) not null,
e VARCHAR2(400) not null,
OUTER_ID VARCHAR2(100)
)----原表


---建立分区表:
create table t1_new
(
ID_1 ,
a ,
b ,
create_time ,
d ,
e ,
OUTER_ID 
)partition by range (ID_1)
(
partition p_t1_new values less than ('201204'),
partition p_t2_new values less than ('201205'))
as
select * from t1;----此时应用还是不断的往t1表中插入数据-


alter table t1_new add constraints pk_t1_new primary key (id) using tablespace local index_tablespace;----建立本地索引为了删除历史数据
/alter table t1_new add constraints pk_t1_new primary key (id_1) using index local ;


但是应用还在outer_id上建立唯一索引
create unique index IDX_t1_new_2 on t1_new (OUTER_ID) LOCAL ;
此时报


ORA-14039: 分区列必须构成 UNIQUE 索引的关键字列子集
原来oracle不支持在分区表上创建PK主键时主键列不包含分区列,创建另外的约束(unique)也不可以。
为了解决这个问题,两种方法
1、将分区键加到唯一索引里面
2、将local索引变为global索引----此时当进行历史数据删除的时候会导致索引失效
权衡之后在outer_id上建立普通索引




alter table t1 rename to t1_bak;
alter table t1_new rename to t1;
在进行ctas之后需要进行数据完整新检查,而且在进行rename的时候会导致应用连接失效(也有可能在进行alter的时候获取不到表锁而失败)---适用于修改不很频繁的表


2、使用交换分区的方式
----原表
create table t1
(
ID VARCHAR2(60) not null,
a VARCHAR2(60) not null,
b VARCHAR2(60) not null,
create_time TIMESTAMP(6) not null,
d NUMBER(2) not null,
e VARCHAR2(400) not null,
OUTER_ID VARCHAR2(100)
)
alter table t1 add constraints pk_t1 primary key(id) ;


新表
create table t1_new
(
ID_1 ,
a ,
b ,
create_time ,
d ,
e ,
OUTER_ID 
)partition by range (ID_1)
(
partition p_t1_new values less than ('201204'),
partition p_t2_new values less than ('201205'))
alter table t1_new add constraints pk_t1_new primary key (id_1) using index local ;


ALTER TABLE t1_new EXCHANGE PARTITION p_t1_new WITH TABLE t1 without validation;----要不要加上without validation(加上的话就是不验证数据是否有效,直接全部放在p_t1_new分区中)
然后进行rename操作


优点:只是对数据字典中分区和表的定义进行了修改,没有数据的修改或复制,效率最高。如果对数据在分区中的分布没有进一步要求的话,实现比较简单。在执行完RENAME操作后,可以检查T_OLD中是否存在数据,如果存在的话,直接将这些数据插入到T中,可以保证对T插入的操作不会丢失。
不足:仍然存在一致性问题,交换分区之后RENAME T_NEW TO T之前,查询、更新和删除会出现错误或访问不到数据。如果要求数据分布到多个分区中,则需要进行分区的SPLIT操作,会增加操作的复杂度,效率也会降低。
适用于包含大数据量的表转到分区表中的一个分区的操作。应尽量在闲时进行操作。


3、在线重定义
----原表
create table t1
(
ID VARCHAR2(60) not null,
a VARCHAR2(60) not null,
b VARCHAR2(60) not null,
create_time TIMESTAMP(6) not null,
d NUMBER(2) not null,
e VARCHAR2(400) not null,
OUTER_ID VARCHAR2(100)
)
alter table t1 add constraints pk_t1 primary key(id) ;


新表
create table t1_new
(
ID_1 ,
a ,
b ,
create_time ,
d ,
e ,
OUTER_ID 
)partition by range (ID_1)
(
partition p_t1_new values less than ('201204'),
partition p_t2_new values less than ('201205'))
alter table t1_new add constraints pk_t1_new primary key (id_1) using index local ;


EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T1', DBMS_REDEFINITION.CONS_USE_PK);

EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T1', 'T1_NEW',DBMS_REDEFINITION.CONS_USE_PK);
(转载请注明出处:[url=http://www.k6567.com]e世博[/url]

[url=http://www.d9732.com]澳门博彩[/url]

posted @ 2012-04-19 15:31 夏凡 阅读(1134) | 评论 (0)编辑 收藏

聊聊关于请求重定向与请求发的比较

尽管httpservletresponse.sendredirect方法和requestdispatcher.forward方法都可以让浏览器获得另外一个url所指向的资源,但两者的内部运行机制有着很大的区别。下面是httpservletresponse.sendredirect方法实现的请求重定向与requestdispatcher.forward方法实现的请求转发的总结比较:

(1)requestdispatcher.forward方法只能将请求转发给同一个web应用中的组件;而httpservletresponse.sendredirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对url重定向到其他站点的资源。如果传递给httpservletresponse.sendredirect 方法的相对url以“/”开头,它是相对于整个web站点的根目录;如果创建requestdispatcher对象时指定的相对url以“/”开头,它是相对于当前web应用程序的根目录。

(2)调用httpservletresponse.sendredirect方法重定向的访问过程结束后,浏览器地址栏中显示的url会发生改变,由初始的url地址变成重定向的目标url;而调用requestdispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的url地址不变。

(3)httpservletresponse.sendredirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个url的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。requestdispatcher.forward方 法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

(4)requestdispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而httpservletresponse.sendredirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个web应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用httpservletrequest.setattribute方法传递预处理结果,那就应该使用requestdispatcher.forward方法。不同web应用程序之间的重定向,特别是要重定向到另外一个web站点上的资源的情况,都应该使用httpservletresponse.sendredirect方法。

(5)无论是requestdispatcher.forward方法,还是httpservletresponse.sendredirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。  
(转载请注明出处:[url=http://www.a9832.com]博彩网[/url]
[url=http://www.tswa.org]博彩通[/url]

posted @ 2012-04-19 14:34 夏凡 阅读(215) | 评论 (0)编辑 收藏

简单介绍java中Runtime类和Process类

在java.lang包当中定义了一个Runtime类,在java中对于Runtime类的定义如下:
public class Runtime
extends Object
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。
根据上面的话,我们知道对于每一个java程序来说都只有一个Runtime类实例,而且不能由用户创建一个Runtime实例,既然不能创建那么这个类的实例的作用是什么呢?它提供了应用程序和应用程序正在运行的环境的一个接口。Runtime不能由我们创建,我们可以通过Runtime类的一个静态方法,得到一个Runtime类的实例。获取了这个实例之后我们就可以获取java虚拟机的自由内存、也可以获取这个java虚拟机的总的内存等(具体的方法可以参照java帮助文档Runtime类的方法学习),也就是说这个类提供了应用程序了环境的接口。下面我们举一个例子程序:
Runtime rt=Runtime.getRuntime();
System.out.println(rt.freeMemory());
System.out.println(rt.totalMemory());//结果返回的是数字
Runtime类还有一个好处就是可以执行一个外部的程序,可以调用Runtime类的exec()方法传入一个命令(exec()方法有几个重载的方法,可以自己学习),创建一个子进程,结果返货一个Process类的实例,通过这个实例我们可以管理创建的子进程。对于Process类在java帮助文档中描述如下:
public abstract class Process
extends Object
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。

public abstract class Process
extends Object
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
下面我们接着上面的代码继续写:
try{
rt.exec("notepad");}
catch(Exception e){
e.printStackTrace;}//在使用exec()方法的时候会抛出一个异常,我们需要捕获
这段代码,是运行在windows上的,它调用了windows系统的记事本程序。举一反三我们同样可以用这个方法去编译java的文件,只是传入的参数是“javac ***.java”。
对于Process类的实例主要作用是创建一个可以管理的进程,并对它进行管理。Process类还有几个方法分别是destroy() 杀掉子进程、exitValue()返回子进程的出口值、getErrorStream()获取子进程的错误流,错误流获得由该 Process 对象表示的进程的错误输出流传送的数据,还有获取输入流输出流请读者自己参照java帮助文档学习。
这是自己在接触Runtime类和Process类的时候学到的一些东西,分享出来希望对大家有用,大家看见了若是有不对的地方,请指出来。 
(转载请注明出处:[url=http://www.live588.org]淘金盈[/url]
[url=http://www.10086money.com]时尚资讯[/url])

posted @ 2012-04-19 10:21 夏凡 阅读(818) | 评论 (0)编辑 收藏

关于Java多线程1—程序、进程、线程的一些比较

许多人对于程序、进程、线程这几个概念许多人都分的不是很清楚,下面我们就简单的介绍一下它们的区别。

程序是计算机指令的集合,它以文件的形式存储在磁盘上。程序是通常我们所写好的存储于计算机上没有执行的指令的集合,通俗的讲就是我们自己写的代码。我们写的代码不可能只是为了存储吧,必须运行才不会浪费我们的辛苦,等到我们将我们的代码运行了,就产生了进程。

进程:是一个程序在其自身的地址空间中的一次执行活动。通常的程序是不能并发执行的。为了使程序能够独立运行,应该为之配置一些进程控制块,即PCB;而由程序段,相关数据段和PCB三部分构成了进程实体。通常我们并不区分进程和进程实体,基本上就代表同一事物。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源。

20世纪60年代人们提出了进程的概念,在OS中一直都是以进程作为能独立运行和拥有资源的基本单位。但是进程间的切换比较麻烦费时,所以在20世纪80年代人们为了提高系统内程序并发执行的程度,进一步提高系统的吞吐量,提出了比进程更小的能独立运行的基本单位。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。一个进程可以同时拥有一个或者多个线程,这几个线程共享同样的数据。

现在的CPU几乎都是多核的了,这样多线程的程序,运行起来就更加流畅。下面我们通过图片来比较一下单线程和多线程:


这个就好比我们算一道数学题(2+3)*(5-3),如果我们使用左边的单线程,只能是先算2+3然后算5-3,最后结果相加。但是如果我们使用右边的多线程,我们可以同时对2+3和5-3进行运算,然后再对最后的结果相加。我想哪个运行的比较快就不用说了,另外多线程在图像处理,多用户通信等方面用户都很多。

可能读者会说如果我们用的是单CPU的PC那么他们就差别不大了,但是现在的事实是现在的PC基本都是多核了,所以多线程是为了我们更好的将程序移植到多核的CPU上。还有一点就是对于线程的切换,比进程的切换速度快的多,多线程更好的发挥CPU的效率。

写的不好,如果哪里错了希望大家指出。希望对你有帮助。
(转载请注明出处:[url=http://www.6rfd.com]澳门博彩[/url]

[url=http://www.9gds.com]易博网[/url])

posted @ 2012-04-19 10:19 夏凡 阅读(276) | 评论 (0)编辑 收藏

java中的多态,多态的例子

当面临一个问题,有多种实现算途径的时候,要想到java中的核心:多态。


多态的思想:

概括地讲,在运用父类引用指向子类对象的情况下,基本上就用到了多态了。


最简单的多态应该是继承:

public class Tank {
public void move() {
System.out.println("I am father");
}
}


public class Tank2 extends Tank{
@Override
public void move(){
System.out.println("I am child a");
}

public class Client {
public static void main(String[] args) {
Tank t2 = new Tank2(); ///父类引用指向了子类对象
t2.move(); ///父类中的move方法,但实际具体的实现是tank2对象对move的实现。

}

}

接口和抽象类的例子:


对于抽象类和接口,有许多类实现这个接口(或者继承这个抽象类)。
在调用的时候,用父类引用指向子类对象的方法。然后,调用对象的方法,编译器就会自动根据这个对象实际属于哪个实现类,
来调出这个类对于接口或者抽象类的具体实现。

例:
public class Address {
private String name;
public Address(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

定义基类(抽象类):
public abstract class Vehicle {
abstract void go(Address address);
}

Car对于基类的实现:
public class Car extends Vehicle{
@Override
public void go(Address address){
System.out.println("Car to " + address.getName());
}
}

Plane对于基类的实现:
public class Plane extends Vehicle{
@Override
void go(Address address) {
System.out.println("Plane to " + address.getName());
}
}


Driver中多态:
public void drive(Vehicle v){ ///多态,父类引用指向子类对象,实际传过来的是抽象类Vehicle的子类,或者实现类,然后编译器会根据具体实现类,来找实现方法。
v.go(new Address("杭州(abstract)")); ///此方法在具体的实现中被重写
}

Test:
public static void main(String[] args) {
Driver d = new Driver();
d.drive(new Plane()); //实际是Plane对象,则编译器就会找到Plane中,对go的实现
d.drive(new Car()); //实际是Car对象,则编译器就会找到Plane中,对go的实现
}

输出结果:
Plane to 杭州(abstract)
Car to 杭州(abstract)

事实上,这就是多态所起的作用,可以实现控制反转这在大量的J2EE轻量级框架中被用到,比如Spring的依赖注射机制。
(通过注入不同的bean,来得到不同的实现类)

接口与抽象类的区别:

有个概念,但还没有想到具体实现。
对于一些共用的,已经有实现了,可以设计成接口。

上面是抽象类,下面把它转化为接口:

IVehicle.java
public interface IVehicle {
public void go(Address address);
}

CarImpl.java
public class CarImpl implements IVehicle{
public void go(Address address) {
System.out.println("CarImpl to " +address.getName());
}
}

PlameImpl.java
public class PlaneImpl implements IVehicle{
public void go(Address address) {
System.out.println("PlaneImpl to " + address.getName());
}
}

Driver.java
////多态之接口
public void driveI(IVehicle v){
v.go(new Address("杭州(interface)"));
}

Test.java
////用接口实现
d.driveI(new PlaneImpl());
d.driveI(new PlaneImpl());

打印结果:
PlaneImpl to 杭州(interface)
PlaneImpl to 杭州(interface)


多态的三要素:1.继承 2.重写 3.父类引用指向子类对象

以上就是我目前学习中的总结,如有不足之处,还望多多赐教。
(转载请注明出处:[url=http://www.k8764.com]博彩通[/url]

[url=http://www.5sfd.com]e世博[/url])

posted @ 2012-04-19 10:15 夏凡 阅读(1139) | 评论 (0)编辑 收藏

如何使用java读取Properties文件来改变实现类

用java读取Properties文件来改变实现类的Demo:


public abstract class Vehicle {
public abstract void run();
}


public class Car extends Vehicle{
public void run(){
System.out.println("with Car");
}
}


public class Broom extends Vehicle {
@Override
public void run() {
System.out.println("Broom");
}
}


test.properties 中:
VehicleType=abstractfactory.step4properties.Broom
注意:该文件要放在src目录下,且等号两边不可有空格




import java.util.Properties;
public class Test {
public static void main(String[] args) throws Exception{
Properties pros = new Properties();
///配置文件编译之后放在bin目录下
//每个class的类,都会被当作Class对象。getClassLoader:拿到了装载这个Class的装载器
///把它当作一个流读进来,默认路径是根目录。读出来之后,把它转化为一个properties对象,然后,等号左边的就是key,等号右边的就是value
pros.load(Test.class.getClassLoader().getResourceAsStream("abstractfactory/step4properties/spring.properties"));

String vehicleTypeName = pros.getProperty("VehicleType");
System.out.println(vehicleTypeName);


///现在,得到的字符串,我们想把字符串代表的类,产生一个对象,用到反射
///Class.forName把字符串所代表的表装到内存,newInstance:生成对象,得到的是个Object
Vehicle v = (Vehicle)Class.forName(vehicleTypeName).newInstance();
v.run();
//只要改变test.properties中的VehicleType=factory.step4Spring.Broom,即可实现改变实现类的功能。
}
}
(转载请注明出处:[url=http://www.k6567.com]e世博[/url]
[url=http://www.d9732.com]澳门博彩[/url])

posted @ 2012-04-19 10:05 夏凡 阅读(924) | 评论 (0)编辑 收藏

教你关于JSP连接MYSQL5的中文问题解决方法

用JAVA/JSP做开发很久了,也见过许多朋友做过,有很大一部分用的是MYSQL的数据库,现在MYSQL数据库版本5.0及以上的都已经被用的很广泛了,但一直有一个问题,使刚入门的朋友费劲心思.就是JSP连接MYSQL5数据库的时候的一些中文问题.于是网络上也出现了很多相关的帖子.由些大家对MYSQL5数据库的配制文件MY.INI也有了些了解.甚至一些朋友就直接问:你们的MYSQL是什么编码的?你们的TOMCAT是什么样的编码,可能不是很规范的问法,但说明了编码问题的确影响了大家的使用.

下面的讲解是在MYSQL5.0.18,TOMCAT5.0.28,驱动为mysql-connector-java-3.2.0-alpha-bin.jar及以上版本的情况下测试的

JSP连接数据库的乱码问题,分两部分来看

1 数据库中是不是乱码?

我们需要保证数据库保存的不是"?????"形式的乱码,如何保证呢?

我们在管理MYSQL数据库的时候,需要用一个客户端,无论你用MYSQL-FRONT,EMS SQL Manager for MySQL,还是MYSQL命令行,这些都是客户端,也是程序连接了数据库,我们现在用客户端EMS SQL Manager for MySQL连接数据库,连接的时候一定要设置客户端字符集为GBK或者GB2312,这样你才能知道数据库里面是不是乱码.这一编码设置很重要,不然,就算数据库里是中文,你看到的还是乱码

这样连接后,我们看下我们做测试的表格,里面的汉字就是正常的,这个时候也可以直接在上面的记录中进入中文的修改

若这里没有选择编码的话,一般默认的就是UTF8的了,连接后再看这个表格,就会出现乱码

而这个时候就会出现不能插入中文的问题,若您插入中文的话,就会出现下列错误

这个时候大家什么不要误解,不是不能插入中文,也不是你插入的字符太长,

更改下连接编码就OK了.下面是这个表格的SQL语句

CREATE TABLE `test` (
`name` varchar(100) default NULL,
`adesc` varchar(100) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

二.程序连接数据时,也要设置好连接时候的编码,JSP连接MYSQL数据库时候,有个URL参数,jdbc:mysql://localhost:3307/sssdb?user=demoUser&password=demoPwd&useUnicode=true&characterEncoding=UTF-8,在这里需要设置成UTF-8,

下面是连接数据库的程序代码

<%@ page contentType="text/html;charset=GB2312" language="java"%>
<%@ page import="java.io.*" %> 
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>

<%
out.println("您的数据库某表格中的内容如下<br>");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance(); 
String url ="jdbc:mysql://localhost:3307/sssdb?user=demoUser&password=demoPwd&useUnicode=true&characterEncoding=UTF-8";
//testDB为你的数据库名 
Connection conn= DriverManager.getConnection(url); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {
out.println("第一个字段内容:<font color=red>"+rs.getString(1)+"</font> 第二个字段内容:<font color=red>"+rs.getString(2)+"</font><br>");
}
out.print("数据库操作成功,恭喜你");

sql = "insert into test (name,adesc) values ('中文','汉字')";
stmt.execute(sql);


rs.close(); 
stmt.close(); 
conn.close(); 
}
catch(Exception e){
System.out.println("数据库连接不成功"+e.toString());
}
%>

上面的经验是经过多次尝试总结出来的,不管是MYSQL的客户端还是程序连接MYSQL数据库,在本质上都是程序连接数据库,可以自己在本地多试验下,有时候有可能是驱动太旧.
(转载请注明出处:[url=http://www.a9832.com]博彩网[/url]
[url=http://www.tswa.org]博彩通[/url]

posted @ 2012-04-19 09:58 夏凡 阅读(211) | 评论 (0)编辑 收藏

你懂得如何用QTP录制鼠标右键点击事件吗

qtp录制鼠标右键单击事件要通过模拟键盘操作来实现

step 1,修改replaytype为2,一般情况默认设置是1的。(1 – 使用浏览器事件运行鼠标操作。 2 – 使用鼠标运行鼠标操作)
setting.webpackage(”replaytype”) = 2

step 2,鼠标右键单击事件
(附:click的事件有三种 micleftbtn 0 鼠标左键。 micrightbtn 1 鼠标右键。 micmiddlebtn 2 鼠标中键)
browser(”支付宝 – 网上支付 安全快速!”).page(”支付宝 – 网上支付 安全快速!”).link(”返回我要付款”).click , , micrightbtn

step 3,点击右键弹出的菜单(采用键盘事件来模拟)
set wshshell = createobject(”wscript.shell”)
wshshell.sendkeys “{down}” //键盘向下的箭头
wshshell.sendkeys “{down}”
wshshell.sendkeys “{enter}” //回车键

step 4,修改replaytype为1(使用浏览器事件运行鼠标操作)
setting.webpackage(”replaytype”) = 1

good to go now. 
(转载请注明出处:[url=http://www.live588.org]淘金盈[/url]
[url=http://www.10086money.com]时尚资讯[/url])

posted @ 2012-04-19 09:51 夏凡 阅读(446) | 评论 (0)编辑 收藏

通过jquery 获取父窗口的元素 父窗口 子窗口的方法

     摘要: $("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementByIdx_x("父窗口元素ID"); 取父窗口的元素方法:$(selector, window.parent.document); 那么你取父窗口的父窗口的元素就可以用:$(selector, w...  阅读全文

posted @ 2012-04-19 09:49 夏凡 阅读(477) | 评论 (0)编辑 收藏

教你使用C# 实现文件锁

     摘要: C#代码  using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawin...  阅读全文

posted @ 2012-04-19 09:43 夏凡 阅读(1076) | 评论 (0)编辑 收藏

仅列出标题
共5页: 1 2 3 4 5 下一页