当柳上原的风吹向天际的时候...

真正的快乐来源于创造

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

#

package com.heyang;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class ModifyWordDocument {
    
public static void main(String[] args) throws Exception {
        
// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
        ComThread.InitSTA();

        
// 实例化ActiveX组件对象:对word进行操作
        ActiveXComponent wrdCom = new ActiveXComponent("Word.Application");

        
// 获取Dispatch的Documents对象
        Dispatch wrdDocs = wrdCom.getProperty("Documents").toDispatch();

        
// 设置打开的word应用程序是否可见
        wrdCom.setProperty("Visible"new Variant(true));

        
// 打开一个已经存在的文档
        Dispatch doc = Dispatch.call(wrdDocs, "Open""c:\\abc.doc")
                .toDispatch();

        
// 获得当前word文档文本
        Dispatch docSelection = Dispatch.get(wrdCom, "Selection").toDispatch();

        
// 从selection所在位置开始查询
        Dispatch find = Dispatch.call(docSelection, "Find").toDispatch();

        
// 设置要查找的内容
        Dispatch.put(find, "Text""测试");
        
// 向前查找
        Dispatch.put(find, "Forward""True");
        
// 设置格式
        Dispatch.put(find, "Format""True");
        
// 大小写匹配
        Dispatch.put(find, "MatchCase""True");
        
// 全字匹配
        Dispatch.put(find, "MatchWholeWord""True");

        Dispatch.call(find, 
"Execute").getBoolean();
        Dispatch.put(docSelection, 
"Text""岳飞");

        
// 另存为
        Dispatch.call(doc, "SaveAs"new Variant("C:\\abc.doc")); // 保存一个新文档

        
// 保存关闭
        if (doc != null) {
            Dispatch.call(doc, 
"Save");
            Dispatch.call(doc, 
"Close"new Variant(true));
            doc 
= null;
        }

        
// 关闭word文件
        wrdCom.invoke("Quit"new Variant[] {});
        
// 释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理
        ComThread.Release();
    }
}
posted @ 2011-06-03 11:42 何杨 阅读(954) | 评论 (0)编辑 收藏

package com.heyang;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;


public class CreateWordDocument{
    
public static void main(String[] args) throws Exception{
        
// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
        ComThread.InitSTA();
        
        
// 实例化ActiveX组件对象:对word进行操作
        ActiveXComponent wrdCom= new ActiveXComponent("Word.Application");
        
        
// 获取Dispatch的Documents对象
        Dispatch wrdDocs=wrdCom.getProperty("Documents").toDispatch();
        
        
// 设置打开的word应用程序是否可见
        wrdCom.setProperty("Visible"new Variant(true));
        
        
// 创建一个新的文档
        Dispatch doc = Dispatch.call(wrdDocs, "Add").toDispatch();
        
        
// 获得当前word文档文本
        Dispatch docSelection = Dispatch.get(wrdCom, "Selection").toDispatch();
        
        
// 输入文字
        Dispatch.put(docSelection, "Text""测试Text");

        
// 另存为
        Dispatch.call(doc, "SaveAs"new Variant("C:\\abc.doc")); // 保存一个新文档

        
// 保存关闭
        if (doc != null) {
            Dispatch.call(doc, 
"Save");
            Dispatch.call(doc, 
"Close"new Variant(true));
            doc 
= null;
        }
        
        
// 关闭word文件
        wrdCom.invoke("Quit"new Variant[] {});        
        
// 释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理
        ComThread.Release();
    }
}
posted @ 2011-06-03 11:16 何杨 阅读(398) | 评论 (0)编辑 收藏

用途:使用Java操作Office组件如Word,Excel等。
官方网址:http://danadler.com/jacob/
1.9版本下载页:http://download.csdn.net/source/709878
也可以从我的地址下载:http://www.blogjava.net/Files/heyang/jacob-Successfully.rar

使用方法:
jacob.jar放到包路径中;
jacob.dll放到C:\WINDOWS\system32下,有时有不配合出错的文件,网上给出解决方案是用1.7的jar配合1.9的dll使用,我试了一下效果还可以。

相关介绍文章:
http://blog.csdn.net/hemingwang0902/archive/2009/07/25/4377994.aspx
http://blog.csdn.net/helloxtayfnje/archive/2009/12/04/4935037.aspx
http://ishare.iask.sina.com.cn/f/7936765.html?from=like
http://jeady.blog.hexun.com/13957703_d.html
http://blog.csdn.net/Matol/archive/2010/11/26/6038087.aspx
http://hi.baidu.com/mingfang0219/blog/item/9648822c5469173a349bf701.html
posted @ 2011-06-02 21:04 何杨 阅读(290) | 评论 (0)编辑 收藏

           this.getJdbcTemplate().execute(
                
new CallableStatementCreator() {
                    
public CallableStatement createCallableStatement(Connection con) throws SQLException {
                        String storedProc 
= "{call updatetractractcode(?, ?)}";// 调用的存储过程
                        CallableStatement cs = con.prepareCall(storedProc);
                        cs.setInt(
1, contractId);// 设置输入参数的值
                        cs.registerOutParameter(2, java.sql.Types.INTEGER);// 注册输出参数的类型
                        return cs;
                    }
                }, 
new CallableStatementCallback() {
                    
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
                        cs.execute();
                        
return cs.getString(2);// 获取输出参数的值
                }
            });
posted @ 2011-06-02 09:05 何杨 阅读(1134) | 评论 (0)编辑 收藏

几个使用JDBC Template常用的工具类

第一:IntegerRowMapper

代码:

public class IntegerRowMapper implements RowMapper {

      public Object mapRow(ResultSet rs, int index) throws SQLException {

            Integer c = new Integer(0);

            c = rs.getInt(1);

            return c;

      }

}

用途:

SQL只是取数量时,可以采用这个类减少一些代码,示例如下:

StringBuilder sb=new StringBuilder();

sb.append("    SELECT");

sb.append("        count(*)");

sb.append("    FROM");

sb.append("        tb_contract");

sb.append("    WHERE");

sb.append("        contract_id='"+id+"' ");

String sql=sb.toString();

 

List<?> ls = this.getJdbcTemplate().query(sql, (new IntegerRowMapper()));

Integer i = (Integer) ls.get(0);

 

第二:StringRowMapper

代码:

public class StringRowMapper implements RowMapper {

      public Object mapRow(ResultSet rs, int index) throws SQLException {

            String c=new String(rs.getString(1));

        return c;

      }

}

用途:当SQL语句只返回一个字符串类型的定值时,采用这个类能减少部分代码,示例如下:

StringBuilder sb=new StringBuilder();

sb.append("    select");

sb.append("         user_name as name");

sb.append("    from");

sb.append("        TB_SYS_USER");

sb.append("    where");

sb.append("         user_id='"+userId+"'");

String sql=sb.toString();

 

List<?> ls = this.getJdbcTemplate().query(sql, (new StringRowMapper()));

String usrName=(String)ls.get(0);

 

第三:RecordCounter

代码:

public class RecordCounter{

      private String sql;

     

      private JdbcTemplate jdbcTemplate;

     

      /**

       * 构造函数

       * @param sql

       * @param jdbcTemplate

       */

      public RecordCounter(String sql,JdbcTemplate jdbcTemplate){

            this.sql=sql;

            this.jdbcTemplate=jdbcTemplate;

      }

     

      /**

       * 得到SQL语句查询到的记录数,对外的关键语句

       * @author: 何杨(heyanghy@cn.ibm.com

       * @date : Apr 23, 2011

       * @time : 11:09:35 AM

       * @return

       */

      public int getCount() throws Exception{

            StringBuilder sb=new StringBuilder();

            sb.append("    select ");

            sb.append("        count(*) as recordCount ");

            sb.append("    from ("+sql+") t ");

            String sql=sb.toString();

           

            class MyRowMapper implements RowMapper {

                  public Object mapRow(ResultSet rs, int index) throws SQLException {

                        Integer c = new Integer(0);

 

                        c=rs.getInt("recordCount");

 

                        return c;

                  }

            }

 

            List<?> ls = jdbcTemplate.query(sql, (new MyRowMapper()));

            Integer i=(Integer)ls.get(0);

           

            return i.intValue();

      }

}

用途:分页时常需要得到SQL语句查询得到的总记录数,采用这个类可以减少部分代码。

示例:略

 

第四:MapRowMapper

代码:

public class MapRowMapper implements RowMapper {

      public Object mapRow(ResultSet rs, int index) throws SQLException {

            List<Map<String,String>> ls=new ArrayList<Map<String,String>>();

       

        int n=rs.getMetaData().getColumnCount();

       

        for(int i=1;i<=n;i++){

            try{

                  Map<String,String> map=new HashMap<String,String>();

                  map.put(rs.getMetaData().getColumnName(i).toLowerCase(), rs.getString(i));

                 

                  ls.add(map);

            }

            catch(Exception ex){

                  continue;

            }

        }

       

        return ls;

      }

}

用途:一般来说,当查询只会返回一条记录时,如按ID得到一条记录,会使用这个Mapping器。得到的对象可以用来给对象赋值。示例如下:

StringBuilder sb=new StringBuilder();

sb.append("    select");

sb.append("        *");

sb.append("    from");

sb.append("        TB_CONTRACT ");

sb.append("    where");

sb.append("        contract_id='"+id+"'");

String sql=sb.toString();

 

List<?> ls = this.getJdbcTemplate().query(sql, (new MapRowMapper()));

 

Map<String,String> map = new HashMap<String,String>();

 

List<?> ls2=(List<?>)ls.get(0);

 

for(Object obj:ls2){

      Map<String,String> mapTemp=(Map<String,String>)obj;

     

      map.putAll(mapTemp);

}

第五:NameValueRowMapper

代码:

public class NameValueRowMapper implements RowMapper {

      public Object mapRow(ResultSet rs, int index) throws SQLException {

            List<NameValue> ls=new ArrayList<NameValue>();

       

        int n=rs.getMetaData().getColumnCount();

       

        for(int i=1;i<=n;i++){

            NameValue nv=new NameValue(rs.getMetaData().getColumnName(i).toLowerCase(),rs.getString(i));

            ls.add(nv);

        }

       

        return ls;

      }

}

 

public class NameValue extends BaseDomainObj{

      private String name;

      private String value;

     

      /**

       * 无参数构造函数

       */

      public NameValue(){

           

      }

     

      /**

       * 双参数构造函数

       * @param name

       * @param value

       */

      public NameValue(String name,String value){

            this.name=name;

            this.value=value;

      }

     

      public String getName() {

            return name;

      }

      public void setName(String name) {

            this.name = name;

      }

      public String getValue() {

            return value;

      }

      public void setValue(String value) {

            this.value = value;

      }

     

      public String asXML() {

            StringBuilder sb=new StringBuilder();

           

            sb.append("<"+name+">");

            sb.append(StringUtils.isBlank(value)?"-":value);

            sb.append("</"+name+">");

           

            return sb.toString();

      }

}

 

public class NameValueList extends BaseDomainObj{

      // 内含NameValue的链表

      private List<?> list;

     

      /**

       * 无参数构造函数

       */

      public NameValueList(){

           

      }

     

      /**

       * 带参数构造函数

       * @param list

       */

      public NameValueList(List<?> list){

            this.list=list;

      }

     

      @SuppressWarnings("unchecked")

      public String asXML() {

            StringBuilder sb=new StringBuilder();

           

           

            for(Object obj:list){

                  List<NameValue> ls=(List<NameValue>)obj;

                 

                  sb.append("<node>");

                  for(NameValue nv:ls){

                        sb.append(nv.asXML());

                  }

                  sb.append("</node>");

            }

           

           

            return sb.toString();

      }

 

      public void setList(List<?> list) {

            this.list = list;

      }

 

      public List<?> getList() {

            return list;

      }

}

说明:将一行记录转化成一个包含键值对的链表,在NameValueList的帮助下能方便的把从数据库得到的行集转化为一段XML

StringBuilder sb=new StringBuilder();

sb.append("    SELECT ");

sb.append("        *");

sb.append("    FROM tb_contract ");

sb.append("    WHERE contract_id='"+id+"'");

String sql=sb.toString();

 

List<?> ls=this.getJdbcTemplate().query(sql,new NameValueRowMapper());

 

NameValueList list=new NameValueList(ls);

 

String xml=list.asXML();

 

 

 

 

 

posted @ 2011-06-01 18:17 何杨 阅读(543) | 评论 (0)编辑 收藏

例如,父窗体中有一个JS方法名为showText(text),则在子窗体中,调用这个函数的方法是:
this.opener.showText("123ABC");
posted @ 2011-05-30 16:15 何杨 阅读(259) | 评论 (0)编辑 收藏

     摘要: 当一个div是以绝对定位方式,采用display="block"方式将其显示时,会发生select框出现在div上方的情况,这时的解决办法是在div放置一个iframe,具体代码如下(粗体部分是不被select遮挡的核心代码,另需要注意的是,有时要用JavaScript调整iframe的高度和宽度!):Code highlighting produced by Actipro CodeHighli...  阅读全文
posted @ 2011-05-29 12:55 何杨 阅读(2341) | 评论 (0)编辑 收藏

具体如下:
<bean:write name="log" property="nextActivity" filter="false"/>

如果nextActivity中有HTML如<br>,<div>等需要按照HTML显示的话,必须加上
属性filter="false",否则会把<br>,<div>这种文本内容显示出来。

posted @ 2011-05-29 11:21 何杨 阅读(1365) | 评论 (3)编辑 收藏

以前我们使用+或则concat对列进行合并,但将行合并就需要程序的支持,如Java或是PL/SQL,这样做有时可能会带来一些小麻烦。
如果是Oracle数据库的话,借助wmsys.wm_concat函数的帮助,可以对行进行合并:
如某用户表有如下数据:


使用SQL:
select  wmsys.wm_concat(name) from EMP
的效果如下:


也就是说wmsys.wm_concat能将行合并起来,并用逗号分隔开来。在取子类别,一对多关系中一方取多方数据时这个函数能起到事半功倍的效果。

凡事总有解决之道,所以要保持沉稳,坚强和自信。
posted @ 2011-05-29 11:00 何杨 阅读(636) | 评论 (0)编辑 收藏

这种方法还是比较迅速的,具体用法请见下面代码:

<html>
    
<head>
        
<title>test</title>
    
</head>
    
<body>
        
<id="link" href="www.baidu.com">百度</a>
        
<input type="button" onclick="showLinkText()" value="显示链接文字"/>
    
</body>
</html>

<script language="javascript">
<!--
function $(id){
    
return document.getElementById(id);
}

//-- 显示链接文字
function showLinkText(id){
    alert($(
"link").innerText);    
}

//-->
</script>

少看电视少上网,少看闲书少扯谈。
posted @ 2011-05-29 10:37 何杨 阅读(282) | 评论 (0)编辑 收藏

仅列出标题
共28页: First 上一页 9 10 11 12 13 14 15 16 17 下一页 Last