JAVA代理如把远程服务器里的DOMINO数据库数据插入到SQL里

楼主bigfanbigfan1(fanfan)
各位大哥你们好!  
      小弟在此向各位大哥请教!  
  小弟需要在B/S下用JAVA把远程DOMINO服务器数据库里的数据调入到SQL里  
  小弟有两点疑问  
   
  1,小弟不太清楚远程调用的代码,是否这样连接?  
   
  Session   s   =   NotesFactory.createSession(                                         host,   user,   pwd);  
  连接后是否和访问本地NOTES数据库就是一样的了?  
         
  2,因为要在B/S下  
  小弟想请问写好JAVA代码后  
  建立个操作按扭,是否在操作按扭的WEB方式下  
  加入如下语句既可"http://dominio/764/xiafantest.nsf/test3?openagent"实现?  
  希望大侠们赐教,万分感谢! 问题点数:80、回复次数:25 Top
src="/Include/Board.htm?Tags=b/s,domino,服务器,数据库,lotus,视图,代码,远程,数据,测试" frameborder="0" scrolling="no">

1 楼xaser(繁星似火)回复于 2006-02-20 17:55:01 得分 80

你究竟在哪边操作???  
  如果是在本地或其他(如websphere、tomcat)服务器上读取domino数据,则可以用:  
  Session   s   =   NotesFactory.createSession(   host,   user,   pwd);  
  此方法要开domino服务器的diiop、http服务,并将相关的domino包ncso.jar、notes.jar引入到  
  服务器或本地  
   
   
  如果是在domino服务器上读取domino数据并且是bs操作的话,有两种方法  
  例如一个web按钮触发代理:@command([toolsrunmacro];"test3")(此按钮在xiafantest.nsf的一个页面或表单或视图操作中)  
   
  或者如你所写,直接用链接调用代理:http://dominio/764/xiafantest.nsf/test3?openagen  
   
  下面是代理范例:  
  import   java.sql.Connection;  
  import   java.sql.DriverManager;  
  import   java.sql.ResultSet;  
  import   java.sql.Statement;  
   
  import   lotus.domino.AgentBase;  
  import   lotus.domino.AgentContext;  
  import   lotus.domino.Document;  
  import   lotus.domino.Session;  
   
  public   class   testJDBC   extends   AgentBase{  
          private   Session         session   =   null;  
   
          private   Connection   conn         =   null;  
   
          public   void   NotesMain   (){  
   
                  try{  
                          session   =   getSession();  
                          AgentContext   agentContext   =   session.getAgentContext();  
   
                          Document   doc   =   agentContext.getDocumentContext();  
                          //读domino数据  
                              ....  
                              .....  
     
                            //关系型数据库连接  
                          this.initOracleConn();  
                          Statement   stmt   =   null;  
                          ResultSet   rtnRs   =   null;  
                           
                          String   sql   =   "SELECT   *   from   table";     //sql  
                          stmt   =   conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,  
                                                                                  ResultSet.CONCUR_READ_ONLY);  
                          //执行sql  
                          rtnRs   =   stmt.executeQuery(sql);  
                           
                         
   
                  }   catch   (Exception   e){  
                          e.printStackTrace();  
                  }   finally{  
                          conn   =   null;  
                          try{  
                                  session.recycle();  
                          }   catch   (Exception   e){  
                          }  
                          session   =   null;  
                  }  
          }  
   
          //   初始化oracle数据库连接  
          private   void   initOracleConn   ()   throws   Exception{  
                  try{  
                          //   建立Oracle数据库连接  
                          Class.forName("oracle.jdbc.OracleDriver");  
                          conn   =   DriverManager  
                                          .getConnection("jdbc:oracle:thin:@serverName:serverPort:databaseName,userName,   password");  
   
                  }   catch   (Exception   e){  
                          e.printStackTrace();  
                          throw   new   Exception(e.getMessage());  
                  }  
          }  
  }  
  当然,这是很没有效率的方法,可考虑rmiTop

2 楼bigfanbigfan1(fanfan)回复于 2006-02-21 08:19:44 得分 0

是这样的繁星大哥    
  小弟先做的是本地机子测试  
  最终肯定是要做服务器远程测试啥  
  小弟在服务器上建立一个管理员帐户,然后在服务器上建立一个测试数据库  
  小弟在本地机子上远程通过新建的帐户访问服务器  
  小弟的目的就是要在B/S即(WEB方式下)能够在本机上用那个服务器上的测试数据库把测试数据库上的数据插入到本地或者服务器上的SQL数据库里均可  
  主要是这点,小弟不晓得服务器要配置哪些东西  
  不敢乱动  
  因为要是把服务器配置弄错了一点,大哥你也晓得,会被单位挨骂的,所以要先搞清楚一点  
  还有就是大哥说上述方法很没效率,大哥所指的rmi是什么呢?  
  希望繁星大哥赐教,小弟感激不尽,这个恩情会铭记的Top

3 楼bigfanbigfan1(fanfan)回复于 2006-02-21 08:25:27 得分 0

还有小弟没用第三方服务器操作  
  就在本地NOTES上操作远程的DOMINO服务器  
  DOMINO服务器上有个测试数据库  
  小弟想把其中数据在B/S下调入一些到本地SQL上(以后肯定还是要调到服务器SQL上的,只是先做测试)就是这个目的  
  就是搞不清楚有些代码和方法以及服务器的一些配置  
  不敢乱动服务器,先搞清楚点再弄  
  希望大哥能赐教!  
  小弟不知道怎么感谢,在这个论坛里好象只有分可以感谢  
  小弟可以再去注册一个号码,多散点分大哥,这点小意思只能表明小弟一点心意  
  Top

4 楼bigfanbigfan1(fanfan)回复于 2006-02-21 08:58:12 得分 0

小弟再请教一下大哥  
  本地的NOTES和服务器DOMINO上的NOTES.INI需要更改配置不呢  
  DOMINO服务器上JAVA环境需要配置不呢?  
  还有就是我没用第三方服务器,就不用这个语句了啊:Session   s   =   NotesFactory.createSession(                                         host,   user,   pwd);  
   
   
   
  用这个嘛?  
      Session   session=getSession();  
  AgentContext   agentContext   =   session.getAgentContext();  
   
  Database   db=session.getDatabase("domino/764","xiafantest.nsf");  
              View   view=db.getView("shitu1");Top

5 楼xaser(繁星似火)回复于 2006-02-21 09:11:15 得分 0

小弟想把其中数据在B/S下调入一些到本地SQL上(以后肯定还是要调到服务器SQL上的,只是先做测试)就是这个目的  
   
  就按我给的代码就可以了(代理),只是数据库的连接方式改下(我的代码中是连接oracle数据库,sql   server没试过)。  
   
  在你的测试数据库(xiafantest.nsf)中,新建一个页面(或其他的什么设计元素),在此设计元素上新建一个按钮(或操作),按钮调用公式@command([toolsrunmacro];"agentname"),或者调用javascript,打开http://dominio/764/xiafantest.nsf/test3?openagent  
   
  如果要在本地(我用的是eclipse)测试,也很简单,改一下我的代码就行了,如下所示:  
  import   java.sql.Connection;  
  import   java.sql.DriverManager;  
  import   java.sql.ResultSet;  
  import   java.sql.Statement;  
  import   java.util.Vector;  
   
  import   lotus.domino.Database;  
  import   lotus.domino.Document;  
  import   lotus.domino.DocumentCollection;  
  import   lotus.domino.NotesException;  
  import   lotus.domino.NotesFactory;  
  import   lotus.domino.Session;  
  import   lotus.domino.View;  
   
  public   class   testLotus{  
          private     static   Session       session   =   null;  
   
          private   static   Connection   conn         =   null;  
   
          public   static   void   main   (String[]   args){  
                  try{  
   
                          session   =   NotesFactory.createSession("server",   "user",   "password");  
   
                          Database   db   =   session.getDatabase(session.getServerName(),   "764/xiafantest.nsf",   false);  
   
                          //取domino数据  
                          //View   view   =   db.getView("viewname");  
                          //Document   doc   =   view.getFirstDocument();  
   
                          initOracleConn();  
   
                          Statement   stmt   =   null;  
                          ResultSet   rtnRs   =   null;  
                          String   sql   =   "insert   ..........";  
                          stmt   =   conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,  
                                                                                  ResultSet.CONCUR_READ_ONLY);  
   
                          rtnRs   =   stmt.executeQuery(sql);  
                           
                  }   catch   (NotesException   e){  
                          e.printStackTrace();  
   
                  }   catch   (Exception   e){  
                          e.printStackTrace();  
                  }   finally{  
                          try{  
                                  session.recycle();  
                          }   catch   (Exception   e){  
                          }  
                          session   =   null;  
                  }  
          }  
           
          //   初始化oracle数据库连接  
          private     static   void   initOracleConn   ()   throws   Exception{  
                  try{  
                          //   建立Oracle数据库连接  
                          Class.forName("oracle.jdbc.OracleDriver");  
                          conn   =   DriverManager  
                                          .getConnection("jdbc:oracle:thin:@serverName:serverPort:databaseName,userName,   password");  
   
                  }   catch   (Exception   e){  
                          e.printStackTrace();  
                          throw   new   Exception(e.getMessage());  
                  }  
          }  
  }  
   
  Top

6 楼xaser(繁星似火)回复于 2006-02-21 09:24:02 得分 0

本地的NOTES和服务器DOMINO上的NOTES.INI需要更改配置不呢  
   
  跟本地notes无关,如果是在本地调试(eclipse环境)的话,则要开domino的diiop服务,否则也是不用改domino的配置的。在本地调试时,要在java构建路径中引入ncso.jar。  
   
  如果你不做本地调试,而是直接在domino上调试,并且domino已开http,则不需要做任何的配置变更。  
   
  DOMINO服务器上JAVA环境需要配置不呢?  
  不需要,但是domino   r6只支持jdk1.3  
  Top

7 楼bigfanbigfan1(fanfan)回复于 2006-02-21 10:31:46 得分 0

大哥  
  我按照您的代码修改后还是运行是有许些异常  
  我是在本地机子上操作远程服务器DOMINO上的数据库,那个NSF数据库存放在DOMINO服务器上,我用个帐户登陆上去,   这个需要打开diiop服务不呢  
  我们单位的不让随便打开那个服务Top

8 楼xaser(繁星似火)回复于 2006-02-21 12:26:27 得分 0

那就用最上面的代码,不在本地调试,直接在你的测试数据库建代理,  
  通过web调用的方式测试Top

9 楼bigfanbigfan1(fanfan)回复于 2006-02-21 14:02:03 得分 0

大哥  
  小弟在服务器上的测试数据库上建了代理,只是在本地操作远程服务器的,测试数据库在服务器里  
  在WEB方式下,建立个表单,然后建立个操作按扭,浏览下,点击按扭进入该数据库视图,小弟在SQL里检查并没有调入DOMINO服务器里的数据  
  于是小弟转入NOTES里浏览,看JAVA控制台报错信息如下:  
  java.lang.NullPointerException  
   
  at   test3.NotesMain(test3.java:16)  
   
  at   lotus.domino.AgentBase.runNotes(Unknown   Source)  
   
  at   lotus.domino.NotesThread.run(NotesThread.java:208)  
   
  状态栏里显示服务器是连上去了的,但是出现这些异常  
  小弟修改大哥的代码如下:  
  import   java.sql.*;  
  import   lotus.domino.*;  
  public   class   test4   extends   AgentBase{  
          private   Session         session   =   null;  
   
          private   Connection   conn         =   null;  
   
          public   void   NotesMain   (){  
   
                  try{  
                          Session   s   =   getSession();  
                          AgentContext   agentContext   =   s.getAgentContext();  
                                      Database   db=s.getDatabase("domino/764","xiafantest.nsf",false);  
                                      View   view=db.getView("shitu1");  
                                         
             
                                                                                       
                          Document   doc   =   view.getLastDocument();  
                         
                          this.initsqlConn();  
                       
                              Statement   stmt   =   null;  
                          stmt=conn.createStatement();  
                                String   fanfan=doc.getItemValueString("a1");  
                                String   sql="insert   into   t5(t5)     values   ('"+fanfan+"')";  
                                stmt.executeUpdate(sql);  
                       
                         
   
                  }   catch   (Exception   e){  
                          e.printStackTrace();  
                  }   finally{  
                          conn   =   null;  
                          try{  
                                  session.recycle();  
                          }   catch   (Exception   e){  
                          }  
                          session   =   null;  
                  }  
          }  
   
          //   初始化oracle数据库连接  
          private   void   initsqlConn   ()   throws   Exception{  
                  try{  
                          //   建立Oracle数据库连接  
                          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
                          conn   =   DriverManager  
                                          .getConnection("jdbc:odbc:test5","admin","admin");  
   
                  }   catch   (Exception   e){  
                          e.printStackTrace();  
                          throw   new   Exception(e.getMessage());  
                  }  
          }  
  }  
  请大哥看看出错原因,多谢了!  
  Top

10 楼xaser(繁星似火)回复于 2006-02-21 16:20:31 得分 0

然后建立个操作按扭,浏览下,点击按扭进入该数据库视图  
   
  1、在你的测试数据库(764/xiafantest.nsf,在domino服务器上)里面是不是有个表单(或其它的设计元素)???  
  这个设计元素里面是否有个按钮??  
  此按钮是否是公式@command([toolsrunmacro];"agentname")????   代理里面是否是上面你写的内容??  
  如果你引入了外部包,例如我就用到了j2ee.jar,rowset.jar等等包,那么在domino服务器上是否有部署???  
   
  2、打开你的浏览器,http://domino/764/xiafantest.nsf/formname?openform,点击按钮  
   
  3、用domino   administrator   打开服务器的控制台,在后台查看相关信息。Top

11 楼xaser(繁星似火)回复于 2006-02-21 16:25:26 得分 0

我不知道你点击按钮进入视图是怎么回事??  
  如果是按我的方式,这个时候点击按钮应该在原来的页面,只是地址变成了  
  http://domino/764/xiafantest.nsf/formname?openform&seq=1  
   
   
  如在domino   administrator的远端控制台上有出错信息,贴出来看看  
  也可以到domino服务器的日志(log.nsf)中找到出错信息Top

12 楼bigfanbigfan1(fanfan)回复于 2006-02-21 16:51:28 得分 0

繁星大哥我先前说的JAVA环境意思就是,需要的包把它配置在CLASSPATH里  
  我的那个服务器是:domino/764  
  测试数据库是xiafantest.nsf  
  http://dominio/764/xiafantest.nsf/test3?openagen  
  我明天再和您联系,明天要在别人指导下弄服务器,单位服务器我不能随便动,我们是个大单位,不敢随便出问题,不会让新人随便动服务器的,领导要我用JAVA做出来,这个单位以前没做过,我又是新人,所以有点恼火,明天再和您联系  
  您人太好了,大哥,这点分实在是太少了  
  你看到了回一下,我把这个帖子结了  
  再发帖子,散分给大哥您  
  分虽然对大哥您没什么用,但是小弟实在是不知道怎样表达感谢的心意了  
  您看到了回一下,我明天结帐后,再发新的  
  Top

13 楼xaser(繁星似火)回复于 2006-02-21 17:06:24 得分 0

就这个贴吧,好找Top

14 楼bigfanbigfan1(fanfan)回复于 2006-02-22 13:47:07 得分 0

大哥你好!  
  我   今天在自己   机子上装了个DOMINO服务器来做测试  
    现在在建个表单,加个操作按扭,来进行操作,  
      在WEB方式下浏览  
  一个域输入数据回车以后,就是出现该页无法显示的状态,如果点按扭还是那个页面,地址栏也没得变化  
  http://myserver/test1.nsf/biaodan1?OpenForm&Seq=1地址栏里是这样  
  我看服务器状态显示的是:2006-02-22   13:41:52       HTTP   Web   Server:   Lotus   Notes   Exception   -   Error   validatin  
  user's   agent   execution   access   [/test1.nsf/biaodan1?OpenForm&Seq=1]  
  >  
  这个错误,而且检查视图栏目里数据也没有插进去  
  我在WEB方式下,写的连接是"http://myserver/test1.nsf/daili1?openagent"  
  代理代码如下:  
                      import   lotus.domino.*;  
  import   java.sql.*;  
   
  public   class   daili1   extends   AgentBase   {  
   
  public   void   NotesMain()   {  
   
  try   {  
   
   
      Session   s=getSession();  
  AgentContext   agentContext   =   s.getAgentContext();  
         
   
  Database   db=s.getDatabase("myserver","test1.nsf",false);  
              View   view=db.getView("shitu1");  
   
  Document   doc   =view.getLastDocument();  
   
  try  
      {  
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
    }  
    catch(ClassNotFoundException   e)  
    {   e.printStackTrace();}  
                 
  try  
                  {            
                                     
                Connection   conn=DriverManager.getConnection("Jdbc:Odbc:test5","admin","admin");    
                        Statement   stmt=conn.createStatement();  
                        String   fanfan=doc.getItemValueString("a1");  
                    doc.save(true,false);  
                    String   sql="insert   into   t5(t5)   values('"+fanfan+"')";  
                   
              stmt.executeUpdate(sql);  
                 
                                       
                                 
                                    stmt.close();  
                          stmt=null;  
                               
                        conn.close();  
                        conn=null;  
              }  
               
                   
                catch(SQLException   e)  
          {         e.printStackTrace();}  
               
                             
                                       
   
  }   catch(NotesException   e)   {  
  e.printStackTrace();  
  }  
  catch(NullPointerException   e)  
    {     e.printStackTrace();}  
  }  
  }  
                       
  希望大哥能帮小弟看看,指点   一下迷津!Top

15 楼xaser(繁星似火)回复于 2006-02-22 14:44:21 得分 0

Lotus   Notes   Exception   -   Error   validatin   user's   agent   execution   access  
  代理属性、权限怎么设定的??Top

16 楼bigfanbigfan1(fanfan)回复于 2006-02-22 14:54:27 得分 0

大哥  
  代理的属性是设置的是按照操作事件  
  选择的视图中所有文档  
  权限都是设置的所有读者均可  
  还有大哥,我现在客户端NOTES和服务器DOMINO装在一台机子上  
  那个JAVA环境里的NOTES。JAR和NCSO。JAR  
  该配置成NOTES目录下的呢还是DOMINO目录下的呢   ?  
  希望大哥指点一下!Top

17 楼xaser(繁星似火)回复于 2006-02-23 08:16:17 得分 0

notes.jar和ncso.jar是domino本身就有的,如果你是在domino数据库中写代理,就根本不要理,除非你用eclipse之类的ide写java代理,问问你的同事吧,怎么在domino中开发。Top

18 楼bigfanbigfan1(fanfan)回复于 2006-02-23 08:24:26 得分 0

大哥小弟之所以搞得那么困难  
  一主要是小弟才接触这个  
  二是我们单位没人搞JAVA  
  小弟JAVA也不杂样,只懂基础  
  但是领导安排做这个没法  
  只有继续调试了Top

19 楼xaser(繁星似火)回复于 2006-02-23 08:37:16 得分 0

那你对domino熟不熟啊???Top

20 楼xaser(繁星似火)回复于 2006-02-23 08:43:00 得分 0

给我短信吧,看看能不能远程控制帮帮你Top

21 楼yubo1209(稻草人)回复于 2006-02-23 09:15:41 得分 0

upTop

22 楼bigfanbigfan1(fanfan)回复于 2006-02-23 09:25:17 得分 0

大哥  
  这个单位里有保护措施,你登陆不上来的  
  只能我看到您,您看不到我的  
  之郁闷!Top

23 楼bigfanbigfan1(fanfan)回复于 2006-02-23 10:04:48 得分 0

大哥  
  我用以下代码可以在C/S方式下插入到SQL里了,用的是本地DOMINO服务器  
                                import   lotus.domino.*;  
  import   java.sql.*;  
   
  public   class   daili1   extends   AgentBase   {  
   
  public   void   NotesMain()   {  
   
  try   {  
   
                                         
          Session   s   =   NotesFactory.createSession();  
                  //   Session   s=getSession();  
  //AgentContext   agentContext   =   s.getAgentContext();  
            //   Database   db=agentContext.getCurrentDatabase();  
   
  Database   db=s.getDatabase("myserver/zgccc","test1.nsf",true);  
              View   view=db.getView("shitu1");  
  //     DocumentCollection   dc=db.getAllDocuments();  
  Document   doc   =view.getLastDocument();  
   
  try  
      {  
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
    }  
    catch(ClassNotFoundException   e)  
    {   e.printStackTrace();}  
                 
  try  
                  {            
                    //     String   url   =   "jdbc:odbc:test5;Driver={SQL   Server};Server=XXB;userid=admin;password=admin;Database=xf1";                
                  //       Connection   conn=DriverManager.getConnection("url");  
                   
                Connection   conn=DriverManager.getConnection("Jdbc:Odbc:test5","admin","admin");    
                        Statement   stmt=conn.createStatement();  
                        String   fanfan=doc.getItemValueString("a2");  
                    //   System.out.println("   "+"fanfan");  
                //   String   fanfan1="myname";  
      doc.save(true,false);  
                    String   sql="insert   into   t5(t5)   values('"+fanfan+"')";  
                    //Refresh     view;  
              stmt.executeUpdate(sql);  
                      //   ResultSet   rs=stmt.executeQuery("select   *   from   t5");  
                           
                  //     boolean   rc=rs.next();  
                        //     boolean   rc1=rs1.next();  
                        //               if(rc1)  
                          //         {  
                      //           if(rc)  
                            //   {  
                             
                             
                                 
                              //             doc=dc.getNextDocument();  
                  //         }  
                          //doc.save(true,false);      
                        //           rs1.close();  
                      //             rs1=null;  
                      //             rs.close();  
                      //         rs=null;      
                        stmt.close();  
                          stmt=null;  
                               
                        conn.close();  
                        conn=null;  
              }  
               
                   
                catch(SQLException   e)  
          {         e.printStackTrace();}  
               
                             
                                       
   
  }   catch(NotesException   e)   {  
  e.printStackTrace();  
  }  
   
   
  catch(NullPointerException   e)  
    {     e.printStackTrace();}  
  }  
  }  
  但是在B/S下还是不行,在B/S下可以把数据保存到视图中,但是还是插不进SQL里,  
  我用的是一个按扭的WEB方式连接  
        "http://xiafan/zgccc/test1.nsf/daili1?openagent"用的这个  
  大哥,你提点意见吧,C/S下NOTES浏览都可以了,小弟相信你多指点哈,WEB方式也一定能可以!Top

24 楼bigfanbigfan1(fanfan)回复于 2006-02-24 11:23:39 得分 0

大哥  
  我还是没有搞出来  
  我在NOTES中浏览都可以插到SQL里去  
  在WEB下就是插不进去,相当于代理没运行  
  我把代理权限啊,DOMINIO里配置啊那些都检查了一下,没发现什么  
  我用的是在按扭WEB方式下:http://myserver/zgccc/test1.nsf/daili1>openagent"  
   
  Top

25 楼magicknight(堆堆)回复于 2006-02-24 15:18:16 得分 0

大哥  
  我刚到公司  
  要实现文档数据库与关系数据库之间的数据存储  
  跟你的差不多阿~~~~  
  大哥你一定要帮我啊!!! 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值