導航:首頁 > 數據分析 > 資料庫為什麼要加代碼

資料庫為什麼要加代碼

發布時間: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點中提到的,欄位類型和索引等問題,也可以考慮是否定期把表中的比較舊鉛租的數據存放到一個其他的資料庫中等等這樣的事

『拾』 資料庫和代碼是怎麼聯系起來的

靠專門的驅動包呀。每一個資料庫產品公司都會為它的資料庫系統提供適用於各種不同的編程語言的驅動包,在程序代碼中調用對應的驅動包,就能夠使用包內的類和編程介面,從而操作資料庫內的數據。
驅動包一般包含在資料庫安裝文件中,也可以去專門的網站下載。

閱讀全文

與資料庫為什麼要加代碼相關的資料

熱點內容
最早的soul聊天app是怎麼樣的 瀏覽:489
網路雲盤大小 瀏覽:420
去美國准備什麼app 瀏覽:461
米8如何復制u盤文件 瀏覽:523
導航的o文件是什麼 瀏覽:435
Re舊版本下載 瀏覽:416
電子血壓表怎麼讀數據 瀏覽:610
軟體開發和編程哪個前景好 瀏覽:30
手機保存圖片在相冊里找不到文件 瀏覽:42
xp桌面圖案保存哪個文件夾 瀏覽:136
dnf70版本紅眼 瀏覽:484
越來越不懂兩個版本 瀏覽:258
javabigdecimal位數 瀏覽:316
學好編程需要學哪些東西 瀏覽:186
概預算教程 瀏覽:893
90版本國服第一驅魔 瀏覽:436
手機qq音樂啟動程序 瀏覽:840
口袋妖怪破解版12版本 瀏覽:632
數據研究的崗位有哪些 瀏覽:124
今日頭條網站怎麼改名 瀏覽:663

友情鏈接