导航:首页 > 数据分析 > 数据库为什么要加代码

数据库为什么要加代码

发布时间:2023-04-02 07:36:30

『壹』 为什么SQL不是直接在表里输入数据,而要写代码插入这样做有什么好处

打搏灶个很简单的例子,如果直接在表里输入数据的话,就没必要使用数据库了,直接用Excel就能解决。而数据库有点类似但他功能要强大很多,支持T-SQL语句对表进行操作,然后配合程序可誉银宏以批量插入,删除,查询数据,或者对复杂的数据进行处庆册理等等。并且效率远高于EXCEL。

『贰』 数据库编程 为什么要设置数据源

在VC中动态加载ODBC的方法

在使用 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主键。因此,我们可以在应用程序中使用 Windows API中的注册表编辑函数来完成 Windows所做的工作,这样就可以达到动态加载数据源的目的。
具体实现
对于不同类型的数据源,注册表的修改也各有不同,但基本上都要修改两个地方。一个是在 ODBC.INI子键下建立一个与数据源描述名同名的子键,并在该子键下建立与数据源配置相关的项;另一个是在 \ODBC.INI\ODBC Data Sources子键下建立一个新项以便告诉驱动程序管理器 ODBC数据源的类型。下面以配置一个 Microsoft Access数据源为例给出实现此功能的函数的代码。
/* strSourceName是要创建的数据源名, strSourceDb是数据库存放路径, strDescription是数据源的描述字符串。* /
BOOL CLoadOdbcDlg:: LoadDbSource(CString strSourceName,CString strSourceDb, CString strDescription)
{
//存放打开的注册表键
HKEY hKey;
DWORD dw;
//存放注册表 API函数执行的返回值
LONG lReturn;
//存放要打开的子键
CString strSubKey;
//检测是否安装了 MS Access ODBC driver:odbcjt32.dll
//获得 Windows系统目录
char sysDir[MAX_PATH];
char drvName[]=" \\odbcjt32.dll" ;
::GetSystemDirectory (sysDir,MAX_PATH);
strcat(sysDir,drvName);
CFileFind findFile;
if(!findFile.FindFile (sysDir))
{
AfxMessageBox("您的计算机系统中没有安装 MS Access的 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)
return false;
//设置数据源的各项参数
CString strDbq=strSourceDb;
CString strDriver=sysDir;
DWORD dwDriverId=25;
CString strFil=" MS Access" ;
CString strPwd=strSourceName;
DWORD dwSafeTransactions=0;
CString strUid=strSourceName;
::RegSetValueEx (hKey," DBQ" ,0L,REG_SZ,
(CONST BYTE* )((LPCTSTR) strDbq),strDbq .GetLength ()) ; ::RegSetValueEx (hKey," Description" ,0L,REG_SZ,(CONST BYTE* )((LPCTSTR)strDescription),strDescription.GetLength());
::RegSetValueEx (hKey," Driver" ,0L,REG_SZ,(CONST BYTE* )((LPCTSTR)strDriver),strDriver .GetLength ());
::RegSetValueEx (hKey," DriverId" ,0L,REG_DWORD,(CONST BYTE* )(& dwDriverId),sizeof(dw));
::RegSetValueEx (hKey," FIL" ,0L,REG_SZ,
(CONST BYTE* )((LPCTSTR) strFil),strFil .GetLength ());
::RegSetValueEx (hKey," PWD" ,0L,REG_SZ,
(CONST BYTE* )((LPCTSTR)strPwd),strPwd.GetLength ()) ; ::RegSetValueEx (hKey," SafeTransactions" ,0L,
REG_DWORD,(CONST BYTE* )(& dwSafeTransactions),sizeof(dw));
::RegSetValueEx (hKey," UID" ,0L,REG_SZ,
(CONST BYTE* )((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)
return false;
//设置该子键下的各项参数
CString strImplict=" " ;
CString strUserCommit=" Yes" ;
DWORD dwPageTimeout=5;
DWORD dwThreads=3;
DWORD dwMaxBufferSize=2048;
::RegSetValueEx (hKey," ImplictCommitSync" ,0L,REG_SZ,(CONST BYTE* )((LPCTSTR)strImplict),strImplict.GetLength ()+ 1);
::RegSetValueEx (hKey," MaxBufferSize" ,0L,REG_DWORD,(CONST BYTE* )(& dwMaxBufferSize),sizeof(dw));
::RegSetValueEx (hKey," PageTimeout" ,0L,REG_DWORD,(CONST BYTE* )(& dwPageTimeout),sizeof(dw));
::RegSetValueEx (hKey," Threads" ,0L,REG_DWORD,(CONST BYTE* )(& dwThreads),sizeof(dw));
::RegSetValueEx (hKey," UserCommitSync" ,0L,REG_SZ,(CONST BYTE* )((LPCTSTR)strUserCommit),strUserCommit.GetLength ());
::RegCloseKey (hKey);
//设置 ODBC数据库引擎名称
lReturn=::RegOpenKeyEx (HKEY_LOCAL_MACHINE, " SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources" ,0L,KEY_WRITE,& hKey);
if(lReturn !=ERROR_SUCCESS)
return false;
CString strDbType=" Microsoft Access Driver (* .mdb)" ; ::RegSetValueEx (hKey,strSourceName,0L,REG_SZ,(CONST BYTE* )((LCTSTR)strDbType),strDbType.GetLength ());
return true;
}
由于在动态加载中,一般只会改变数据库文件、数据源说明以及数据源描述,故上述函数可以实现应用中的大部分要求。如果应用中还需要作更多的改变,那么也可以通过改变函数参数的方式加以实现。对于需要动态加载多种类型数据源的情况,可以用具有不同参数的重载函数去实现。
方法二:利用 DLL
设计思路
Windows系统子目录中的动态链接库 Odbcinst.dll提供了一个可以动态地增加、修改和删除数据源的函数 SQLConfigDataSource()。该函数的原型如下:
BOOL SQLConfigDataSource(HWND hwndParent,WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
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=Personnel Data\0UID=Smith\0DATABASE=Personnel。关于该参数的详细设置请参阅 MSDN中 SQLConfigDataSource()函数的帮助文档和各种 ODBC驱动程序文档。
具体实现
由于 VC的缺省库文件中不包含 SQLConfigDataSource()函数,因此使用该函数之前需要将 odbcinst.h文件包含在工程的头文件中,在工程的 Settings属性对话框 Link属性页的 Object/library moles编辑框中增加 odbc32.lib,同时保证系统目录 system32下有文件 odbccp32.dll。
仍以 Microsoft Access为例,设置数据源名为 demo,数据源描述为 "示例数据源 ",那么在需要动态加载数据源的地方加入下列代码即可:
::SQLConfigDataSource (NULL,ODBC_ADD_SYS_DSN," Microsoft Access Driver (* .mdb)"," DSN=demo\0Descirption=示例数据库 " );
小结
上述两种方法都可以实现动态加载各种类型的 ODBC数据源,并且在 Windows95/98/NT/2000环境下调试通过。方法一在实现时需要较多的代码,方法二所需代码虽少,但需要额外文件的支持,而且随着数据源配置的灵活性的增加,为了形成 lpszAttributes字符串,其代码长度也会相应增加。由于从控制面板配置数据源使得程序员可以获得更加直观的理解,所以对于注册表中各项值以及相应项名称的获得除了可以查阅相关驱动程序的文档外,程序员也可以在编程前先通过控制面板配置 ODBC数据源,然后根据注册表中相应部分的内容进行编程。

======================================

Create Access data source name dynamically

This article was contributed by Madhava V.
This sample in this article was created using VC 5.0. The necessary .h and .lib files are present in the zip.
To create a DSN at run time you could use the SQLConfigDataSource API. Internally this information is stored in the registry. The syntax is attached below
SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0","DSN=TestDB\0DBQ=D:\\Database\\Friends.mdb\0DEFAULTDIR=D:\\DATABASE\0\0");
The problem is that if you want to accept the values from the user or set these values at run time by passing CString or char* will not work. This is because, when sprintf encounters a /0 it assumes it is the end of the string and ignores the rest of the data.
As a workaround you have to use the below mentioned code.
The following code places : where a /0 is expected and there is a loop which replaces a ":" with "/0". You will not be in a position to use sprintf because, when it encounters a /0 it assumes it is the end of the string and ignores the rest of the data.

char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s: DESCRIPTION=TOC support source: DBQ=%s: FIL=MicrosoftAccess: DEFAULTDIR=D:\\Database:: ","TestDB","D:\\Friends.mdb");
mlen = strlen(szDesc);
for (int i=0; i <mlen; i++)
{
if (szDesc[i] == ':')
szDesc[i] = '\0';
}

if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))
MessageBox(hwnd,"Failed","INFORMATION",MB_OK);
else
MessageBox(hwnd,"Sucess","INFORMATION",MB_OK);

『叁』 连接数据库的代码有什么用

用处就连滑尘接数据库嘛

这就像你运谈玩网游一样,先要信悄禅和服务器进行连接,然后再创建人物,再进行各项操作.

最后再退出游戏

『肆』 Java 保存图片到数据库时,为什么要对图片进行base64编码

首先这是一种SB做法,图片保存到数据库这个很浪费数据库资源, 通常情况下图片等文件都是用ftp服务器来存储文件的. 为什么要用base64进行编码是因为, base64会把文件这个文件转换成字符串, base64编码后得到的是一组字符串, 为什么要用blob类型, 因为这个类型可以存储4GB数据, 数据库中普通的 varchar varchar2 text等类型都有长度的限制

『伍』 接口测试中,为什么要学习代码操作数据库

1,之前在手工测试阶段,校验数据都是通过人力来完成2,如果要检验的数据达到了一定规模,比如一千条测试用例,那么靠人力会比较消耗资源,这时候我们可以使用代码完成数据校验,用代码连接数据库,用代码断言数据库返回数据,进行自动化接口测试数据库内容也是软件测试需要学习的,我实在黑马程序员学习的软件测试,现在工资12K,你可以去了解一下。不知道是否能够帮助到您,有帮助的话,请采纳,谢谢

『陆』 ORACLE数据库设置date类型默认值后为什么还要手动添加是不是我写错了

表字段设置date类型铅团拿默认或历值,不需要手工添加,提示没有足够的值,是SQL本身的语法问题,insert语法要求如果不加槐搭列名,值的个数必须与表字段个数一致。
你的这种情况下,必须指定字段名。

『柒』 sql中可以直接建立表 为什么还要写代码建表

1、sql写好了可以批量建表,比如把建表文(就是你说的create table)先编辑好,假设有100个表,每个表有100个字段一旦我想枝厅渗猛脊建两个伏大一摸一样的数据库时候,用界面恐怕一时半会完不了,用sql的话直接执行很快OK。
2、图形建表实际上实现的也是create table之类的代码,只不过你看不到罢了。

---
以上,希望对你有所帮助。

『捌』 为什么SQL不是直接在表里输入数据,而要写代码插入

这是ACCESS和高级数据库的本质区别..通过语物庆困句可以控制锁,共享,简单的说就是可以同时多人操作罩念..如果直接插入那基本上等于同一时间差好只有一个人可以访问。这种数据库表实用性几乎等于0.

『玖』 设计SQL数据库要写代码吗

1.设计阶段一般不用写代码,有的时候用一些数据库设计软件可能会自动生成建表的代码

2.除了表间带激冲关系和应用与前台功能的需求,你还需要考虑表的设计是否满足项目本身的需要.

3.考虑表的内部结构设计,比如字段类型,索引的建立(多数蠢歼情况下其实是不需要建索引的)等等

4.考虑到项目未来可能出现的问题而设计数据库,比如:某一个表在将来可能会累积到上百万行的数据,这里就会在空间和运行时间上存在隐患,所以,要根据这点来提前确定上面第3点中提到的,字段类型和索引等问题,也可以考虑是否定期把表中的比较旧铅租的数据存放到一个其他的数据库中等等这样的事

『拾』 数据库和代码是怎么联系起来的

靠专门的驱动包呀。每一个数据库产品公司都会为它的数据库系统提供适用于各种不同的编程语言的驱动包,在程序代码中调用对应的驱动包,就能够使用包内的类和编程接口,从而操作数据库内的数据。
驱动包一般包含在数据库安装文件中,也可以去专门的网站下载。

阅读全文

与数据库为什么要加代码相关的资料

热点内容
怎么在家上网编程 浏览:909
订阅已关为什么还显示app 浏览:169
大华详细教程 浏览:901
学信网是一种什么网站 浏览:378
wow插件文件夹 浏览:302
c源程序文件的缺省扩展名为 浏览:952
java类类型 浏览:971
拼多多关键词数据怎么下载 浏览:867
哪个app可以买火影忍者号 浏览:524
2012r2添加数据库引擎 浏览:549
贷款app如何注销 浏览:966
懒人版本lol 浏览:195
ipad怎么新建文件夹 浏览:697
wps文字密码暴力破解软件 浏览:68
51单片机ds1302程序 浏览:973
学编程方面需要哪些优势 浏览:675
电脑太大的文件怎么上传微信 浏览:514
索尼lt26ixperias刷机教程 浏览:246
win10uefi文件下载 浏览:713
显示文件大小的软件 浏览:194

友情链接