<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Java论坛最新讨论 - JavaEye</title>
    <description>Java编程、Java Web开发、Java企业应用、Java设计模式、Java开源框架、Java应用服务器 <br/>
圈子: 
<a href="http://android.group.javaeye.com" target="_blank">Android</a>
<a href="http://jbpm.group.javaeye.com" target="_blank">JBPM</a>
<a href="http://jsfgroup.group.javaeye.com" target="_blank">JSF</a>
<a href="http://seam.group.javaeye.com" target="_blank">Seam</a>
<a href="http://tapestrying.group.javaeye.com" target="_blank">Tapestry</a>
<a href="http://grails.group.javaeye.com" target="_blank">Groovy</a>
<a href="http://lucene-group.group.javaeye.com" target="_blank">Lucene</a>
<a href="http://ecside.group.javaeye.com" target="_blank">GT-Grid</a>

 - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>在看commons-lang.jar包源码时候的一些发现及实践</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://souren.javaeye.com">lendo.du</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253265" style="color:red;">http://www.javaeye.com/topic/253265</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          通常，我们在完成一个标准的JavaBean的时候，都需要同时完成equals,toString和hashCode三个方法，一般手动来写的话，实在是很麻烦，特别是如果一个JavaBean中有复杂的数据类型，如集合类型，日期类型等这种情况下，做起来更让人头痛。<br /><br />于是我用了common-lang.jar这个包里面的一些类来帮我做这三个令人厌烦的工作，比如我现在有一个简单JavaBean,代码如下：<br /><pre name="code" class="java">
public class GenericModel implements Serializable {
    private static final long serialVersionUID = 3294254521331173014L;
    protected String id;
    protected Date createTime;
    protected Date updateTime;

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
	
    public boolean equals(Object object) {
        return EqualsBuilder.reflectionEquals(this, object);
    }
	
}
</pre><br /><br />以上是一个很简单的POJO，要用commons-lang.jar里面的builder来生成这三个方法也很简单，具体做法如下。<br />1. 生成对应的equals方法：<br /><pre name="code" class="java">
public boolean equals(Object obj){
    if (obj == null) {return false;}
    if (obj == this) {return true;}
    if (obj.getClass() != getClass()) {return false;}

    GenericModel gm= (GenericModel) obj;
    return new EqualsBuilder()
        .append(id, gm.getId())
        .append(createTime , gm.getCreateTime())
        .append(updateTime, gm.getUpdateTime())
        .isEquals();
}
</pre><br /><br />2. 生成对应的hashCode方法：<br /><pre name="code" class="java">
public int hashCode() {
    return new HashCodeBuilder(17, 37)
    .append(id)
    .append(createTime)
    .append(updateTime)
    .toHashCode();
   }
</pre><br />注意使用HashCodeBuilder的时候，构造方法的两个整数必须不为零且必须为奇数，HashCodeBuilder的构造函数如下：<br /><pre name="code" class="java">
public HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber) {
    if (initialNonZeroOddNumber == 0) {
        throw new IllegalArgumentException("HashCodeBuilder requires a non zero initial value");
    }
    if (initialNonZeroOddNumber % 2 == 0) {
        throw new IllegalArgumentException("HashCodeBuilder requires an odd initial value");
    }
    if (multiplierNonZeroOddNumber == 0) {
        throw new IllegalArgumentException("HashCodeBuilder requires a non zero multiplier");
    }
    if (multiplierNonZeroOddNumber % 2 == 0) {
        throw new IllegalArgumentException("HashCodeBuilder requires an odd multiplier");
    }
    iConstant = multiplierNonZeroOddNumber;
    iTotal = initialNonZeroOddNumber;
}
</pre><br /><br />3. 生成toString方法：<br /><pre name="code" class="java">
public String toString() {
    return new ToStringBuilder(this)
    .append("id", id)
    .append("createTime", createTime)
    .append("updateTime", updateTime)
    .toString();
}
</pre><br /><br />好了，这也是一般我们用这个玩意儿的用法，但即使这种情况，我们仍然需要手动维护如此多的属性，有没有一种方式更加简单，可以让代码更简化呢？<br /><br />有的，再看这几个类里面有这几个方法：<br />EqualsBuilder.reflectionEquals<br />HashCodeBuilder.reflectionHashCode<br />ToStringBuilder.reflectionToString<br />这几个方法是利用Java的反射机制，自动找到相应的属性，自动生成这几个方法。好了上面的代码就可以改一下了：<br /><pre name="code" class="java">
public boolean equals(Object object) {
    return EqualsBuilder.reflectionEquals(this, object);
}
	
public int hashCode(){
    return HashCodeBuilder.reflectionHashCode(this);
}
	
public String toString(){
    return ToStringBuilder.reflectionToString(this);
}
</pre><br /><br />好了，这样看上去就好多了。接下来再多说几句多余的。也是这三个方法的实用价值所在。<br /><br />我们一般在进行建模的时候，所有的域对象一般都会有一个基类，我上面这个GenericModel也就是一个基类，那么我们项目中的所有域对象都继承自这个基类。同时也就继承了这三个方法。也就是，只要我们新的JavaBean都扩展了GenericModel这个类，那么在我们的新的JavaBean里面就不再需要声明这三个方法，这三个方法自动实现了。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253265" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 17:15:40 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253265</link>
        <guid>http://www.javaeye.com/topic/253265</guid>
      </item>
          <item>
        <title>使用Axis2快速开发web服务</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ningkun.javaeye.com">ningkun</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252534" style="color:red;">http://www.javaeye.com/topic/252534</a>&nbsp;
          发表时间: 2008年10月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用Axis2开发web服务一般有以下三种形式：<br /> 1.pojo模式，此方法最为简便，但是也有很多的局限性，最为明显的就是不能有package<br />&nbsp;&nbsp; step1：编写pojo对象<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class HelloWorld{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String sayHello(String name){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "Hello,"+name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编译成class文件。<br />&nbsp;&nbsp;&nbsp; step2:在Tomcat目录/webapps/axis2/WEB-INF/下新建pojo文件夹。<br />&nbsp;&nbsp;&nbsp; step3:将class文件拷贝到pojo文件夹中。<br />&nbsp;&nbsp;&nbsp; setp4:启动tomcat，在浏览器中输入：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://localhost:8080/axis2/services/HelloWorld/sayHello?&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param0="ningkun"将会看到，"Hello,ningkun"的消息。<br /><br /><br />&nbsp; 2.如果我们想以pojo的形式发布web服务，并且与package的话，可以使用jar包的形式发<br />&nbsp; 布web服务。<br /><br />&nbsp;&nbsp;&nbsp; step1:编写java类<br />&nbsp;&nbsp;&nbsp; AddressService类<br /><br />&nbsp;&nbsp;&nbsp; package sample;<br />&nbsp;&nbsp;&nbsp; import javax.jws.WebService;<br /><br />&nbsp;&nbsp;&nbsp; @WebService<br />&nbsp;&nbsp;&nbsp;&nbsp; public class AddressService {<br />	public Address getAddress(){<br />		Address address = new Address();<br />		address.setStreet("Street");<br />		address.setNumber("Number 15");<br />		return address;<br />	}<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp; Address类<br />&nbsp;&nbsp;&nbsp;&nbsp; package sample;<br /><br />&nbsp;&nbsp;&nbsp; public class Address {<br />	private String street;<br />	private String number;<br />	public String getNumber() {<br />		return number;<br />	}<br />	public void setNumber(String number) {<br />		this.number = number;<br />	}<br />	public String getStreet() {<br />		return street;<br />	}<br />	public void setStreet(String street) {<br />		this.street = street;<br />	}<br />	<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; step2:修改axis2/WEB-INF/conf/axis2.xml<br />&nbsp;&nbsp;&nbsp;&nbsp; 添加<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;deployer extension=".jar" derectory="pojo" class="org.apache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .axis2.deployment.POJODeployer"/><br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; step3:将pojo类打包后放到pojo文件夹下。<br />&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp; 3.用Serice文件发布web服务。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step1:编写java类，此处我们使用1中的HelloWorld类<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step2:编写services.xml<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;service name="HelloService"><br />	&lt;description><br />		This is a sample Web Service.<br />	&lt;/description><br />	&lt;parameter name="ServiceClass" locked="false"><br />	&nbsp;&nbsp;&nbsp;&nbsp; HelloWorld<br />	&lt;/parameter><br />	&lt;operation name="sayHello"><br />		&lt;messageReceiver <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/><br />	&lt;/operation><br />&lt;/service><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：messageReceiver中的class属性有多种选择，<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RawXMLINOutMessageReceiver 接受参数，并有返回值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RawXMLINOnlyMessageReceiver 无返回值<br />&nbsp;&nbsp;&nbsp; 4.打包aar文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目目录如下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HelloWorld.class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; META-INF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; services.xml<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jar cvf HelloService.aar .<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step3:
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252534" style="color:red;">已有 <strong>6</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Oct 2008 10:03:21 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252534</link>
        <guid>http://www.javaeye.com/topic/252534</guid>
      </item>
          <item>
        <title>IOC?真的IOC了？还是Factory?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yananay.javaeye.com">yananay</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252235" style="color:red;">http://www.javaeye.com/topic/252235</a>&nbsp;
          发表时间: 2008年10月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          和 javaeye上的朋友短信讨论之后，我发觉这个帖子的内容和我想表达的东西实在不一样，看来表达能力还需要提高呀！因此把内容更新一下，免得误导大家。<br /><br />先描述一下我遇到的问题的场景：<br /><br />我需要做的是一个命令行运行的程序，而且用户可以通过命令行输入文件名字来导入数据。<br />假如处理导入数据的类叫 ImportBusiness，那么我在 main 方法里如何得到这个 ImportBusiness 实例，而且把用户输入的参数传递给它呢？<br /><br />很显然，如果在 Spring 的 xml 里配置了这个 ImportBusiness，可以通过配置 init-method 让 Spring 加载这个类的时候，就执行某个方法。但是，我还要把命令行输入的参数传递给 ImportBusiness 呀！这样的话， init-method　也无效了。<br /><br />所以，我不得不在　main 中　使用　beanFactory.getBean("importBusiness") 来得到那个　bean。<br /><br />于是乎，我又想到，能不能消除掉这个字符串常量呢？<br /><br />因此，也就有了下面的　StandardConfiguration 类。<br /><br />在　main 方法里，new 一个　StandardConfiguration 类，就可以通过　get 方法得到注入的对象了。至于后面说的设想，也是从这个基础上引申的想法。<br /><br /><br /><br />-------------------以下为原始内容--------------------------<br />在google上搜索 “spring ioc”，会出来一堆堆的搜索结果，随便点哪一个进去，都会看到这样的教程：<br /><br /><pre name="code" class="java">
ClassA a = (ClassA) beanFactory.getBean("A");
</pre><br /><br />ok, 教程中都说这是Spring的ioc用法， ClassA 是被 Spring管理的，ClassA中的需要set的变量都是“自动注入”的，例如：<br /><br /><pre name="code" class="java">
public class ClassA {
  private ClassB b;
  public void setB(ClassB b) {
    this.b = b;
  }
}
</pre><br /><br />所有的教程，文档，甚至Spring的文档，都说这是 <strong>IOC</strong>。<br /><br />但是很少有人提及这一点：<strong>beanFactory.getBean("A") 是一个工厂模式</strong>。<br /><br />前一阵经过梁兄的指点，俺才发现：<strong>这明明就是工厂模式呀</strong>！也就是说你要使用 IOC，前提是要使用工厂模式。虽然 ClassA 是被自动装配的，但那之前，你必须使用工厂模式来得到装配后的 ClassA。<br /><br />换个比喻来说：如果你要使用一个手枪，必须先用火柴去点燃手枪里的火药。<br /><br />不晓得大家对这个问题怎么个看法，至少俺觉得有些别扭，其实我们完全可以不使用工厂模式。考虑下面这个类：<br /><br /><pre name="code" class="java">
public class StandardConfiguration {

	private static Logger logger = Logger.getLogger(StandardConfiguration.class);
	
	private ImportBusiness importBusiness;
	
	public StandardConfiguration(BeanFactory beanFactory) {
		
		Method[] methods = getClass().getMethods();
		
		for(Method method : methods) {
			
			String methodName = method.getName();
			Class returnType = method.getReturnType();
			if(methodName.startsWith("get")) {
				
				String fieldName = getFieldName(methodName);
				
				Object bean = null;
				try {
					bean = beanFactory.getBean(fieldName);
					
				} catch (NoSuchBeanDefinitionException e) {
					
					logger.debug("StandardConfiguration - " + fieldName + " NoSuchBeanDefinitionException, ignore.");
					continue;
				}
				
				String setMethodName = "set" + createFieldMethodVar(fieldName);
				
				Method setMethod = null;
				try {
					setMethod = getClass().getMethod(setMethodName, new Class[]{returnType});
					setMethod.invoke(this, bean);
					
				} catch (NoSuchMethodException e) {
					
					logger.debug("StandardConfiguration - " + fieldName + " has no set method.");
					
				} catch (InvocationTargetException e) {
					
					logger.error("StandardConfiguration - " + fieldName + " invoke failed.");
				} catch (IllegalAccessException e) {
					
					logger.error("StandardConfiguration - " + fieldName + " IllegalAccessException.");
				}
			}
		}
		
	}
	
	private String getFieldName(String methodName) {
		
		String fieldName = methodName.substring(3, methodName.length());
		fieldName = fieldName.substring(0, 1).toLowerCase() +
						fieldName.substring(1, fieldName.length());
		
		return fieldName;
	}
	
	private String createFieldMethodVar(String fieldName) {
		
		return fieldName.substring(0, 1).toUpperCase() +
				fieldName.substring(1, fieldName.length());
	}

	public ImportBusiness getImportBusiness() {
		return importBusiness;
	}

	public void setImportBusiness(ImportBusiness business) {
		this.importBusiness = business;
	}
}
</pre><br /><br />这个类按照下面的方式来使用：<br /><br /><pre name="code" class="java">
StandardConfiguration config = new StandardConfiguration(beanFactory)
ImportBusiness importBusiness = config.getImportBusiness();
</pre><br /><br />其中 beanFactory 是 Spring 中的 BeanFactory，ImportBusiness 是一个普通的类。<br /><br />ok，我们避免了 beanFactory.getBean("A") 的用法，我可以说：<strong>当我 new 一个 StandardConfiguration 的时候，里面的变量都是自动注入的。</strong><br /><br />但是有人说：你这是穿裤子放屁--你不是还得使用 BeanFactory？<br /><br />没错，没错，这也是我想说的主要话题之一，<strong>如果 BeanFactory 能修改一下该多好</strong>！<br /><br />我设想的情况是这样使用：<br /><br /><pre name="code" class="java">
public class StandardConfiguration extends BeanFactory {
  private ImportBusiness importBusiness;
  public ImportBusiness getImportBusiness() {
    return importBusiness;
  }

  public void setImportBusiness(ImportBusiness business) {
     this.importBusiness = business;
  }
}
</pre><br /><br />这样当我 new 一个 StandardConfiguration 的时候，里面的变量就自动装配起来。这样的话，BeanFactory 似乎应该叫 BeanConfiguration 更好了。<br /><br />通过这样的方式，我们完全可以避免工厂模式的出现。这样做有什么好处呢：<br />1、避免了工厂模式的使用，单一的IOC更加简单。<br />2、避免了通过 bean name（beanFactory.getBean("A");） 来获得某一个对象。其实也就是避免了hardcode。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252235" style="color:red;">已有 <strong>41</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 15:08:41 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252235</link>
        <guid>http://www.javaeye.com/topic/252235</guid>
      </item>
          <item>
        <title>另类的异构系统数据交互</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondqinghua.javaeye.com">beyondqinghua</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253347" style="color:red;">http://www.javaeye.com/topic/253347</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: small;">&nbsp;&nbsp;&nbsp; 这学期大四，应聘上了深圳一家软件公司实习。现在上班也有一个半星期了吧，上个星期主要是熟悉公司现有项目的业务。昨天开始分配给我一项任务，就是做两个系统的数据交互，一开始还以为要用到webservice之类的东西，所以赶紧到网上查了一堆的资料。后来老大告诉我另外一个项目（数据提供源）的程序不能动，只限于数据库上的操作(源MS SERVER，目的ORACLE10G)，那边服务器上提供FTP服务，所以刚开始考虑通过MS SERVER定时导出xml格式的数据，然后通过ftp把数据读取过来，然ORACLE的xml解析函数解析数据然后导入数据库。后来发现双方导入导出xml格式数据非常的麻烦，而且好象ORACLE10g的xml.parse函数有bug，所以只能考虑别的方式。</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp; 今天决定试一试让MS SERVER通过BCP工具导出oracle格式的insert脚本，然后放到ftp服务器目录，通过sun.net.ftp.*包的工具把服务器上的脚本文件剪切过来，导入到oracle数据库中去。</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp; 整个过程需要注意几个方面：</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 1、MS SERVER的定时作业任务（即导出脚本）的时间需要控制在spring定时器的前面。</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 2、因为涉及到多个表，所以父表的数据要先导出，再导子表数据，而且要设置相应的标志，0没有操作，1准备导出，2已经导出，首先要把父表为0的标志改为1，然后修改相应的子表标志为1，导出数据后改为2。</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 查询顺序：select parent ,select children</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 如果不设置1准备导出这个动作的话，那么读完parent表后，可能会有同时插入parent 、children表的操作，而parent 表已经导出，children表导出的脚本可能有跟新parent 数据关联，其脚本在导入到oracle的时候将报错。</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 整个过程主要有三个：</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 1、MS SERVER任务器定时调用存储过程导出insert脚本</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 2、Spring定时任务器定时调用sun.net.ftp.*进行脚本读取操作</span></p>
<p><span style="font-size: small;">&nbsp;&nbsp; 3、Spring将脚本导入oracle执行</span></p>
<p><span style="font-size: small;">今天实验成功，不知道实际运行效果如何，期待中！</span></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253347" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 21:16:42 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253347</link>
        <guid>http://www.javaeye.com/topic/253347</guid>
      </item>
          <item>
        <title>Android入门扫盲之三-------------电话薄</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kuikui.javaeye.com">LinuxFans</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253346" style="color:red;">http://www.javaeye.com/topic/253346</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><span style="font-size: small;">电话薄在实际的开发中还是很常见的，在论坛中经常有人问，回到的也是事实而非，今天有空做点记录吧。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">电话薄的开发无非就是，无非就是对联系方式的增、删、改、查四种操作，这里可要注意了，在</span><span lang="EN-US"><span style="font-family: Calibri;">Android</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">里面给用户的权限更大，可以修改和删除已有的联系人的信息，与</span><span lang="EN-US"><span style="font-family: Calibri;">J2me PIM</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">不一样哦。在</span><span lang="EN-US"><span style="font-family: Calibri;">Android</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">系统里面正对联系人的操作是被划分在</span><span lang="EN-US"><span style="font-family: Calibri;">Content Providers</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">里面，用做好类似的开发，需要了解的知识：</span><span lang="EN-US"><span style="font-family: Calibri;">Uri(</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">不是</span><span lang="EN-US"><span style="font-family: Calibri;">Url)</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">、</span><span lang="EN-US"><span style="font-family: Calibri;">Android</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">的权限控制、</span><span lang="EN-US"><span style="font-family: Calibri;">Android</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">的联系方是表的字段等等。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">有了上面的知识其实就可以开发增删改查的功能了，在网络上面看的基本只有增和查，在这里重点也在更新和删除，注意在做涉及到网系统读写的操作的时候，要在你的</span><span lang="EN-US"><span style="font-family: Calibri;">AndroidMainfest.xml</span></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">里面把权限打开：</span></span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #008080; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">uses-permission </span><span style="font-size: 10pt; color: #7f007f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">android:name</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">"android.permission.WRITE_CONTACTS" </span><span style="font-size: 10pt; color: #008080; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">/&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 10pt; color: #008080; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">uses-permission </span><span style="font-size: 10pt; color: #7f007f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">android:name</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">"android.permission.READ_CONTACTS" </span><span style="font-size: 10pt; color: #008080; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">/&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 'Courier New'; mso-themecolor: text1;">这里读和写的权限都要打开，与我们一般的思路有点不一样，这里读写权限是分开的，要是还想打电话就要也要把其对应的权限打开</span></span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #008080; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&lt;</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">uses-permission </span><span style="font-size: 10pt; color: #7f007f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">android:name</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">"android.permission.CALL_PHONE" </span><span style="font-size: 10pt; color: #008080; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">/&gt;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: small;"><span style="color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 'Courier New'; mso-themecolor: text1;">这些都是一些很细节性的基础东西，对于初学者很有必要注意哦，有的时候这些简单的基础东西没有注意可能会然他你死活找不到</span><span style="color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-themecolor: text1;">bug</span><span style="color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 'Courier New'; mso-themecolor: text1;">所在。</span></span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: small;"><span style="color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 'Courier New'; mso-themecolor: text1;">废话少说，下面贴点代码：</span></span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: small;"><span style="color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-themecolor: text1;">&lt;1&gt;</span><span style="color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 'Courier New'; mso-themecolor: text1;">添加</span><span style="color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-themecolor: text1;">:</span></span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">public</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">boolean</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> insert(String name, String phoneNum, String email, String qq) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">if</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> (name == </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Log.<em>e</em>(</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TAG</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, </span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">"The Name is not allow null!!"</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">return</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">false</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">try</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="background: silver; mso-highlight: silver;">ContentResolver</span> contentResolver = </span><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">mContext</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">.getContentResolver();</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ContentValues values = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">new</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> ContentValues();</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Uri phoneUri = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">添加姓名</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.People.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">NAME</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, name);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">映射关系</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">:1 = </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">新的联系方式加入</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> favorites,0 = </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">新的联系方式不是加入</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> favorites</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.People.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">STARRED</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, 1);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Uri uri = Contacts.People.<em>createPersonInMyContactsGroup</em>(contentResolver, values);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&nbsp;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">添加电话号码</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">最好的办法是先得到</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">People</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">表的</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">Uri</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">，然后使用</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">Uri</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">的静态方法</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">withAppendedPath</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">来获取一个新的</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">Uri</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">作为我们新要插入数据的</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">Uri</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">if</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> (phoneNum != </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> &amp;&amp; !phoneNum.trim().equals(</span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">""</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">)) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>phoneUri = Uri.<em>withAppendedPath</em>(uri, Contacts.People.Phones.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">CONTENT_DIRECTORY</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.clear();</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.Phones.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TYPE</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, Contacts.Phones.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">NUMBER</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.Phones.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">NUMBER</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, phoneNum);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>contentResolver.insert(phoneUri, values);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">if</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> (email != </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> &amp;&amp; !email.trim().equals(</span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">""</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">)) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">添加</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">Email</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Uri emailUri = Uri.<em>withAppendedPath</em>(uri, Contacts.People.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">CONTENT_DIRECTORY</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.clear();</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// ContactMethods.KIND </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">是用来区分像</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">email,im</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">等等不同联系方式</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">KIND</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, Contacts.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">KIND_EMAIL</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">DATA</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, email);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TYPE</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TYPE_HOME</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>contentResolver.insert(emailUri, values);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">if</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> (qq != </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> &amp;&amp; !qq.trim().equals(</span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">""</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">)) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">// </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">添加</span><span style="font-size: 10pt; color: #3f7f5f; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">QQ</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">号码</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.clear();</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Uri qqUri = Uri.<em>withAppendedPath</em>(uri, Contacts.People.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">CONTENT_DIRECTORY</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">KIND</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, Contacts.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">KIND_IM</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">DATA</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, qq);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>values.put(Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TYPE</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, Contacts.ContactMethods.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TYPE_HOME</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 4;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>contentResolver.insert(qqUri, values);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&nbsp;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>} </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">catch</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> (Exception e) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Log.<em>e</em>(</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">TAG</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, </span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">"InsertContact Error !!!!"</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">return</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">false</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">return</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">true</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-themecolor: text1;"><span style="font-size: small;">&nbsp;</span></span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&lt;2&gt;</span><span style="font-size: 10pt; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">删除：</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">public</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">boolean</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> delete(String name) {</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ContentResolver contentResolver = </span><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">mContext</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">.getContentResolver();</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">if</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> (name != </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">)</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>contentResolver.delete(Contacts.People.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">CONTENT_URI</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, Contacts.People.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">NAME</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> + </span><span style="font-size: 10pt; color: #2a00ff; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">"=?"</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">new</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> String[] { name });</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">else</span></strong></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>contentResolver.delete(Contacts.People.</span><em><span style="font-size: 10pt; color: #0000c0; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">CONTENT_URI</span></em><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">, </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">null</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">);</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">return</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">true</span></strong><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">;</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;"><span style="mso-tab-count: 1;">&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span style="font-size: 10pt; color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">&lt;3&gt;</span><span style="font-size: 10pt; color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">更新</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">:</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">更新麻烦一点，需要先按更新条件找到记录所带的</span><span style="font-size: 10pt; color: #000000; font-family: &quot;Courier New&quot;; mso-font-kerning: 0pt;">id,</span><span style="font-size: 10pt; color: #000000; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New';">之后再做相应的操作。</span></p>
<p class="MsoNormal" align="left" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none;"><span style="font-size: 10pt; color: #000000; font-family: Verdana; mso-font-kerning: 0pt;">ContentResolver contentResolver = mContext.getContentResolver();<br />&nbsp;&nbsp;&nbsp;Cursor cusor = null;<br />&nbsp;&nbsp;&nbsp;String[] projection = new String[] { Contacts.People._ID, Contacts.People.NAME, Contacts.People.NUMBER };<br />&nbsp;&nbsp;&nbsp;cusor = contentResolver.query(Contacts.People.CONTENT_URI, projection, Contacts.People.NAME + "=?", new String[] { oldName }, Contacts.People.NAME + " ASC");<br />&nbsp;&nbsp;&nbsp;cusor.moveToFirst();<br />&nbsp;&nbsp;&nbsp;ContentValues values = new ContentValues();<br />&nbsp;&nbsp;&nbsp;Uri uri = Uri.withAppendedPath(Contacts.People.CONTENT_URI, cusor.getString(cusor.getColumnIndex(Contacts.People._ID)));<br />&nbsp;&nbsp;&nbsp;values.put(Contacts.People.NAME, newName);<br />&nbsp;&nbsp;&nbsp;values.put(Contacts.People.STARRED, 0);<br />&nbsp;&nbsp;&nbsp;values.put(Contacts.Phones.NUMBER, newPhoneNum);<br />&nbsp;&nbsp;&nbsp;contentResolver.update(uri, values, null, null);</span></p>
</span></p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253346" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 21:16:06 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253346</link>
        <guid>http://www.javaeye.com/topic/253346</guid>
      </item>
          <item>
        <title>网页中显示xml</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://278506470.javaeye.com">278506470</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252903" style="color:red;">http://www.javaeye.com/topic/252903</a>&nbsp;
          发表时间: 2008年10月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: medium;">　　如果想在网页中显示xml的完整结构，直接输出，IE会把xml结构误认为html的结构，普通的显示只能显示所有节点上的值，如果想显示整个结果，可以在xml的两端加上标签 &lt;xmp&gt;xml结构&lt;/xmp&gt;
<pre name="code" class="html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt; New Document &lt;/title&gt;
&lt;meta name="Generator" content="EditPlus"&gt;
&lt;meta name="Author" content=""&gt;
&lt;meta name="Keywords" content=""&gt;
&lt;meta name="Description" content=""&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;xmp&gt;
&lt;?xml version="1.0" encoding="unicode"?&gt;
&lt;DATABASE&gt;
	&lt;SCHOOL-INFO&gt;
        &lt;ID&gt;1&lt;/ID&gt;
		&lt;NAME&gt;第一高中&lt;/NAME&gt;
		&lt;CITY&gt;浠水&lt;/CITY&gt;
		&lt;STUDENTS&gt;550&lt;/STUDENTS&gt;
		&lt;ADDRESS&gt;浠水&lt;/ADDRESS&gt;
	&lt;/SCHOOL-INFO&gt;
	&lt;SCHOOL-INFO&gt;
        &lt;ID&gt;2&lt;/ID&gt;
		&lt;NAME&gt;第三高中&lt;/NAME&gt;
		&lt;CITY&gt;团陂&lt;/CITY&gt;
		&lt;STUDENTS&gt;1000&lt;/STUDENTS&gt;
		&lt;ADDRESS&gt;地址团陂&lt;/ADDRESS&gt;
	&lt;/SCHOOL-INFO&gt;
	&lt;SCHOOL-INFO&gt;
        &lt;ID&gt;3&lt;/ID&gt;
		&lt;NAME&gt;试验高中&lt;/NAME&gt;
		&lt;CITY&gt;1200&lt;/CITY&gt;
		&lt;STUDENTS&gt;1200&lt;/STUDENTS&gt;
		&lt;ADDRESS&gt;汪岗&lt;/ADDRESS&gt;
	&lt;/SCHOOL-INFO&gt;
	&lt;SCHOOL-INFO&gt;
        &lt;ID&gt;4&lt;/ID&gt;
		&lt;NAME&gt;中心小学&lt;/NAME&gt;
		&lt;CITY&gt;1300&lt;/CITY&gt;
		&lt;STUDENTS&gt;1200&lt;/STUDENTS&gt;
		&lt;ADDRESS&gt;竹瓦&lt;/ADDRESS&gt;
	&lt;/SCHOOL-INFO&gt;
&lt;/DATABASE&gt;
&lt;/xmp&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<font size="4">
<p>&nbsp;</p>
</font></span></p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252903" style="color:red;">已有 <strong>4</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Oct 2008 23:17:20 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252903</link>
        <guid>http://www.javaeye.com/topic/252903</guid>
      </item>
          <item>
        <title>读取数据库表的信息，生成xml</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://278506470.javaeye.com">278506470</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253343" style="color:red;">http://www.javaeye.com/topic/253343</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>　　既然提到xml，xml只是临时保存数据信息的，通常保存数据都是使用数据库，我想数据库大家肯定不陌生，而数据库中业务表的字段又和页面中的表单直接关联，当然不同的公司使用不同的框架，也就是利用不同的形式将表单和数据库进行关联。这里我就提供一个简单的读取数据表的结构的信息，供大家参考，也可以给我提一提您的宝贵的意见。</p>
<p>　　代码如下：</p>
<pre name="code" class="java">package com.pkusoft.dbtest;

/**
 * 
 * @author HILL
 * @ 本类作为开发辅助作用
 */
public class ColumnInfo {
	private String[] strsAttribus = {"id","type","class","kind","fieldname","datatype" ,"state","maxlength"} ;
	private String id ;
	private String type ;
	private String strClass ;
	private String kind ;
	private String fieldname ;
	private String datatype ;
	private String state ;
	private String maxlength ;
	private String must ;
	private String comment ;
	private String columnName = null ;
	private String columnValue = null ;
	private String columnComment = null ;
	private String columnDatatype = null ;
	private int columnSize  = 0;
	private boolean colmunIsMust = false ;
	public ColumnInfo()
	{}
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}


	public boolean isColmunIsMust() {
		return colmunIsMust;
	}


	public void setColmunIsMust(boolean colmunIsMust) {
		this.colmunIsMust = colmunIsMust;
	}


	public String getColumnComment() {
		return columnComment;
	}


	public void setColumnComment(String columnComment) {
		this.columnComment = columnComment;
	}


	public String getColumnDatatype() {
		return columnDatatype;
	}


	public void setColumnDatatype(String columnDatatype) {
		this.columnDatatype = columnDatatype;
	}


	public String getColumnName() {
		return columnName;
	}


	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}


	public int getColumnSize() {
		return columnSize;
	}


	public void setColumnSize(int columnSize) {
		this.columnSize = columnSize;
	}


	public String getColumnValue() {
		return columnValue;
	}


	public void setColumnValue(String columnValue) {
		this.columnValue = columnValue;
	}


	public String getDatatype() {
		return datatype;
	}


	public void setDatatype(String datatype) {
		this.datatype = datatype;
	}


	public String getFieldname() {
		return fieldname;
	}


	public void setFieldname(String fieldname) {
		this.fieldname = fieldname;
	}


	public String getId() {
		return id;
	}


	public void setId(String id) {
		this.id = id;
	}


	public String getKind() {
		return kind;
	}


	public void setKind(String kind) {
		this.kind = kind;
	}


	public String getMaxlength() {
		return maxlength;
	}


	public void setMaxlength(String maxlength) {
		this.maxlength = maxlength;
	}


	public String getState() {
		return state;
	}


	public void setState(String state) {
		this.state = state;
	}


	public String getStrClass() {
		return strClass;
	}


	public void setStrClass(String strClass) {
		this.strClass = strClass;
	}


	public String[] getStrsAttribus() {
		return strsAttribus;
	}


	public void setStrsAttribus(String[] strsAttribus) {
		this.strsAttribus = strsAttribus;
	}


	public String getType() {
		return type;
	}


	public void setType(String type) {
		this.type = type;
	}


	public String getMust() {
		return must;
	}


	public void setMust(String must) {
		this.must = must;
	}


	public String getComment() {
		return comment;
	}


	public void setComment(String comment) {
		this.comment = comment;
	}

}
</pre>
<p>&nbsp;本类是基础的字段信息类。</p>
<pre name="code" class="java">package com.pkusoft.dbtest;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import java.util.ArrayList;
import java.sql.*;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.sql.Types;
import com.pkusoft.db.DBConnection;

/**
 * 
 * @author HILL
 *
 */
public class TableInfo {
	
	private static String xmlContent = "&lt;?xml version='1.0'?&gt;&lt;PKUDOC&gt;&lt;DATAINFO&gt;&lt;/DATAINFO&gt;&lt;/PKUDOC&gt;" ;
	
	private static String DATAINFO      = "DATAINFO" ;
	
	private static String COMMENT       = "comment" ;
	
	private static String ID            = "id" ;
	private static String TYPE          = "type" ;
	private static String CLASS         = "class" ;
	private static String KIND          = "kind" ;
	private static String FIELDNAME     = "fieldname" ;
	private static String DATATYPE      = "datatype" ;
	private static String STATE         = "state" ;
	private static String MAXLENGTH     = "maxlength" ;
	
	private String[]      strsAttribus  = {TableInfo.ID,TableInfo.TYPE,TableInfo.CLASS,TableInfo.KIND,TableInfo.FIELDNAME,TableInfo.DATATYPE ,TableInfo.STATE,TableInfo.MAXLENGTH} ;
	
	private Hashtable     hDataType     = new Hashtable() ;       // datatype 的字典翻译
	private Hashtable     hKind         = new Hashtable() ;       // kind     的字典翻译
	private Hashtable     hMust         = new Hashtable() ;       // must     的字典翻译	
	
	private String        tableName     = null ;                  // 表的名字
	private String        tableComment  = null ;                  // 表的注释
	private Hashtable     hashtable     = null ;                  // 列的详细信息
	private List          columns       = null ;                  // 列的列表
	
	private String        strXML        = null ;                  // 组织的一个xml
	
	public String getTableName()
	{
		return this.tableName ;
	}
	public String getTableComment()
	{
		return this.tableComment ;
	}
	public Hashtable getColumnInfo()
	{
		return this.hashtable ;
	}
	public List getColumns()
	{
		return this.columns ;
	}
	public String getXML() {
		return strXML;
	}
	
	TableInfo(String strTalbeName){
		try {
			init(strTalbeName) ;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void init(String strTableName)throws Exception{
		strTableName = strTableName.toUpperCase() ;
		this.tableName = strTableName ;
		
		
		hDataType.put(String.valueOf(Types.VARCHAR) ,"0") ;        //VARCHAR2  12
		hDataType.put(String.valueOf(Types.CHAR)    ,"0") ;        //CHAR      1
		hDataType.put(String.valueOf(Types.NUMERIC) ,"1") ;        //NUMBER    2
		hDataType.put(String.valueOf(Types.DATE)    ,"3") ;        //DATE      91
		hDataType.put(String.valueOf(Types.BLOB)    ,"5") ;        //BLOB      2004
		
		hKind.put(String.valueOf(Types.VARCHAR)     ,"text") ;     //VARCHAR2  12
		hKind.put(String.valueOf(Types.CHAR)        ,"text") ;     //CHAR      1
		hKind.put(String.valueOf(Types.NUMERIC)     ,"int") ;      //NUMBER    2
		hKind.put(String.valueOf(Types.DATE)        ,"date") ;     //DATE      91
		hKind.put(String.valueOf(Types.BLOB)        ,"text") ;     //BLOB      2004
		
		hMust.put("0","true") ;
		hMust.put("1","false") ;
		
		DBConnection dbconn = null ;
		String strSql = null ;
		ResultSet rs = null ;
		ResultSetMetaData rsmd = null ;
		try {
			this.columns = new ArrayList() ;
			this.hashtable = new Hashtable() ;
			Hashtable commentHtable = this.getColumnCommonList(strTableName) ;
			strSql = "SELECT * FROM " + strTableName + " WHERE 1=2" ;
			dbconn = new DBConnection() ;
			rs  = dbconn.excuteQuery(strSql) ;
			rsmd = rs.getMetaData() ;
			int colLength = rsmd.getColumnCount() ;
			for(int i=1;i&lt;=colLength;i++)
			{	
				ColumnInfo columnInfo = new ColumnInfo() ;
				String strName = rsmd.getColumnName(i) ;
				String strType = String.valueOf(rsmd.getColumnType(i)) ;
				
				columnInfo.setColumnDatatype(hDataType.get(strType).toString()) ;
				columnInfo.setColumnComment(commentHtable.get(strName).toString()) ;
				String isNullAble = String.valueOf(rsmd.isNullable(i)) ;
				if(isNullAble.equals("0"))
					columnInfo.setColmunIsMust(true) ;
				else
					columnInfo.setColmunIsMust(false) ;
				int colSize = rsmd.getColumnDisplaySize(i) ;
				columnInfo.setColumnSize(colSize) ;
				columnInfo.setColumnName(strName) ;
				Object[] arrObj = {strName.toLowerCase(),"text","Edit",hKind,strTableName +"/" + strName,hDataType,"0",String.valueOf(colSize)} ;
				for(int j=0;j&lt;strsAttribus.length;j++)
				{
					Object o = arrObj[j] ;
					String strTempValue = "" ;
					if(o instanceof String)
						strTempValue = o.toString() ;
					else if(o instanceof Hashtable)
					{
						Hashtable ho = (Hashtable)o ;
						strTempValue =ho.get(strType).toString() ;
					}
					if(strsAttribus[j].equals(TableInfo.ID))
						columnInfo.setId(strName) ;
					else if(strsAttribus[j].equals(TableInfo.TYPE))
						columnInfo.setType(strTempValue) ;
					else if(strsAttribus[j].equals(TableInfo.CLASS))
						columnInfo.setStrClass(strTempValue) ;
					else if(strsAttribus[j].equals(TableInfo.KIND))
						columnInfo.setKind(strTempValue) ;
					else if(strsAttribus[j].equals(TableInfo.FIELDNAME))
						columnInfo.setFieldname(strTempValue) ;
					else if(strsAttribus[j].equals(TableInfo.DATATYPE))
						columnInfo.setDatatype(strTempValue) ;
					else if(strsAttribus[j].equals(TableInfo.STATE))
						columnInfo.setState(strTempValue) ;
					else if(strsAttribus[j].equals(TableInfo.MAXLENGTH))
						columnInfo.setMaxlength(strTempValue) ;
				}
				columnInfo.setMust(hMust.get(isNullAble).toString()) ;
				columnInfo.setComment(commentHtable.get(strName).toString()) ;
				this.hashtable.put(strName, columnInfo) ;
				this.columns.add(strName) ;
				this.strXML = this.organizationXML() ;
			}
			this.tableComment = commentHtable.get(strTableName).toString() ;
		} catch (Exception e) {
			e.printStackTrace() ;
		}
		finally
		{
			if(dbconn !=null)
				dbconn.freeConnection() ;
			if(rs!=null)
				rs.close() ;
		}
	}
	
	private String organizationXML()throws DocumentException{
		Document tempDoc = DocumentHelper.parseText(TableInfo.xmlContent) ;
		Element tabEle = DocumentHelper.createElement(this.getTableName()) ;
		
		Hashtable columnHashtable = this.getColumnInfo() ;
		Enumeration enu = columnHashtable.elements();
		while(enu.hasMoreElements())
		{
			ColumnInfo colInfo = (ColumnInfo)enu.nextElement() ; 
			Element colEle = DocumentHelper.createElement(colInfo.getColumnName()) ;
			
			colEle.addAttribute(TableInfo.COMMENT, colInfo.getColumnComment()) ;
			
			colEle.addAttribute(TableInfo.ID        , colInfo.getId().toLowerCase()) ;
			colEle.addAttribute(TableInfo.TYPE      , colInfo.getType()) ;
			colEle.addAttribute(TableInfo.CLASS     , colInfo.getStrClass()) ;
			colEle.addAttribute(TableInfo.KIND      , colInfo.getKind()) ;
			colEle.addAttribute(TableInfo.FIELDNAME , colInfo.getFieldname()) ;
			colEle.addAttribute(TableInfo.DATATYPE  , colInfo.getColumnDatatype()) ;
			colEle.addAttribute(TableInfo.STATE     , colInfo.getState()) ;
			colEle.addAttribute(TableInfo.MAXLENGTH , String.valueOf(colInfo.getColumnSize())) ;
			tabEle.add(colEle) ;
		}
		tempDoc.getRootElement().element(TableInfo.DATAINFO).add(tabEle) ;
		tempDoc.getRootElement().element(TableInfo.DATAINFO).addAttribute(TableInfo.COMMENT, this.getTableComment()) ;
		return tempDoc.asXML() ;
	}
	
	public java.util.Hashtable getColumnCommonList(String strTableName)throws Exception{
		Hashtable commentHashtable = new Hashtable() ;
		strTableName = strTableName.toUpperCase() ;
		String strSql = "SELECT * FROM USER_COL_COMMENTS WHERE TABLE_NAME='"+strTableName+"'" ;
		String strSql1 = "SELECT COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME='"+strTableName+"'" ;
		DBConnection dbc = null ;
		ResultSet rs = null ;
		try{
			dbc = new DBConnection() ;
			rs = dbc.excuteQuery(strSql) ;
			while(rs.next()){
				String strComment = "" ;
				if(rs.getObject("COMMENTS") == null)
					strComment = "" ;
				else
					strComment = rs.getObject("COMMENTS").toString() ;
				commentHashtable.put(rs.getObject("COLUMN_NAME"), strComment) ;
			}
			dbc.freeConnection() ;
			rs.close() ;
			dbc = new DBConnection() ;
			rs = dbc.excuteQuery(strSql1) ;
			if(rs.next())
				commentHashtable.put(strTableName, rs.getString("COMMENTS")) ;
		}
		catch(Exception e){
			e.printStackTrace() ;
		}
		finally{
			if(dbc!=null)
				dbc.freeConnection() ;
			if(rs != null)
				rs.close() ;
		}
		return commentHashtable ;
	}	

}
</pre>
<p>&nbsp;这是一个表的管理类，管理所有的字段，已经对应生成的xml的信息。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.pkusoft.dbtest;

import java.util.Hashtable;

public class TableFactory {
	
	public static TableFactory tableFactory = null ;
	
	private Hashtable tableList = null ;
	
	public static synchronized TableFactory getInstance(){
		if(tableFactory == null){}
			tableFactory = new TableFactory() ;
		return tableFactory ;
	}
	
	private TableFactory(){
		tableList = new Hashtable() ;
	}
	
	public TableInfo getTableInfo(String strTableName){
		String tempTableName = strTableName.toUpperCase() ;
		TableInfo tempTableInfo = null ;
		if(this.tableList.get(tempTableName) != null)
			tempTableInfo = (TableInfo)this.tableList.get(tempTableName) ;
		else{
			tempTableInfo = new TableInfo(tempTableName) ;
			this.tableList.put(tempTableName, tempTableInfo) ;
		}
			
		return tempTableInfo ;
	}
	
	public static void main(String[] args) {
		TableFactory tabFactory = TableFactory.getInstance() ;
		
		TableInfo tabeInfo = tabFactory.getTableInfo("caseinfo") ;
		System.out.println(tabeInfo.getXML());
	}

}
</pre>
<p>&nbsp;</p>
<p>　　这是一个工厂类，保存表的信息，读取一个表只需要一次访问数据库即可，第一次访问了就将数据信息保存到缓存中，第二次，直接从缓存中读取，这个的目的就是利用内存来换取速度。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个没有提供数据连接的类，如果想测试数据，可以自己写连接测试，以上近作参考。如有疑问，请给我留言。</p>
<p>&nbsp;</p>
<p>这里是我生成的xml结构供大家参考&mdash;&mdash;</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;PKUSOFT&gt;
	&lt;DATAINFO&gt;
		&lt;CASEINFO&gt;
			&lt;CTPANONYMOUS comment="匿名报警，对应DIC_YESORNO" id="CTPANONYMOUS" type="text" class="Edit" kind="int" fieldname="CASEINFO/CTPANONYMOUS" datatype="1" state="0" maxlength="22" /&gt;
			&lt;REPORTMODE comment="报案方式，对应DIC_REPORT_TYPE" id="REPORTMODE" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTMODE" datatype="0" state="0" maxlength="2" /&gt;
			&lt;REPORTERGENDER comment="报案人性别，对应DIC_GENDER" id="REPORTERGENDER" type="text" class="Edit" kind="int" fieldname="CASEINFO/REPORTERGENDER" datatype="1" state="0" maxlength="22" /&gt;
			&lt;LEGAL2 comment="法制办案人二" id="LEGAL2" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGAL2" datatype="0" state="0" maxlength="10" /&gt;
			&lt;CSTATION comment="办案部门市局，对应MANAGEUNIT" id="CSTATION" type="text" class="Edit" kind="text" fieldname="CASEINFO/CSTATION" datatype="0" state="0" maxlength="16" /&gt;
			&lt;LEGAL1 comment="法制办案人一" id="LEGAL1" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGAL1" datatype="0" state="0" maxlength="10" /&gt;
			&lt;REMOVETIME comment="移交时间" id="REMOVETIME" type="text" class="Edit" kind="date" fieldname="CASEINFO/REMOVETIME" datatype="3" state="0" maxlength="7" /&gt;
			&lt;CTP110 comment="110报警，对应DIC_YESORNO" id="CTP110" type="text" class="Edit" kind="int" fieldname="CASEINFO/CTP110" datatype="1" state="0" maxlength="22" /&gt;
			&lt;PSTATION comment="办案部门省厅，对应MANAGEUNIT" id="PSTATION" type="text" class="Edit" kind="text" fieldname="CASEINFO/PSTATION" datatype="0" state="0" maxlength="16" /&gt;
			&lt;LEGALNAME2 comment="法制办案人二姓名" id="LEGALNAME2" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALNAME2" datatype="0" state="0" maxlength="60" /&gt;
			&lt;LEGALNAME1 comment="法制办案人一姓名" id="LEGALNAME1" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALNAME1" datatype="0" state="0" maxlength="60" /&gt;
			&lt;CASEID comment="案件编号" id="CASEID" type="text" class="Edit" kind="text" fieldname="CASEINFO/CASEID" datatype="0" state="0" maxlength="50" /&gt;
			&lt;REQSTATE comment="待办状态，对应DIC_CASESTATE_REQ" id="REQSTATE" type="text" class="Edit" kind="int" fieldname="CASEINFO/REQSTATE" datatype="1" state="0" maxlength="22" /&gt;
			&lt;REPORTRADDR2 comment="报案人住址_详址" id="REPORTRADDR2" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTRADDR2" datatype="0" state="0" maxlength="120" /&gt;
			&lt;REPORTRADDR1 comment="报案人住址_门牌号" id="REPORTRADDR1" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTRADDR1" datatype="0" state="0" maxlength="120" /&gt;
			&lt;LEGALDEPT comment="法制办案部门" id="LEGALDEPT" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALDEPT" datatype="0" state="0" maxlength="16" /&gt;
			&lt;LEGALDEPTNAME comment="法制办案部门名称" id="LEGALDEPTNAME" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALDEPTNAME" datatype="0" state="0" maxlength="90" /&gt;
			&lt;REPORTRSECTIONID comment="报案人住址_行政区划" id="REPORTRSECTIONID" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTRSECTIONID" datatype="0" state="0" maxlength="6" /&gt;
			&lt;CASERESOURCEDES comment="案件来源描述" id="CASERESOURCEDES" type="text" class="Edit" kind="text" fieldname="CASEINFO/CASERESOURCEDES" datatype="0" state="0" maxlength="90" /&gt;
		&lt;/CASEINFO&gt;
	&lt;/DATAINFO&gt;
&lt;/PKUSOFT&gt;</pre>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253343" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 20:59:27 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253343</link>
        <guid>http://www.javaeye.com/topic/253343</guid>
      </item>
          <item>
        <title>RBAC的数据库建立</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mudid.javaeye.com">mudid</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253320" style="color:red;">http://www.javaeye.com/topic/253320</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、数据库，参照网上一些范例，在mysql中创建以下表<br /><pre name="code" class="java">
-- Create the datatable named by 'RBAC_User' to save users.
create table RBAC_User
(

 User_ID int primary key auto_increment,
 
 User_Name varchar(20) not null,
 
 User_PassWord varchar(20) not null,
 
 User_Lock bit not null
);

CREATE UNIQUE INDEX IDX_User ON  RBAC_User(User_Name) ;

-- Create the datatable named by 'RBAC_Group' to save groups.
create table RBAC_Group
(
 
 Group_ID int primary key auto_increment,
 
 Group_Name varchar(20) not null,
 
 Group_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Group ON  RBAC_Group(Group_Name) ;

-- Create the datatable named by 'RBAC_Role' to save roles.
create table RBAC_Role
(

 Role_ID int primary key auto_increment,

 Role_Name varchar(20) not null,

 Role_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Role ON  RBAC_Role(Role_Name) ;

-- Create the datatable named by 'RBAC_Resource' to save Resources.
create table RBAC_Resource
(

 Resource_ID int primary key auto_increment,

 Resource_Name varchar(20) not null,

 Resource_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Resource ON  RBAC_Resource(Resource_Name) ;

-- Create the datatable named by 'RBAC_Operation' to save Operations.
create table RBAC_Operation
(

 Operation_ID int primary key auto_increment,

 Operation_Name varchar(10) not null,

 Operation_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Operation ON RBAC_Operation (Operation_Name);

 --Create the datatable named by 'RBAC_UserGroup' to save userGroup.
create table RBAC_User_Group 
(

 User_Group_ID int primary key auto_increment,

 User_ID int not null,

 Group_ID int not null,

 constraint foreign key(User_ID) references RBAC_User(User_ID) ,

 constraint foreign key(Group_ID) references RBAC_Group(Group_ID)
);

CREATE UNIQUE INDEX IDX_User_Group ON RBAC_User_Group ( User_ID , Group_ID);

-- Create the datatable named by 'RBAC_GroupRole' to save GroupRoles.
create table RBAC_Group_Role
(

 Group_Role_ID int primary key auto_increment,

 Group_ID int not null,

 Role_ID int not null,

 constraint foreign key(Group_ID) references RBAC_Group(Group_ID) ,

 constraint foreign key(Role_ID) references RBAC_Role(Role_ID) 
);

CREATE UNIQUE INDEX IDX_Group_Role ON RBAC_Group_Role(  Group_ID, Role_ID);

-- Create the datatable named by RBAC_Authority to save authorities.
create table RBAC_Authority
(

 Authority_ID int primary key auto_increment,

 Resource_ID int not null,

 Operation_ID int not null,

 constraint foreign key(Resource_ID) references RBAC_Resource(Resource_ID) ,

 constraint foreign key(Operation_ID) references RBAC_Operation(Operation_ID) 
);

CREATE UNIQUE INDEX IDX_Authority ON RBAC_Authority (Resource_ID, Operation_ID);

-- Create the datatable named by RBAC_Permission to save permissions.
create table RBAC_Permission
(

 Permission_ID int primary key auto_increment,

 Role_ID int not null,

 Authority_ID int not null,

 constraint foreign key(Role_ID) references RBAC_Role(Role_ID) ,

 constraint foreign key(Authority_ID) references RBAC_Authority(Authority_ID) 
);

CREATE UNIQUE INDEX IDX_Permission ON RBAC_Permission (Role_ID, Authority_ID);

</pre><br />二、用myEclipse生成pojo、dao后，对hbm.xml的配置部分修改，绕过只起关联关系的表，改为把两个一对多改为一个多对多。<br /><pre name="code" class="java">
//RbacGroup.hbm.xml
         &lt;set name="rbacUsers" table="rbac_user_group" inverse="true" lazy="true" cascade="save-update">
            &lt;key>
                &lt;column name="Group_ID" not-null="true" />
            &lt;/key>
            &lt;many-to-many class="dao.rbac.RbacGroup" column="User_ID" />
        &lt;/set>
        &lt;set name="rbacRoles" table="rbac_group_role" inverse="true" lazy="true" cascade="save-update">
            &lt;key>
                &lt;column name="Group_ID" not-null="true" />
            &lt;/key>
            &lt;many-to-many class="dao.rbac.RbacGroup" column="Role_ID" />
        &lt;/set>
//RbacUser.hbm.xml
         &lt;set name="rbacGroups"  table="rbac_user_group" inverse="false" lazy="true" cascade="save-update">
            &lt;key>
                &lt;column name="User_ID" not-null="true" />
            &lt;/key>
            &lt;many-to-many class="dao.rbac.RbacUser" column="Group_ID" />
        &lt;/set>

//RbacRole.hbm.xml
         &lt;set name="rbacGroups" table="rbac_group_role" inverse="false" lazy="true" cascade="save-update">
            &lt;key>
                &lt;column name="Role_ID" not-null="true" />
            &lt;/key>
            &lt;many-to-many class="dao.rbac.RbacRole" column="Group_ID" />
        &lt;/set>
</pre><br />三、pojo中集合属性的修改，和以上配置保持一致，略...
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253320" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 19:31:43 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253320</link>
        <guid>http://www.javaeye.com/topic/253320</guid>
      </item>
          <item>
        <title>在web集群环境下如何实现网站全局变量</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shinewang.javaeye.com">shinewang</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251854" style="color:red;">http://www.javaeye.com/topic/251854</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近正在开发一个网站，碰到一个关于web集群环境下全局变量实现的问题，例如网站是否开放用户注册，禁用的IP列表这类不经常更改却频繁调用的系统设置，如何实现才能保证不影响系统性能，并且修改后能及时更新到每台服务器？<br /><br />考虑想了几种方法：<br />1.存在数据库中，每次调用时去查数据库 <br />每次都需要查数据库会不会影响性能？<br /><br />2.存在数据库中，本地有一个config类作缓存，每隔一段时间调用计划任务和数据库同步一下<br />更新后同步到其他服务器需要一段时间，不是很及时<br /><br />3.存在数据库中，本地有一个config类作缓存，用JMS发送/接收更新数据<br />需要引入JMS<br /><br />4.直接写在config类中，不提供在web界面的修改配置，修改配置需要改写config类，然后重新部署到各服务器<br />修改配置需要修改代码，管理起来不方便，另外java的热部署只更新这个修改了的config类吗，会不会影响jvm里面其他的类，也就是会不会影响用户？<br /><br />5.存在配置文件中每次读文件，更新时同上一方案<br />性能？热部署？<br /><br />这个问题应该很简单吧，由于不是做互联网的，没什么经验。各位有什么好的想法？
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251854" style="color:red;">已有 <strong>7</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 19:15:31 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251854</link>
        <guid>http://www.javaeye.com/topic/251854</guid>
      </item>
          <item>
        <title>Cwin1.0：从此告别简单烦人的CURD与查询、分页、排序！！</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sunarrow.javaeye.com">sunarrow</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252611" style="color:red;">http://www.javaeye.com/topic/252611</a>&nbsp;
          发表时间: 2008年10月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Cwin的全称为Core Window，开发基于JDK1.5。对于已有系统，Cwin是一个便捷实用的CRUD插件。可以嵌入在任何支持Servlet的Java Web应用中。对于中小型应用而言，Cwin可作为系统的基础架构。Cwin可以大大减少简单繁杂的劳动，从而将精力放在核心业务的开发上来。因为使用Cwin完成功能将不需要编写任何的代码(XML配置除外)。<br />
Cwin的核心概念是Window。那么，什么是一个Window呢？比如一个User的查询与编辑功能就可以配置为一个Window。这个Window将可以完成User的CURD操作。包含查询、排序、分页展示、验证等等完备的功能。<br />
<br />
Cwin的目的，为了使Java的Web开发人员能从这些简单繁杂的劳动中解脱出来。比如单表操作、简单的基础数据维护操作、数据查询操作。我们都知道这些功能都很简单，但是麻雀虽小，五脏（CRUD四个操作、加上验证、分页、查询等等）俱全，这些工作是系统中是很让人头疼的部分，因为大部分代码都在COPY或者使用代码生成器生成。开发人员哼哧哼哧弄完之后还得对功能进行各种测试。而Cwin力图使这些操作完全地自动化。事实上，现在Cwin已经可以在不写入任何代码的情况下自动配置好这些功能。</p>
<p>&nbsp;</p>
<p>另外：Cwin也有一些不错的特性：</p>
<p>1．&nbsp;&nbsp;&nbsp; 使用简单：表与字段定义在一个XML文件中。通过ID访问。</p>
<p><br />
2．&nbsp;&nbsp;&nbsp; 功能全面：对HTML控件全面的支持：Cwin支持大部分的HTML控件配置与在线编辑器(fckeditor)的配置、文件上传。</p>
<p><br />
3．&nbsp;&nbsp;&nbsp; 自动的输入检查。验证条件可以比较灵活地配置。即使您不设置任何的条件Cwin也会根据数据库的字段属性进行输入检查。</p>
<p>&nbsp;</p>
<p>4．
Cwin多种的列输出配置，hidden（面对长字段可以隐藏不在表格中展示，因为表格装不下那么长），pop（面对长字段，可以让经以POP方式跳出
来），link：可以通过此列链接到其它的功能，这个功能非常地实用。None：在表格中不显示此列，比如主键列。</p>
<p><br />
5．&nbsp;&nbsp;&nbsp; 灵活性：Cwin可以使用URL对每一个页面单独进行引用。Cwin支持动态URL的配置。这样Cwin中配置的Window也可以通过URL得以嵌入在其实比较复杂的功能中。</p>
<p><br />
6．&nbsp;&nbsp;&nbsp; 贴心小特点：<br />
A.&nbsp;&nbsp;&nbsp; 对于Value-Desc方式的值。比如用户表的用户类型字段。Cwin在表格展示时自动展示为Desc而不是得对照数据字典才能慬的Value。</p>
<p><br />
B.&nbsp;&nbsp;&nbsp; Window可以动态接收参数作为window的条件与默认值。比如我们现在有一个Window：user。现在我需要有一个功能，按用户类型编辑用户。就可以加入参数 类似userType=value。即可。</p>
<p><br />
C.&nbsp;&nbsp;&nbsp; Cwin支持系统变量的插入。默认的系统变量只有一个：_CWIN_SYS_TIME（系统时间）。我们在Window　user中可以使用到他。因为user的CreateTime需要记录系统时间。modifyTime也需要记录修改时间。如果用户有其它的系统变量，比如操作人。那么用户将需要扩展Cwin的一个类。覆盖某个方法即可。</p>
<p><br />
D.&nbsp;&nbsp;&nbsp; Cwin统一地管理各种与此下拉列表与HTML控件。从此不必在各个页面之间COPY下拉列表了。也不必COPY各个字段的验证代码了。使用代码类似于：</p>
<pre name="code" class="html">&lt;select name=&quot;userType&quot; ref=&quot;user.type&quot;&gt;</pre>
<p>&nbsp;注意ref属性。</p>
<p><br />
E.&nbsp;&nbsp;&nbsp; 如果您使用Cwin。那么Cwin的配置文件可以作为一份不错的数据库文档。因为修改的每一个字段都必须修改配置文件才能得到体现。这样，这份文档总是最新的！</p>
<p>&nbsp;</p>
<p>不多浪费时间。直接上配置文件，有经验的大大们一看这配置文件应该都知道是啥意思了。</p>
<p>一个table配置：</p>
<pre name="code" class="xml">&lt;table id=&quot;user_demo&quot;&gt;
    &lt;field name=&quot;id&quot; desc=&quot;ID&quot; validType=&quot;int&quot; isKey=&quot;true&quot;&gt;
        &lt;input type=&quot;hidden&quot;/&gt;
    &lt;/field&gt;
    &lt;field name=&quot;login_name&quot; desc=&quot;登录名&quot; validType=&quot;signName&quot; order=&quot;login_name&quot; cond=&quot;like&quot;&gt;
        &lt;output dispMode=&quot;link&quot; href=&quot;cwin?_CWIN_ID=user_demo&amp;_CWIN_ACTION=show&amp;id=[id]&quot; target=&quot;_blank&quot;/&gt;
        &lt;comment&gt;请输入正确的登录名&lt;/comment&gt;
    &lt;/field&gt;
    &lt;field name=&quot;email&quot; desc=&quot;电子信箱&quot; validType=&quot;email&quot; order=&quot;email&quot; cond=&quot;like&quot;&gt;
        &lt;comment&gt;请输入正确的电子信箱&lt;/comment&gt;
    &lt;/field&gt;
    &lt;field name=&quot;password&quot; desc=&quot;密码&quot; minLen=&quot;6&quot; maxLen=&quot;20&quot;&gt;
        &lt;comment&gt;请输入符合要求的密码，6--20位长&lt;/comment&gt;
    &lt;/field&gt;
    &lt;field name=&quot;type&quot; desc=&quot;用户类型&quot;&gt;
        &lt;input type=&quot;select&quot;/&gt;
        &lt;options&gt;
            &lt;option desc=&quot;管理员&quot; value=&quot;1&quot;/&gt;
            &lt;option desc=&quot;普通用户&quot; value=&quot;0&quot;/&gt;
        &lt;/options&gt;
    &lt;/field&gt;
    &lt;field name=&quot;create_time&quot; desc=&quot;创建时间&quot; validType=&quot;date&quot;&gt;
        &lt;comment&gt;请输入正确的时间&lt;/comment&gt;
    &lt;/field&gt;
    &lt;field name=&quot;intro&quot; desc=&quot;个人说明&quot; general=&quot;false&quot;&gt;
        &lt;input type=&quot;fckeditor&quot; cols=&quot;870&quot; rows=&quot;195&quot;/&gt;
        &lt;output dispMode=&quot;pop&quot;/&gt;
    &lt;/field&gt;
  &lt;/table&gt;</pre>
<p>&nbsp;不用紧张，这个配置文件不需要您一行行来写的，Cwin会帮您生成基础配置。</p>
<p>一个window的配置：</p>
<pre name="code" class="xml">&lt;window id=&quot;user_demo_1&quot; table=&quot;user_demo&quot; type=&quot;popular&quot; function=&quot;query,add,update&quot;&gt;
	&lt;desc&gt;用户管理中心&lt;/desc&gt;
	&lt;fields&gt;
		&lt;field name=&quot;id&quot;/&gt;
		&lt;field name=&quot;login_name&quot;/&gt;
                &lt;field name=&quot;type&quot;/&gt;
		&lt;field name=&quot;create_time&quot;/&gt;
		&lt;field name=&quot;intro&quot;/&gt;
	&lt;/fields&gt;
	&lt;grid pageSize=&quot;20&quot;/&gt;
	&lt;extra&gt;
		&lt;output desc=&quot;blog&quot; dispMode=&quot;link&quot; href=&quot;http://sunarrow.javaeye.com/&quot;/&gt;
	&lt;/extra&gt;
	&lt;limits&gt;
		&lt;limit name=&quot;type&quot; value=&quot;0&quot;/&gt;
	&lt;/limits&gt;
&lt;/window&gt;</pre>
<p>&nbsp;一个SQL查询Window的配置：</p>
<pre name="code" class="xml">&lt;window id=&quot;user_demo_and_ex&quot; type=&quot;grid&quot; function=&quot;query&quot;&gt;
	&lt;desc&gt;用户以及他的扩展信息(SQL查询)&lt;/desc&gt;
	&lt;fields&gt;
		&lt;field ref=&quot;user_demo.id&quot; isKey=&quot;true&quot; fullName=&quot;u.id&quot;/&gt;
		&lt;field ref=&quot;user_demo.login_name&quot; cond=&quot;like&quot; fullName=&quot;u.login_name&quot;/&gt;
		&lt;field ref=&quot;user_demo.type&quot; order=&quot;u.type&quot;/&gt;
		&lt;field ref=&quot;user_demo.email&quot;/&gt;
		&lt;field ref=&quot;user_demo.intro&quot;/&gt;
		&lt;field ref=&quot;user_demo_ex.real_name&quot; cond=&quot;like&quot; fullName=&quot;ex.real_name&quot;/&gt;
		&lt;field ref=&quot;user_demo_ex.tel&quot;/&gt;
		&lt;field ref=&quot;user_demo_ex.address&quot;/&gt;
		&lt;field ref=&quot;user_demo_ex.postcode&quot;/&gt;
	&lt;/fields&gt;
	&lt;extra&gt;
		&lt;output desc=&quot;BLOG&quot; title=&quot;请帮忙多发些评论啊!&quot; dispMode=&quot;link&quot; href=&quot;http://sunarrow.javaeye.com?id=[id]&quot;/&gt;
	&lt;/extra&gt;
	&lt;sql&gt;select u.id,u.login_name,u.email,u.type,u.intro,ex.real_name,ex.tel,ex.address,ex.postcode from user_demo u left join user_demo_ex ex on (u.id = ex.id)&lt;/sql&gt;
&lt;/window&gt;</pre>
<p><a href="http://code.google.com/p/cwin/downloads/list" target="_blank">有关详细的说明请下载Cwin，其中包含了DEMO与详细的用户手册。</a>
</p>
<p>&nbsp;</p>
<p><a href="/" target="_blank">或许可以到</a>
<a href="/" target="_blank">作者的BLOG
了解信息。</a>
</p>
<p>&nbsp;</p>
<p>有建议与问题欢迎交流！</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252611" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Oct 2008 12:31:03 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252611</link>
        <guid>http://www.javaeye.com/topic/252611</guid>
      </item>
          <item>
        <title>1.5 获得文件路径有变化</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cai555.javaeye.com">cai555</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253143" style="color:red;">http://www.javaeye.com/topic/253143</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>jdk1.4 的时候，我总是通过：</p>
<pre>getClass().getResource
(&quot;myfile&quot;).getFile()

getClass().getResource
(&quot;myfile&quot;).getPath()</pre>
<p>
来获得读取当前类所在位置一起的db.properties文件，但是在1.5里面发现，这个行不通了，得到的结果是：</p>
<p>/F:/.../myfile</p>
<p>前面加了一个'/'</p>
<p>&nbsp;</p>
<p>解决的办法是:</p>
<p>&nbsp;</p>
<p>URL url = getClass().getResource(&quot;myfle&quot;);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
URI uri = new URI(url.toString());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
File file = new File(uri);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
file.getPath();</p>
<p>&nbsp;</p>
<p>附录：</p>
<p>1.4里面这样获得各个路径下的文件：</p>
<p>&nbsp;</p>
<p>props.load(new FileInputStream(&quot;db.properties&quot;)); 是读取当前目录的db.properties文件</p>
<p><br />
getClass.getResourceAsStream(&quot;db.properties&quot;); 是读取当前类所在位置一起的db.properties文件</p>
<p><br />
getClass.getResourceAsStream(&quot;/db.properties&quot;);
是读取ClassPath的根的db.properties文件,注意ClassPath如果是多个路径或者jar文件的,只要在任意一个路径目录下或者
jar文