domino数据库(sql数据库比domino文本数据库好在哪里)

本文目录
sql数据库比domino文本数据库好在哪里
最近的一些想法让我对文本数据库又一次产生了兴趣,一番搜索,果然发现了不少好东西.
首先是文本数据库的特点,主要相对于传统关于数据库的优缺点:
文本数据库的缺点一是并发访问麻烦,无法实现多个程序同时修改数据库里面的不同记录。
文本数据库的缺点二是查询、修改、删除非常麻烦,只能顺序查找,修改、删除需要更新整个文件。
文本数据库的优点显而易见,程序简单,数据库管理方便。
什么情况下才适合使用文本数据库呢?
首先只有对于无需并发访问的数据库,其次数据库不大(比如只有一条记录),或者不需要修改删除数据的数据库才适合使用文本类型。
比如网站的超级管理员,使用文本数据库存放就有优越性,无需任何数据库扩展,检查权限的程序直接获取文本内容即可,性能会比任何数据库都高。
这个表很少修改,而且也不会许多记录,所以适合用文本数据库。
也有很多开源的基于文本数据库的项目,博客啊论坛都有.这时想起以前旧博客上备份过一个php操作xml的类,这里重新记一下,也算是另一种文本数据库吧:
《?php
* example 读取数据:
*
* $xml = new xml(“dbase.xml“,’table’);
*
* $data=$xml-》xml_fetch_array();
*
* echo “《pre style=“font-size:12px;“》“;
*
* print_r($data);
*
class xml
{
var $dbase; //数据库,要读取的XML文件
var $dbname; //数据库名称,顶层元素,与数据库文件名称一致
var $dbtable; //数据表,要取得的节点
var $parser; //剖析器
var $vals; //属性
var $index; //索引
var $dbtable_array;//节点数组
var $array; //下级节点的数组
var $result; //返回的结果
var $querys;
function xml($dbase,$dbtable)
{
$this-》dbase=$dbase;
$this-》dbname=substr($dbase,strrpos($dbase,“/“)+1,-4);
$this-》dbtable=$dbtable;
$data=$this-》ReadXml($this-》dbase);
if(!$data){
die(“无法读取 $this-》dbname.xml“);
}
$this-》parser = xml_parser_create();
xml_parser_set_option($this-》parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($this-》parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($this-》parser,$data,$this-》vals,$this-》index);
xml_parser_free($this-》parser);
//遍历索引,筛选出要取值的节点 节点名:$dbtable
foreach ($this-》index as $key=》$val) {
if ($key == $this-》dbtable) {
//取得节点数组
$this-》dbtable_array = $val;
} else {
continue;
}
}
for ($i=0; $i 《 count($this-》dbtable_array); $i+=2) {
$offset = $this-》dbtable_array[$i] + 1;
$len = $this-》dbtable_array[$i + 1] - $offset;
//array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。
//所取节点下级数组
$value=array_slice($this-》vals,$offset,$len);
//取得有效数组,合并为结果数组
$this-》array=$this-》parseEFF($value);
}
return true;
}
//将XML文件读入并返回字符串
function ReadXml($file)
{
return file_get_contents($file);
}
//取得有效数组
function parseEFF($effective) {
for ($i=0; $i 《 count($effective); $i++){
$effect[$effective[$i][“tag“]] = $effective[$i][“value“];
}
return $effect;
}
//xml_query(方法,条件,多条件时逻辑运算符and or or,插入或更新的数组)
function xml_query($method,$condition,$if=’and’,$array=array())
{
if(($method==’select’)||($method==’count’)){
return $this-》xml_select($method,$condition,$if);
} elseif($method==’insert’) {
return $this-》xml_insert($condition,$if,$array);
} elseif($method==’update’) {
return $this-》xml_update($condition,$if,$array);
}
}
//取得xml数组
function xml_fetch_array($condition,$if)
{
//$this-》querys++;
$row = $this-》array; //初始化数据数组
if($condition) {
//是否有条件,如有条件则生成符合条件的数组
//生成条件数组,条件格式 field,operator,match
$condition=explode(“,“,$condition);//条件数组
$cs=count($condition)/3; //条件数
for($i=0;$i《$cs;$i++){
$conditions=array(“field“=》$condition[$i*3],
“operator“=》$condition[$i*3+1],“match“=》$condition[$i*3+2]);
}
//echo count($row);
for($r=0;$r《count($row);$r++){
for($c=0;$c《$cs;$c++){
//$i++;
$condition=$conditions[$c]; //当前条件
$field=$condition[’field’]; //字段
$operator=$condition[“operator“];//运算符
$match=$condition[’match’]; //匹配
if(($operator==’=’)&&($row[$r][$field]==$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’!=’)&&($row[$r][$field]!=$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’《’)&&($row[$r][$field]《$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’《=’)&&($row[$r][$field]《=$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’》’)&&($row[$r][$field]》$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’》’)&&($row[$r][$field]》=$match)){
$true++;//若条件符合,符合数加1
}
}
//根据条件取值
if($if==’and’){
//如果多条件为and,当符合数等于条件数时,生成数组
if($true==$cs){
$result=$row[$r];
}
} else {
//如果多条件为or,当有符合纪录时,生成数组
if($true!=0){
$result=$row[$r];
}
}
//echo $true;
//echo “《pre style=“font-size:12px;text-align:left“》“;
//print_r($true);
$true=0;//符合条件数归零,进入下一轮循环
}
} else {
$result=$this-》array;
}
//echo “《pre style=“font-size:12px;text-align:left“》“;
//print_r($this-》result);
return $result;
}
//筛选或统计
function xml_select($method,$condition,$if)
{
$result=$this-》xml_fetch_array($condition,$if);
if($method==’select’){
return $result;
} else {
return count($result);
}
}
//插入数据
function xml_insert($condition,$if,$array)
{
$data=$this-》xml_fetch_array($condition,$if);//总数据数组
$data=$array; //插入后的总数据数组
$this-》array=$data; //更新总数组
$this-》WriteXml($data);
}
//得到更新的XML并改写
function xml_update($condition,$if,$array)
{
$datas=$this-》array; //总数据数组
$subtract=$this-》xml_fetch_array($condition,$if);//要更新的数组
//echo “《pre style=“font-size:12px;text-align:left“》“;
//print_r($data);
//print_r($datas);
//echo “每条记录中有“.count($datas).“个值《br》“;
for($i=0;$i《count($datas);$i++){
$data=$datas[$i];
//echo “原始记录中的第“.$i.“条《br》“;
foreach($data as $k=》$v){
//echo “-第“.$i.“条的“.$k.“值为“.$v.“《br》“;
//echo “--要查找的数组“.$k.“值为“.$subtract[$k].“《br》“;
if($v==$subtract[$k]){
$is++;
}
}
if($is==count($data)){
//echo “----与第“.$i.“条符合《br》“;
$datas[$i]=$array;
//array_splice($datas,$i,$i+1);
}
//echo “原始记录中的第“.$i.“条与要查找的有“.$is.“匹配《br》“;
//echo “原始记录中的第“.$i.“条结束《br》“;
$is=0;
}
//array_splice($datas,2,2+1,$array);
//echo “《pre style=“font-size:12px;text-align:left“》“;
//print_r($datas);
$this-》array=$datas;
$this-》WriteXml($datas);
}
//写入XML文件(全部写入)
function WriteXml($array)
{
if(!is_writeable($this-》dbase)){
die(“无法写入“.$this-》dbname.“.xml“);
}
$xml.=“《?xml version=“1.0“ encoding=“utf-8“?》rn“;
$xml.=“《$this-》dbname》rn“;
for($i=0;$i《count($array);$i++){
$xml.=“《$this-》dbtable》rn“;
foreach($array[$i] as $k=》$s){
$xml.=“《$k》$s《/$k》rn“;
}
$xml.=“《/$this-》dbtable》rn“;
}
$xml.=“《/$this-》dbname》“;
$fp=@fopen($this-》dbase,“w“);
flock($fp, LOCK_EX);
rewind($fp);
fputs($fp,$xml);
fclose($fp);
}
//逐行写入xml(我试着写入10000行,感觉没一次写入快,所以没用这种写入方式)
function WriteLine($array)
{
if(!is_writeable($this-》dbase)){
die(“无法写入“.$this-》dbname.“.xml“);
}
$fp=@fopen($this-》dbase,“w“);
rewind($fp);
flock($fp, LOCK_EX);
fputs($fp,“《?xml version=“1.0“ encoding=“utf-8“?》rn“);
fputs($fp,“《$this-》dbname》rn“);
for($i=0;$i《count($array);$i++){
fputs($fp,“《$this-》dbtable》rn“);
$xml.=“《$this-》dbtable》rn“;
foreach($array[$i] as $k=》$s){
fputs($fp,“《$k》$s《/$k》rn“);
}
fputs($fp,“《/$this-》dbtable》rn“);
}
fputs($fp,“《/$this-》dbname》“);
fclose($fp);
}
}
?》
再一查,其实这种文本数据库也是很强大的,像txtsql,txtDB API,txtdb等等.
用好了也可以扬长避短.
说回来各有各的好处,也就要学会在合适的地方用上合适的工具.可以研究一下php操作文本数据库.
java调用domino数据库
java访问操作lotus domino数据库
有几种方式:
1、直接使用domino本身的jar文件接口,这种连接方式需要domino服务器启动diiop服务;
2、使用domino的lddj接口,接口可以到ibm的网站上去下载,这种连接方式只能在window环境下使用,需要安装notes客户端,使用id来验证的,需要手动输入密码;
http://www-12.lotus.com/ldd/doc/drivers/jdbc/1.5/lddj_help.nsf
3、使用corba来访问domino,这个比较烦,我至今没有调通
http://www.oaunion.com/oaunion/o ... pendocument&skeyword=corba发表者:slzhang
是可以通过java来取得domino的资料.也可以通过jsp来读domino里的资料,只要你在domino上打开diiop服务就可以.
附一个jsp的例子如下:
《%@ page c language=“java“%》
《%@ page import=“com.dragon.*“ %》
《%@ page import=“lotus.domino.*“ %》
《%!
session sess;
database db;
view view;
document doc;
string host = ““,user = ““, pawd = ““;
%》
《%
try{
sess = notesfactory.createsession(“192.168.2.1“,“admin“,“12345678“);
host = sess.getservername();
user = sess.getusername();
system.out.println(“host: “ + host + “; user: “ +user);
db = sess.getdatabase(host,“fawen\\sample.nsf“,false);
view = db.getview(“jsp“);
doc = view.getfirstdocument();
out.println(db.gettitle());
}catch(notesexception ne){
system.out.println(“error: “ + ne.id + “ ==》 “ + ne.getmessage());
}
%》
《html》
《head》
《title》jsp get domino data《/title》
《/head》
《body》
《table border=“1“ bgcolor=“#ff33cc“》
《tr》《th》 姓名《/th》《th》性别《/th》《th》生日《/th》《th》职务《/th》《th》职称《/th》《th》 部门《/th》《/tr》
《%
while(doc!=null){
%》
《tr》
《td》《%= doc.getitemvalue(“jname“) %》《/td》
《td》《%= doc.getitemvalue(“jsex“) %》《/td》
《td》《%= doc.getitemvalue(“jbirth“) %》《/td》
《td》《%= doc.getitemvalue(“jjob“) %》《/td》
《td》《%= doc.getitemvalue(“jjobtitle“) %》《/td》
《td》《%= doc.getitemvalue(“jdept“) %》《/td》
《/tr》
《%
doc = view.getnextdocument(doc);
}
out.println(“host: “ + host + “; user: “ +user);
doc.recycle();
view.recycle();
db.recycle();
sess.recycle();
%》
《/table》
《/body》
《/html》
发表者:cnhxjtoa
以前我写过domino5--》oracle8
以下是与domino建立链接的相关代码
import lotus.domino.*;
try {
system.out.println(“开始notes数据源进行连接....“);
session s = notesfactory.createsession(noteshost,username,userpassword);
system.out.println(“与notes数据源成功连接,现正在查找notes登录数据库oak.nsf“);
//定义全局性变量
database db = null;
database namesdb=null;
view view =null;
document doc = null;
string namesuser=““;
db = s.getdatabase(s.getservername(), sysinf.notes_dir +“/oak.nsf“);
acl acl = db.getacl();
aclentry entry = acl.getfirstentry();
namesdb=s.getdatabase(s.getservername() ,“names.nsf“) ;
view = namesdb.getview(“groups“);
do
{
//具体分析每一个对象
switch (entry.getusertype()) {
case aclentry.type_mixed_group :
//混合组
system.out.println(“混合组 “+entry.getname()) ;break;
case aclentry.type_person :
//个人
namesuser=entry.getname().substring(3,entry.getname().indexof(“/“) );
addnotesuser(namesuser);
system.out.println(“个人 : “+ namesuser) ;
break;
case aclentry.type_person_group :
//个人群组
system.out.println(“个人群组: “+entry.getname() ) ;
//names.nsf 中视图groups 文档members域有每一个用户
doc = view.getfirstdocument();
while (doc != null && !doc.getfirstitem(“listname“).gettext().equals(entry.getname() ) )
{
doc = view.getnextdocument(doc);
}
if (doc!=null){
enumeration values = doc.getfirstitem(“members“).getvalues().elements();
while (values.hasmoreelements()) {
//将cn=administrator/o=autosoft只取它的名字administrator
namesuser=values.nextelement().tostring() ;
namesuser=namesuser.substring(3,namesuser.indexof(“/“) ) ;
addnotesuser(namesuser);
}
}
break;
case aclentry.type_server :
//服务器
system.out.println(“服务器 “+entry.getname()) ;break;
case aclentry.type_server_group :
//服务器组
system.out.println(“服务器组 “+entry.getname()) ;break;
case aclentry.type_unspecified :
//没有指定
if(entry.getname().indexof(“/“)》1 )
{
namesuser=entry.getname().substring(3,entry.getname().indexof(“/“) );
addnotesuser(namesuser);
system.out.println(“找到一个没有指定类型的用户 “+entry.getname().substring(3,entry.getname().indexof(“/“))) ;
break;
}
else
{
system.out.println(“没有指定 “+entry.getname()) ;
break;
}
}
} while ((entry = acl.getnextentry(entry)) != null);
system.out.println(“用户导入完成“) ;
}
catch (exception ex)
{
ex.printstacktrace() ;
system.out.println(“与notes数据源连接失败“ ) ;
}
JAVA可以操作domino类型的数据库吗
可以的,有几种方式:
1、直接使用Domino本身的jar(notes.jar或NCSO.jar)文件接口,这种连接方式需要Domino服务器启动DIIOP服务;
2、使用Domino的LDDJ(Lotus Domino Drivers for JDBC)接口,接口可以到IBM的网站上去下载,这种连接方式只能在window环境下使用,需要安装notes客户端,使用ID来验证的,需要手动输入密码;
http://www-12.lotus.com/ldd/doc/drivers/jdbc/1.5/lddj_help.nsf
3、使用Corba来访问Domino,这个比较烦,我至今没有调通
http://www.oaunion.com/oaunion/oaunion.nsf/doc/05728898F1320F4F48256DF7004CFBE5?opendocument&skeyword=Corba
java怎样读domino数据库中的数据
Class.forName的(“com.mysql.jdbc.Driver”);
连接conn = DriverManager.getConnection(“JDBC:mysql的:/ /”+主机+“/”+数据库名,用户名,密码);
声明STMT = conn.createStatement();
ResultSet的RS = Stmt.executeQuery(SQL);
这是基本的数据库操作
关于这个过程是加载驱动程序类,创建一个连接,执行数据库操作,关闭
后的数据源,连接池
Hibernate的对象关系映射的类来操作数据库的日常的日常项目

更多文章:
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00







