⑴ 我现在在做一个j2ee的系统,需要实现动态的创建数据库,最好是使用sql文本文件创建
啊啊啊,0分?那我就提档丛示悔历你一点点行前樱算了,动态创建的话,只有规矩的使用sql包获取前台参数,运行传入的语句
备份,恢复,删除,则可以使用Runtime对象.的exec方法运行dos口令.
⑵ 如何用VB编写可以动态生成数据库和表的程序
那只是创建表.还不算动态,动态要二维数组,表达行和列.
如: Dim myDB As DAO.Database
Set myDB = DAO.Workspaces(0).CreateDatabase("d:\md\lll.mdb", dbLangGeneral)
myDB.Execute "Create Table " & 表名 & "(" & "id Counter," & mm1 & " Text(10))"
'生成一个d:\md\lll.mdb数据库存
myDB.Close
打断它:. 表名=数组 字段= combo2数组 字段属性= combo3数组
for..i=0 to combo2.ListCount-1'主工部分处理
myDB.Execute "Create Table " & 表名 & "(" & combo2.list(i) & combo3.list(i) ")"
next
这样生成的表就是一个完全动态的表名,行 列 字段都能自己定义的动态表,
调用查询/删/增/修改.都分别以数组
如:
cn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ur
sq = "select * from " & uyu & " where " & stm(3) & "='" & Form2.Text1(3) & "'"
rs.Open sq, cn, adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
MsgBox "" & stm(3) & "重复,不能添加数据", vbExclamation, "查询"
rs.Close
cn.Close
查询:
For i = 1 To rs.RecordCount
Set Fliv = Form1.ListView1.ListItems.Add()
Fliv.Text = rs.Fields(stm(1))
For r = 1 To sn - 1
Fliv.SubItems(r) = rs.Fields(stm(r + 1))
Next
rs.MoveNext
Next i
'sts = stm(1) & "='" & Form3.Text1(1) & "', " & stm(2) & "='" & Form3.Text1(2) & "', " & stm(4) & "='" & Form3.Text1(4)
For r = 1 To sn - 1
rn = rn + stm(r) & "='" & Form3.Text1(r) & "', "
Next
sts = rn & stm(sn) & "='" & Form3.Text1(sn)
' Form3.Text1(sn).Enabled = False
sq = "Update " & uyu & " set " & sts & "' where " & stm(3) & "='" & Form3.Text1(3) & "'"
cn.Execute (sq)
MsgBox "数据修改完成", vbInformation, "修改"
cn.Close
Set cn = Nothing
Form1.ListView1.ListItems.Clear '先清空表格里的数据
加载列表数据
设成公用变量,全换成数组之后,反面简单明了..
只用提供表名,及字段马上就可以生成你需要数据库..动态数组的交集就是所需字
记录.查询和调用都极为便利.更重要的是大大减小了数据库负担
⑶ 什么叫动态数据库,什么叫静态数据库
动态数据库是一个能够被应用程序和其它的DLL调用的过程和函数的集合体,它里面包含的是公共代码或资源。动态数据库提供了一种方法,使进程可以调用不属于其可执行代码的函数雹喊。
静态数据库是一种用户模块。它提供了函数的完整的目标代码。在静态库情况下,函数和数据被编译进一个二进制文件,Visual C++的编译器在处理程序代码时洞肆首,将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。
(3)动态数据库可以用哪些技术实现扩展阅读:
动态装入动态数据库,要用到Windows的三个API函数,即Loadlibrary、Freelibrary和GetprocAddress函数。纳数
1、Loadlibrary函数调用格式为:function loadlobrary (DdfileName:Pchar): THandle:。
2、、当不再需要一个动态数据库时,应调用FreeLibrary函数将其释放。
FreeLibrary函数调用格式:procere FreeLibrary (Libmole:THandle)。
3、用GetprocAddress函数把动态数据库中函数的地址传递给程序中某个函数变量,再用该变量实现动态数据库函数的调用。
GetprocAddress函数格式:function GetprocAddress (Libmole:THandle:procname:pchar):TFarProc:。
⑷ 如何使用jdbc或者使用hibernate动态创建一个数据库
Hibernate 对有的数据库,,,配置 一下就可以动态创建 。。。。。。。。。。。
⑸ 怎样实现在程序中动态的连接数据库
//动态库和普通进程调用数据库方式没有任何区别,以下的程序兼容WINDOWS ODBC数据库连接和LINUX MYSQL连接,是跨平台的。
#ifdef WIN32
#include <windows.h>
#include <odbcinst.h>
#include <sqlext.h>
#else
#include <mysql.h>
#include <unistd.h>
#define SQLHANDLE static MYSQL
#endif
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
SQLHANDLE hDBEnv, hDBC;
int DB_Open(char * dbcn, char * usr, char * pwd)
{
int r;
#ifdef WIN32
r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hDBEnv);
if(r) return 0;
r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,0);
if(r) return 0;
r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, &hDBC);
if(r) return 0;
r = SQLConnect(hDBC,
(unsigned char *)dbcn, strlen(dbcn),
(unsigned char *)usr, strlen(usr),
(unsigned char *)pwd, strlen(pwd));
return r==SQL_SUCCESS || r==SQL_SUCCESS_WITH_INFO;
#else
mysql_init(&hDBC);
MYSQL * rx = mysql_real_connect(
&hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);
if(!rx) return 0;
return 1;
#endif
}//end DB_Open
int DB_Exec(char * sql)
{
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));
SQLCloseCursor(hStatement);
SQLFreeHandle(SQL_HANDLE_STMT, hStatement);
hStatement = NULL;
#else
mysql_real_query (&hDBC, sql, strlen(sql));
#endif
return 1;
}//end DB_Exec
int DB_Close(void)
{
#ifdef WIN32
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);
#else
mysql_close(&hDBC);
#endif
return 1;
}//DB_Close()
#ifndef WIN32
typedef struct tagMySQLRecordset {
MYSQL_RES * hRecord;
void * * row;
int * size;
int cols;
} MYSQLRecordset;
⑹ C#动态读取数据库(c罗)
首先通过ado.net技术从数据库获取数据,将获取到的数据绑做运桥定到前端显示:悄厅
例://创建基于Windwos身份登录验证的SQLServer的连接字符串
stringstr_conn="server=.;DataBase=数据库;Trusted_Connection=true";//integratedSecurity=true";
//1、用于从数据库中获取数据的查询字纯猛符串
stringstr_select="select需要的字段from表";
//2、开始建立建立并打开连接
myconn=new(str_conn);
myconn.Open();
//3、创建连接,从数据库中读取数据
sql_Adapter=new(str_select,myconn);
//4、创建DataSet连接
DataSetdataset1=newDataSet();
//5、使用.Fill(DataSet_Name,index_name)方法将读取的数据存入DataSet定义的名为任意名的Datatable中,其中任意名表用于数据的标识(索引)
sql_Adapter.Fill(dataset1,"任意名");
//6、将DataTable表中employee表的视图赋值给控件以便输出
this..DataSource=dataset1.Tables["任意名"].DefaultView;
//7、关闭数据库连接
myconn.Close();
⑺ 实现数据库安全控制的常用方法和技术有哪些
这个问题很简单!选D
三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。
⑻ 数据库集群技术有哪些
数据库集群技术
1)提高数据库处理速度的技术
目前有四种提高数据库处理速度的办法:
◆ 提高磁盘速度:这包括RAID和其他磁盘文件分段的处理。主要的思想是提高磁盘的并发度(多个物理磁盘存放同一个文件)。尽管实现方法各不相同,但是它们最后的目的都是提供一个逻辑数据库的存储映象。我们要评价的六个系统都能有效地利用这些技术。由于ICX已经有最大的磁盘冗余度,RAID 磁盘系统的设置应该侧重于速度,而不是数据冗余。这样磁盘利用的效益就会提高。
◆ 分散数据的存放:主要思想是利用多个物理服务器来存放数据集的不同部分(一个数据库表格分散到多个服务器或者每个服务器分管几个内容不同的表格)。这些办法不但可以扩展数据集(数据集的可扩性),而且使得不同的服务器进行并行计算成为可能。例如,对于ORACLE的RAC来讲,由于它是共享磁盘的体系结构,你只需要简单地增加一个服务器节点,RAC就能自动地将这节点加入到它的集群服务中去。RAC会自动地将数据分配到这节点上,并且会将接下来的数据库访问自动分布到合适的物理服务器上,而不用修改应用程序。对于UDB来讲,因为它是非共享磁盘的体系结构,因此就必须手工修改数据的分区,MSCS和ASE也是同样的情况。MySQL也需要手工分区,并且是这几种数据库中支持分区的自动化程度最低的,也就是说,应用程序需要自己负责数据库的分布式访问。不管数据存放是如何实现的,分布式存放数据的缺点是对数据库的可用性有负面影响。任何一台服务器的损坏都会影响整个系统的可用性。但是,这是迄今为止各大数据库厂商能提供的业界最好的数据库集群技术了。ICX是一种基于中间件的数据库集群技术,它对客户端和数据库服务器都是透明的。因此,ICX可以用来集群几个数据库集群(一个逻辑数据库),也可以用于集群几个物理数据库服务器(来增强一个分管关键数据的物理服务器)。
◆ 对称多处理器系统:此技术的思想是利用多处理机硬件技术来提高数据库的处理速度。但是,除了ICX,所有其它的数据库集群技术只支持单一的可修改的逻辑数据库。绝大部分的数据库事务处理是磁盘密集型的,纯计算负荷很小的,对称多处器技术在数据库上的应用的实际收益是很有限的。这也说明了为什么实际应用中最多只用了四个CPU的原因。所有的基于数据库引擎的集群都支持这个技术,ICX对SMP技术是中性的,因为它能把多个数据库服务器集合在一起构成一个集群,也能将多个现存的数据库集群集合在一起,构成集群的集群。
◆ 交易处理负载均衡:此技术的思想是在保持数据集内容同步的前提下,将只读操作分布到多个独立的服务器上运行。因为绝大多数的数据库操作是浏览和查询,,如果我们能拥有多个内容同步的数据库服务器,交易负载均衡就具有最大的潜力(可以远远大于上面叙述的最多达四个处理器的对称多处理器系统)来提高数据库的处理速度,同时会具有非常高的数据可用性(真正达到5个9,即99.999%)。所有基于数据库引擎的集群系统都只支持一个逻辑数据库映象和一个逻辑或物理的备份。这个备份的主要目的是预防数据灾难。因此,备份里的数据只能通过复制机制来更新,应用程序是不能直接更新它的。利用备份数据进行交易负载均衡只适用于一些非常有限的应用,例如报表统计、数据挖掘以及其它非关键业务的应用。只有ICX能够做到同步复制多个数据库服务器从而达到在保持数据一直性前提下的真正的负载平衡。
上述所有技术在实际部署系统的时候可以混合使用以达到最佳效果。
2)提高数据库可用性的技术
根据物理法则,提高冗余度是提高数据库可用性的唯一途径。
提高数据库冗余度大致有四种方法:
◆ 硬件级的冗余:主要思想是让多处理机同时执行同样的任务用以屏蔽瞬时和永久的硬件错误。有两种具体的实现方法:构造特殊的冗余处理机和使用多个独立的数据库服务器。冗余处理机的造价昂贵,效益很低。实际应用日渐减少。基于数据库的集群系统都是用多个独立的数据库服务器来实现一个逻辑数据库,在任意瞬间,每台处理器运行的都是不同的任务。这种系统可以屏蔽单个或多个服务器的损坏,但是因为没有处理的冗余度,每次恢复的时间比较长,它们需要把被损坏的服务进程在不同的服务器上从新建立起来。ICX让多个独立的数据库服务器作同样的处理。发现处理器问题时的切换不需要重建进程的状态,所以故障屏蔽是极快的。
◆ 通讯链路级的冗余:冗余的通讯链路可以屏蔽瞬时和永久的通讯链路级的错误。基于数据库引擎的集群系统有两种结构:共享磁盘和独立磁盘。RAC, MSCS 和 MySQL CS可以认为是共享磁盘的集群系统。UDB和ASE 是独立磁盘的集群系统。共享磁盘集群系统对网络系统的要求很高,所以通讯的冗余度最小。独立磁盘集群系统可以把磁盘系统独立管理,通讯冗余度较高。 ICX的通讯链路级的冗余度最高,因为它使用的是多个独立的数据库服务器和独立的磁盘系统。 ICX也可以用于共享磁盘系统。 但是冗余度会相应降低。
◆ 软件级的冗余:由于现代操作系统和数据库引擎的高度并发性,由竞争条件、死锁、以及时间相关引发的错误占据了非正常停机服务的绝大多数原因。采用多个冗余的运行数据库进程能屏蔽瞬时和永久的软件错误。基于数据库引擎的集群系统都用多个处理器来实现一个逻辑数据库,它们只能提供部分软件冗余,因为每一瞬间每个处理器执行的都是不同的任务。只有ICX可以提供最大程度的软件级冗余。
◆ 数据冗余:有两类冗余数据集。
被动更新数据集:所有目前的数据复制技术(同步或异步),例如磁盘镜像(EMC的TimeFinder系列)、数据库文件复制(如DoubleTake, Veritas and Legato)以及数据库厂商自带的数据库备份工具都只能产生被动复制数据集。通常,为了实现复制功能,需要消耗掉主服务器5%(异步)到30%(同步)的处理能力。被动更新的数据一般只用于灾难恢复.被动更新数据集还有两个致命的问题:一旦主处理机故障造成数据损坏,被动更新的数据集也会被破坏。另外,和主动更新系统相比,被动更新系统对数据网络的带宽要求更高。这是因为它缺少交易的信息,很多数据复制是盲目的。
主动更新数据集:这种数据集需要一台(或多台)独立的备份数据库服务器来管理,由于这种数据集及时可用,它可以有多种用途,例如报表生成,数据挖掘,灾难恢复甚至低质量负载均衡。 同样地,这里也有同步和异步两种技术。
◆ 异步主动复制数据集:这种技术是先把事务处理交给主服务器来完成,然后这些事务处理再被串行地交给备份服务器以执行同样的操作来保证数据的一致性。这种技术生成的数据集和主数据集有一个时间差,所以仅适用于灾难恢复、数据挖掘、报表统计以及有限的在线应用。所有的商用数据库都支持异步主动复制技术。这种办法的难度在于复制队列的管理上,这个队列是用来屏蔽主服务器和备份服务器之间的速度差异的。因为主服务器可以尽可能地利用所有软硬件的并发性来处理并发的事务,而备份服务器只能串行地复制,在高负荷事务处理的情况下,复制队列经常可能溢出。因为没有任何办法来控制事务处理请求的速度,在高负荷事务处理的情况下,复制队列只能经常性地重建。因为所有现代数据库系统都支持热备份和LOG SHIPPING。通过精心策划,应该可以实现不关闭主服务器而重建队列。ICX也支持异步主动复制. ICX的复制队列的重建是通过ICX的自动数据同步软件来完成的,所以不需要人工操作。
◆ 同步主动复制数据集:这种技术要求所有的并发事务处理在所有的数据库服务器上同时完成。一个直接的好处就是没有了队列的管理问题,同时也可以通过负载均衡实现更高的性能和更高的可用性。这种技术也有两种完全不同的实现方法:完全串行化和动态串行化。完全串行化的事务处理来自于主数据库的事务处理引擎,RAC, UDB, MSCS (SQL Server 2005) 和 ASE是用完全串行化并结合两阶段提交协议来实现的,这种设计的目标就是为了获得一份可用于快速灾难恢复的数据集。这种系统有两个关键的问题。第一,两阶段提交协议是一种“ALL OR NOTHING”的协议。仔细研究两阶段提交协议后就能发现,为了获取这备份数据集,事务处理的可用性会降低一半。第二,完全串行化的做法又引进了主-从数据库服务器速度不匹配的问题。强制同步造成整个系统的速度被降低到完全串行化的水平。相反,ICX-UDS采用了动态串行复制引擎。这设计可以充分利用多个独立数据库的处理能力。ICX避免了使用两阶段提交协议,因此一个事务处理只有在集群中的所有服务器全都同时崩溃的情况下才会回滚。
为了防灾,必须使用远程网络。 所以我们在这里讨论远程数据复制的办法。这里大概有四种办法。
◆ 动态远程异步复制:这种办法是指主服务器通过远程网串行地把交易复制到备份服务器上。由于主-副之间的速度不匹配,队列管理的问题就很突出。 由于远程网的速度一般都比较慢,队列溢出的概率大大增加。所有的集群系统都支持这种复制办法,只是队列管理的办法不同而已。DM,FM和RAID都不能支持这种办法。RAID只能在局域网内工作。
◆ 动态远程同步复制.:这种办法是指主服务器通过远程网并行地把交易复制备份服务器上。只有ICX 具有这种能力。
◆ 静态远程异步复制.:这种办法是指通过远程网把数据串行地复制(不通过数据库服务器)到异地。DM和FM支持这种复制办法。因为串行处理和队列管理的关系,这对于处理量大的系统不适用。但是这种复制办法对应用是透明的,所有集群系统都可采用.
◆ 静态远程同步复制.:这种办法也是指通过远程网把数据串行地复制(不通过数据库服务器)到异地。不同的是,这里没有队列管理。取代队列管理的是发送端的一个新的协议:每次发送都要等接受端确认复制成功。否则回滚。DM和FM都支持这种复制办法。这种办法只能在短距离范围内工作, 大约5 英里光纤的样子。如果超出这个距离范围的话,显然事务处理回滚的概率就会很高。但是这种复制办法对应用是透明的,所有集群系统都可采用。
3)提高数据库安全和数据集可扩展的技术
在提高数据库安全性和数据集可扩性这两方面,可以创新的空间是很小的。数据库最常见的安全办法是口令保护,要么是分布式的,要么是集中式的。在数据库前面增加防火墙会增加额外的延迟,因此,尽管许多安全侵犯事件是来自于公司内部,但是数据库防火墙还是很少被采用。如果数据库集群技术是基于中间件技术实现的,就有可能在不增加额外延迟的情况下 ,在数据经过的路径上实现防火墙功能。ICX完全实现了这种思想。
数据库数据集的可扩性只能通过将数据分布到多个独立的物理服务器上来实现。为了弥补可用性的损失,ICX能被用来提高整个逻辑数据库或者部分重要服务器的处理速度,可用性和安全性。
⑼ 关系数据库完整性有哪几类 分别可以使用那些技术实现
关系数据库完整性有域(列)、实体(行)、参照(引用)整性类。
1、域(列)完整性的技术实现:通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。
2、实体(行)完整性的技术实现:关系中的主属性值不能为Null且不能有相同值。
3、参照(引用)完整性的技术实现:对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键游雀的约束。
数据完整性分析
数据库采用多种方磨磨誉法来保证数据完整性,包括外键、约瞎段束、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。
从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。
⑽ 如何做一个动态的简单的数据库
用ASP+Accesss可以非常轻松的搞定,随便找点教程看看即可。