主页 > 生活百科 > > 正文

[为什么需要数据库]为什么要用数据库

发布时间: 2020-10-08 12:08:01 来源: 百科讲坛 阅读数:

导语 : [为什么需要数据库]为什么数据库连接的时候 这是不是用动态语言连数据库时运行出现这句话?这个问题我也碰到过右击SQL服务器-属性-安全性身份验证选择"windows身份验证与sql身份验证

[为什么需要数据库]为什么数据库连接的时候

这是不是用动态语言连数据库时运行出现这句话?这个问题我也碰到过右击SQL服务器-属性-安全性身份验证选择"windows身份验证与sql身份验证"

为什么需要数据库

[为什么需要数据库]需要自己安装数据库和配置服务器吗

不需要配置,空间本身就支持这些.数据库也提供的.只要你自己安装网站即可~有问题别客气,尽管说~MyQQ326.395.423

[为什么需要数据库]数据库中为何要设置主键呢

主键:概念主关键字(主键,primarykey)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。

主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。作用1)保证实体的完整性;2)加快数据库的操作速度3)

在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。4)ACCESS自动按主键值的顺序显示表中的记录。

如果没有定义主键,则按输入记录的顺序显示表中的记录。特点1)一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。

在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。2)主键的值不可重复,也不可为空(NULL)。

[为什么需要数据库]sql数据库入门需要学习那些

数据库基本原理,要懂一些的.可以对照理论在SQL数据库中走例子,大量的练习这个是必须的了.学会了基本的,搞搞SQL优化,便是提高了.

[为什么需要数据库]app如何从数据库中获取需要的数据

SQLite是轻量级嵌入式数据库引擎,它支持SQL语言,并且只利用很少的内存就有很好的性能。SQLite

基本上符合SQL-92标准,和其他的主要SQL数据库没什么区别。它的优点就是高效,Android运行时环境包含了完整的

SQLite。SQLite和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在CREATE

TABLE语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite

将检查它的类型。如果该类型与关联的列不匹配,则SQLite会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。

比如可以把一个字符串(String)放入INTEGER列。SQLite称这为“弱类型”(manifest

typing.)。此外,SQLite不支持一些标准的SQL功能,特别是外键约束(FOREIGNKEY

constrains),嵌套transcaction和RIGHTOUTERJOIN和FULLOUTER

JOIN,还有一些ALTERTABLE功能。除了上述功能外,SQLite是一个完整的SQL系统,拥有完整的触发器,交易等等。

Android集成了SQLite数据库Android在运行时(run-time)集成了SQLite,所以每个

Android应用程序都可以使用SQLite数据库。对于熟悉SQL的开发人员来时,在Android开发中使用

SQLite相当简单。但是,由于JDBC会消耗太多的系统资源,所以JDBC对于手机这种内存受限设备来说并不合适。

因此,Android提供了一些新的API来使用SQLite数据库,Android开发中,程序员需要学使用这些

API。Android提供了SQLiteOpenHelper创建一个数据库,只要继承SQLiteOpenHelper

类,就可以轻松的创建数据库。SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。

SQLiteOpenHelper的子类,至少需要实现三个方法:1构造函数,调用父类SQLiteOpenHelper

的构造函数。这个方法需要四个参数:上下文环境(例如,一个Activity),数据库名字,一个可选的游标工厂(通常是

Null),一个代表你正在使用的数据库模型版本的整数。2onCreate()方法,它需要一个SQLiteDatabase

对象作为参数,根据需要对这个对象填充表和初始化数据。3onUpgrage()方法,它需要三个参数,一个

SQLiteDatabase对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

[为什么需要数据库]需要修改的是(

选A参考资料如下:保证数据的逻辑独立性当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。

[为什么需要数据库]A1科密考勤系统为什么数据库连接连接不上

单机使用:1、检查MSDE或SQLServer是否安装;2、检查MSDE或SQLServer是否启动;3、检查A1的连接数据库界面的连接参数是否正确(默认windows验证);4、检查服务器名是否为默认实例局域网中连接,需要检查的就更多了:1、防火墙;2、是否在网络开放SQLServer的访问(监听1433端口);3、MSDE在XP下要打SP44、网络访问权限5、服务器名称.

[为什么需要数据库]为什么要用数据库

问题:为什么要用数据库为了更加精确快速方便人性化的管理你的所有数据。所以要使用数据库。数据库有非常方便快捷的管理工具。

查询之类的更是非常人性化。不同的角色权限不同,有管理员权限,有组管理权限,有用户权限。如果不定角色,每个用户都有相同的权限,那数据库就会无法管理。

1.Public:全体用户所共有的角色。如工厂中所有的工人都有进入工厂的权限。2.db_owner:

此角色允许用户完全控制数据库。3.db_securityadmin:此角色的用户允许管理所有的角色以及这些角色的成员。

此角色也可以管理对角色权限的分配。备注:但不能向已有的角色中增加用户,但可以向创建的角色中添加用户。

4.db_accessadmin:此角色用于赋予用户在数据库中添加或删除用户的权利。通常和db_securtiyadmin角色的连用,使用户能有足够管理用户角色的权限。

编程只是为了实现某些功能,里面主要负责的是业务逻辑的处理,而这些需要处理的数据必须要用到一个存储的工具数据库能够更加有效、便捷地

[为什么需要数据库]编程为什么要用数据库

编程只是为了实现某些功能,里面主要负责的是业务逻辑的处理,而这些需要处理的数据必须要用到一个存储的工具在使用

VC、VB、Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源。

对于一般用户而言,配置ODBC数据源可能是一件比较困难的工作。而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷。

为能在程序中完成这一工作,方便应用程序的使用,本文以VC为开发环境介绍两种在应用程序中动态加载ODBC系统数据源的方法。

方法一:修改注册表设计思路一般情况下,当用户在控制面板中配置好ODBC数据源后,Windows系统便在注册表中加入了一些子键来存储用户的配置结果。

当应用程序需要用到数据源时,Windows便会通知底层接口查阅注册表中该数据源的配置。如果用户删除了某个

ODBC数据源,那么也会在注册表中有所反应。如果配置的数据源是用户数据源,Windows系统便会修改注册表的

HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI子键;如果配置的数据源是系统数据源,

Windows系统便会修改注册表的HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI主键。

因此,我们可以在应用程序中使用WindowsAPI中的注册表编辑函数来完成Windows所做的工作,这样就可以达到动态加载数据源的目的。

具体实现对于不同类型的数据源,注册表的修改也各有不同,但基本上都要修改两个地方。一个是在ODBC.INI子键下建立一个与数据源描述名同名的子键,并在该子键下建立与数据源配置相关的项;另一个是在

\ODBC.INI\ODBCDataSources子键下建立一个新项以便告诉驱动程序管理器ODBC数据源的类型。

下面以配置一个MicrosoftAccess数据源为例给出实现此功能的函数的代码。/*strSourceName是要创建的数据源名,

strSourceDb是数据库存放路径,strDescription是数据源的描述字符串。*/BOOL

CLoadOdbcDlg::LoadDbSource(CStringstrSourceName,CString

strSourceDb,CStringstrDescription){//存放打开的注册表键HKEY

hKey;DWORDdw;//存放注册表API函数执行的返回值LONGlReturn;//存放要打开的子键

CStringstrSubKey;//检测是否安装了MSAccessODBCdriver:odbcjt32.dll

//获得Windows系统目录charsysDir[MAX_PATH];chardrvName[]="

\\odbcjt32.dll";::GetSystemDirectory(sysDir,MAX_PATH);

strcat(sysDir,drvName);CFileFindfindFile;if(!findFile.FindFile

(sysDir)){AfxMessageBox("您的计算机系统中没有安装MSAccess的ODBC驱动程序

odbcjt32.dll,您将无法加载该类数据源。",MB_OK|MB_ICONSTOP);return

false;}strSubKey="SOFTWARE\\ODBC\\ODBC.INI\\"+strSourceName;

//创建ODBC数据源在注册表中的子键lReturn=::RegCreateKeyEx(HKEY_LOCAL_

MACHINE,(LPCTSTR)strSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&

hKey,&dw);if(lReturn!=ERROR_SUCCESS)returnfalse;//设置数据源的各项参数

CStringstrDbq=strSourceDb;CStringstrDriver=sysDir;

DWORDdwDriverId=25;CStringstrFil="MSAccess";CString

strPwd=strSourceName;DWORDdwSafeTransactions=0;CString

strUid=strSourceName;::RegSetValueEx(hKey,"DBQ",0L,REG_SZ,

(CONSTBYTE*)((LPCTSTR)strDbq),strDbq.GetLength());

::RegSetValueEx(hKey,"Description",0L,REG_SZ,(CONST

BYTE*)((LPCTSTR)strDescription),strDescription.GetLength());

::RegSetValueEx(hKey,"Driver",0L,REG_SZ,(CONSTBYTE*

)((LPCTSTR)strDriver),strDriver.GetLength());::RegSetValueEx

(hKey,"DriverId",0L,REG_DWORD,(CONSTBYTE*)(&dwDriverId),sizeof(dw));

::RegSetValueEx(hKey,"FIL",0L,REG_SZ,(CONSTBYTE*)((LPCTSTR)

strFil),strFil.GetLength());::RegSetValueEx(hKey,"

PWD",0L,REG_SZ,(CONSTBYTE*)((LPCTSTR)strPwd),strPwd.GetLength

());::RegSetValueEx(hKey,"SafeTransactions",0L,REG_DWORD,(CONST

BYTE*)(&dwSafeTransactions),sizeof(dw));::RegSetValueEx

(hKey,"UID",0L,REG_SZ,(CONSTBYTE*)((LPCTSTR)strUid),strUid

.GetLength());::RegCloseKey(hKey);//创建ODBC数据源的Jet子键

strSubKey+="\\Engines\\Jet";lReturn=::RegCreateKeyEx

(HKEY_LOCAL_MACHINE,(LPCTSTR)strSubKey,0,NULL,REG_OPTION_NON_

VOLATILE,KEY_WRITE,NULL,&hKey,&dw);if(lReturn!=ERROR_SUCCESS)

returnfalse;//设置该子键下的各项参数CStringstrImplict="";CString

strUserCommit="Yes";DWORDdwPageTimeout=5;DWORDdwThreads=3;

DWORDdwMaxBufferSize=2048;::RegSetValueEx(hKey,"ImplictCommitSync"

,0L,REG_SZ,(CONSTBYTE*)((LPCTSTR)strImplict),strImplict.GetLength

()+1);::RegSetValueEx(hKey,"MaxBufferSize",0L,REG_DWORD,(CONST

BYTE*)(&dwMaxBufferSize),sizeof(dw));::RegSetValueEx

(hKey,"PageTimeout",0L,REG_DWORD,(CONSTBYTE*)(&dwPageTimeout),sizeof(dw));

::RegSetValueEx(hKey,"Threads",0L,REG_DWORD,(CONST

BYTE*)(&dwThreads),sizeof(dw));::RegSetValueEx(hKey,"

UserCommitSync",0L,REG_SZ,(CONSTBYTE*)((LPCTSTR)strUserCommit),strUserCommit.GetLength

());::RegCloseKey(hKey);//设置ODBC数据库引擎名称lReturn=::RegOpenKeyEx

(HKEY_LOCAL_MACHINE,"SOFTWARE\\ODBC\\ODBC.INI\\ODBC

DataSources",0L,KEY_WRITE,&hKey);if(lReturn!=ERROR_SUCCESS)

returnfalse;CStringstrDbType="MicrosoftAccessDriver

(*.mdb)";::RegSetValueEx(hKey,strSourceName,0L,REG_SZ,(CONST

BYTE*)((LCTSTR)strDbType),strDbType.GetLength());return

true;}由于在动态加载中,一般只会改变数据库文件、数据源说明以及数据源描述,故上述函数可以实现应用中的大部分要求。

如果应用中还需要作更多的改变,那么也可以通过改变函数参数的方式加以实现。对于需要动态加载多种类型数据源的情况,可以用具有不同参数的重载函数去实现。

方法二:利用DLL设计思路Windows系统子目录中的动态链接库Odbcinst.dll提供了一个可以动态地增加、修改和删除数据源的函数

SQLConfigDataSource()。该函数的原型如下:BOOLSQLConfigDataSource(HWND

hwndParent,WORDfRequest,LPCSTRlpszDriver,LPCSTRlpszAttributes);

hwndParent参数是父窗口句柄。如果该值为NULL,将不会显示与父窗口有关的对话框。fRequest参数可以设置为下面的数值之一:

ODBC_ADD_DSN:增加一个新的用户数据源;ODBC_CONFIG_DSN:修改(配置)一个已经存在的用户数据源;

ODBC_REMOVE_DSN:删除一个已经存在的用户数据源;ODBC_ADD_SYS_DSN:增加一个新的系统数据源;

ODBC_CONFIG_SYS_DSN:修改(配置)一个已经存在的系统数据源;ODBC_REMOVE_SYS_DSN:删除一个已经存在的系统数据源。

lpszDriver参数用于传递数据库引擎的名字,等同于方法一中strDbType变量。lpszAttirbutes参数是关键字的值,即一连串的

"keyname=value"字符串,每两个字符串之间用"\"隔开,如DSN=PersonnelData\0UID=Smith\0DATABASE=Personnel。

关于该参数的详细设置请参阅MSDN中SQLConfigDataSource()函数的帮助文档和各种ODBC驱动程序文档。

具体实现由于VC的缺省库文件中不包含SQLConfigDataSource()函数,因此使用该函数之前需要将

odbcinst.h文件包含在工程的头文件中,在工程的Settings属性对话框Link属性页的Object/library

modules编辑框中增加odbc32.lib,同时保证系统目录system32下有文件odbccp32.dll。

仍以MicrosoftAccess为例,设置数据源名为demo,数据源描述为"示例数据源",那么在需要动态加载数据源的地方加入下列代码即可:

::SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft

AccessDriver(*.mdb)","DSN=demo\0Descirption=示例数据库"

);小结上述两种方法都可以实现动态加载各种类型的ODBC数据源,并且在Windows95/98/NT/2000环境下调试通过。

方法一在实现时需要较多的代码,方法二所需代码虽少,但需要额外文件的支持,而且随着数据源配置的灵活性的增加,为了形成

lpszAttributes字符串,其代码长度也会相应增加。由于从控制面板配置数据源使得程序员可以获得更加直观的理解,所以对于注册表中各项值以及相应项名称的获得除了可以查阅相关驱动程序的文档外,程序员也可以在编程前先通过控制面板配置

ODBC数据源,然后根据注册表中相应部分的内容进行编程。======================================Create

AccessdatasourcenamedynamicallyThisarticlewascontributed

byMadhavaV.ThissampleinthisarticlewascreatedusingVC

5.0.Thenecessary.hand.libfilesarepresentinthezip.To

createaDSNatruntimeyoucouldusetheSQLConfigDataSource

API.Internallythisinformationisstoredintheregistry.

ThesyntaxisattachedbelowSQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft

AccessDriver(*.mdb)\0","DSN=TestDB\0DBQ=D:\\Database\\Friends.mdb\0DEFAULTDIR=D:\\DATABASE\0\0");The

problemisthatifyouwanttoacceptthevaluesfromtheuser

orsetthesevaluesatruntimebypassingCStringorchar*will

notwork.Thisisbecause,whensprintfencountersa/0itassumes

itistheendofthestringandignorestherestofthedata.As

aworkaroundyouhavetousethebelowmentionedcode.Thefollowing

codeplaces:wherea/0isexpectedandthereisaloopwhichreplaces

a":"with"/0".Youwillnotbeinapositiontousesprintfbecause,

whenitencountersa/0itassumesitistheendofthestringand

ignorestherestofthedata.char*szDesc;intmlen;szDesc=new

char[256];sprintf(szDesc,"DSN=%s:DESCRIPTION=TOCsupport

source:DBQ=%s:FIL=MicrosoftAccess:DEFAULTDIR=D:\\Database::

","TestDB","D:\\Friends.mdb");mlen=strlen(szDesc);for

(inti=0;i

(FALSE==SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft

AccessDriver(*.mdb)\0",(LPCSTR)szDesc))MessageBox(hwnd,"Failed","INFORMATION",MB_OK);elseMessageBox(hwnd,"Sucess","INFORMATION",MB_OK);需要的时候就用(存数据),我写程序就从来没用过因为要存储数据是为了保存组织数据,也为了系统的扩容。

TAG:

本文地址 : https://www.cdwenhua.cn/shenghuobaike/51647.html 本文资源来源于互联网,所有观点与站长无关,若有侵权,请第一时间联系我们进行删除,谢谢配合!

相关文章

声明:本站资源皆来源于互联网,若有侵权,请第一时间联系我们进行删除,谢谢合作!

Copyright @ 2020 百科知识 版权所有 https://www.cdwenhua.cn

传道百科知识