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