免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3417 | 回复: 4
打印 上一主题 下一主题

[Lotus] 在notes中向oracle写入文件。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-09 15:04 |只看该作者 |倒序浏览
在做notes库里边的附件上传oracle的时候出现getBlob方法不能使用,因为r5采用的jdk版本为1.1.x,所以陷入困境,那位强人做过这个,还有什么其他方法,给介绍一下(采用java写的)。代码如下:
import lotus.domino.*;
import java.sql.*;
import java.net.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import java.text.*;
import oracle.sql.*;
public class JavaAgent extends AgentBase {

        public void NotesMain() {

                try {
                        Session session = getSession();
                        AgentContext agentContext = session.getAgentContext();
                        Class.forName("oracle.jdbc.driver.OracleDriver";
                        String url=  "jdbcracle:thin127.0.0.1:1521x";
                        Connection conn= DriverManager.getConnection(url, "xx", "xx";
                        Statement stmt=conn.createStatement();
                        Document doc=agentContext.getDocumentContext();
                        RichTextItem zhw=(RichTextItem) doc.getFirstItem("zhenwen";
               String id=null;

               Vector v = zhw.getEmbeddedObjects();               
               Enumeration e = v.elements();
                EmbeddedObject eo = (EmbeddedObject)e.nextElement();
               while (e.hasMoreElements()) {
            
             if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) {
              eo.extractFile("c:\\temp\\" + eo.getSource());
              //eo.remove();           
                }
               }
               String sql="select max(to_number(attachid)+1) from t_attach";
             PreparedStatement pstmt = conn.prepareStatement(sql);
              ResultSet rs = pstmt.executeQuery();
            
              if (rs.next()) {
                      id = rs.getString(1);
                     if (id == null) {
                       id = "000000000001";
                    }
                  else {
                id = id.trim();
                 }
                }

                //ResultSet rs=stmt.executeQuery(sql);
               sql = "insert into t_attach(attachid,attachname,attachcontent,extname,fileid,fileflag)" +
            "values(?,?,empty_blob(),?,?,?)";
              //stmt.execute(sql);
               pstmt = conn.prepareStatement(sql);
               pstmt.setString(1, id);
               pstmt.setString(2, doc.getItemValueString("bh");
               pstmt.setString(3, eo.getClassName());
               pstmt.setString(4, null);
               pstmt.setString(5, "1";
               pstmt.executeUpdate();
               
               File file = new File("c:\\temp",eo.getSource());
               if(file.exists()){
                       eo.getSource();
               } ;
             sql = "select attachcontent from t_attach where attachid=?";
             pstmt = conn.prepareStatement(sql);
             pstmt.setString(1, id);
             rs = pstmt.executeQuery();
             BLOB blob=null;
             if(rs.next()){
                     blob=(oracle.sql.BLOB)rs.getBlob("attachcontent";//该处出现getBlob方法不存在的提示
             }

               InputStream is = new FileInputStream(file);              
               OutputStream os =  blob.getBinaryOutputStream();
               //OutputStream os =new FileOutputStream(file);
               byte[] buf = new byte[4 * 1024];
               int reader = 0;
               while ((reader = is.read(buf)) != -1) {
                os.write(buf, 0, reader);
            }

               
                        // (Your code goes here)

                } catch(Exception e) {
                        e.printStackTrace();
                }
        }
}

[ 本帖最后由 lenf 于 2006-8-9 15:05 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-15 17:28 |只看该作者
jdk版本换更高版本的呢?

论坛徽章:
0
3 [报告]
发表于 2006-08-16 10:53 |只看该作者
请问lotus的jdk版本怎么升级,尤其是r5的.本人试过没有成功

论坛徽章:
0
4 [报告]
发表于 2006-08-19 20:18 |只看该作者
Domino的jdk不能升级,已经从IBM得到了确认。实在不行就升级Domino服务器吧。
Domino6:jdk1.3
Domino7:jdk1.4

论坛徽章:
0
5 [报告]
发表于 2006-08-19 20:21 |只看该作者
另外你可以换个思路,使用DIIOP,编写远程连接程序,从远程Domino读数据然后通过本地Java程序写入Oracle中。这样就不受domino得jdk版本限制了,你甚至可以用更高版本的jdk
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP