導航:首頁 > 數據處理 > 為什麼要把數據源做成可配置

為什麼要把數據源做成可配置

發布時間:2023-03-20 09:43:50

1. JAVA連接資料庫為什麼要配置數據源,有

用jdbc,直接連接資料庫,不需要額外配置數據源了,那是odbc方式,現在不用了

2. 資料庫編程 為什麼要設置數據源

在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);

3. 什麼是數據源配置

數據表設計就是將資料庫的設計表單化
資料庫連接和數據源配置就是通過系統的設置和配置將資料庫的連接信息寫入程序中,在程序需要從資料庫中提取或存放數據時能夠找到資料庫的位置,其中資料庫的連接就是建立前台和資料庫的連接,而數據源的配置就是告訴程序資料庫在什麼地方,是以什麼形式存放的

4. ssh中spring為什麼還要配置數據源,hibernate不是已經配置資料庫連接。

hibernate和spring都可以配置數據源,根據需求配置一個即可。但SSH一般都是將Struts和Hibernate的各種bean交由Spring管理,Spring起到的作用就是粘合Struts和Hibernate,所以也由Spring配置數據源,這樣有利於統一管理和日後拓展,其中涉及到事務、動態代理、多數據源等等。

5. 為什麼要在tomcat中配置數據源

因為這是java和jsp軟體運行的一個必要程序啊,如果不配置,那麼就無法發布網站,也就無法運行結果!

6. 為什麼要設置數據源 怎樣設置Access數據源

設置數據源,就相當於打電話撥號一樣,只有撥通了才能通話,這也一樣,建立數據源實現了網站中IIS對資料庫的訪問連接。具體方法如下:
1、在控制面板中,雙擊管理工具,然後打開ODBC數據源管理器。
2、在「系統DSN」選項卡中,單擊「添加」按鈕,打開「創建新數據源」對話框,在「名稱」列表框中選擇「Driver
do
Microsoft
Access(*.mdb)」點擊『完成』。
3、在出現的
odbc
microsoft
access
安裝中,填寫『數據源名』(隨便起個名),單擊『選擇』按鈕選擇你的資料庫文件(進行連接),沒有的話點擊旁邊的『創建』。操作完成後單擊『確定』。
4、odbc操作基本完成了,剩下的操作就是設置你要進行操作的軟體了。

7. weblogic為什麼要配置數據源

資料庫連接信息寫在程序裡面。如果數據連接信息變化了,必須修改程序。用數據源的話,就不需要修改程序了啊。

8. java程序員在面試中被問到如何配置多數據源以及如何配置多數據源下的分布式事務,該怎麼回答看清再做答

你好,我來先回答你的第一個問題:
通常多數據源,在spring中配置如下,如果你想切換環境ENV 的值,在property中
<bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"></property>
<property name="" value="true"></property>
<property name="nullValue" value="NULL"></property>
<property name="locations">
<list>
<value>jdbc.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="com.spring..JDBCConfig">
<property name="driverClassName" value="${${Env}.jdbc.driverClassName}"></property>
<property name="url" value="${${Env}.jdbc.url}"></property>
<property name="username" value="${${Env}.jdbc.username1}"></property>
<property name="password" value="${${Env}.jdbc.password}"></property>
</bean>

jdbc.properties
*****************************
Env=PROD

jdbc.driverClassName=${${Env}.jdbc.driverClassName}
jdbc.url=${${Env}.jdbc.url}
jdbc.username=${${Env}.jdbc.username}
jdbc.password=${${Env}.jdbc.password}

######### JDBC Configuration for DEV Environment ###############
DEV.jdbc.driverClassName=com.mysql.jdbc.Driver
DEV.jdbc.url=jdbc:mysql://localhost:3306/devportal
DEV.jdbc.username=DEVuser
DEV.jdbc.password=DEVpwd

######### JDBC Configuration for UAT Environment ############
UAT.jdbc.driverClassName=com.mysql.jdbc.Driver
UAT.jdbc.url=jdbc:mysql://localhost:3306/UATportal
UAT.jdbc.username=UATuser
UAT.jdbc.password=UATpwd

########## JDBC Configuration for PROD Environment ############
PROD.jdbc.driverClassName=com.mysql.jdbc.Driver
PROD.jdbc.url=jdbc:mysql://localhost:3306/portal
PROD.jdbc.username=root
PROD.jdbc.password=admin,
我這里有三套環境,分別是DEV,UAT和PROD,這種方式可以靈活切換的。

我再回答你的第二個問題:
還請你去http://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/transaction.html這里看下,很詳細,不過是英文的哦

9. java資料庫一定要配置數據源嗎

數據源是要配置到中間件伺服器中的(比如:Tomcat,JBoss,WebLogic一類的),配置後可以提高資料庫查詢性能,避免重復的打開和關閉資料庫。因此開發java的B/S項目時(就是J2EE的項目,通過瀏覽器訪問的項目),都會配置數據源連接。如果你寫的管理軟體是B/S結構,那麼只需要在搭建環境的伺服器上配置數據源就可以了,用戶訪問時是通過瀏覽器訪問,不需要做其他設置。如果是C/S(就是用戶需要單獨安裝客戶端程序,比如QQ),也不需要在用戶那裡設置數據源,只需要在你的伺服器端程序上手工配置好數據源即可。

10. 為什麼要在weblogic伺服器中配置數據源

1)可以方便管理,對於設定的參數可以實時生效。
2)易於監控,在伺服器的監控項中可以對使用的資源信息進行監控
~如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕
~~手機提問的朋友在客戶端右上角評價點【滿意】即可。
~你的採納是我前進的動力
~~O(∩_∩)O,記得好評和採納,互相幫助,謝謝。

閱讀全文

與為什麼要把數據源做成可配置相關的資料

熱點內容
如何製作煤氣需要熱化學程序 瀏覽:170
深圳的哪個大學有電子信息工程 瀏覽:770
高粱酒代理商什麼牌子好 瀏覽:669
300元鬼市場在哪裡 瀏覽:649
代理什麼醬酒有發展 瀏覽:270
信息技術興起於20世紀哪個年代 瀏覽:282
欠款要是走法律程序需要什麼證據 瀏覽:397
成都購買電動輪椅大市場在哪裡 瀏覽:265
房子過戶贈予和交易哪個好 瀏覽:608
環評審批信息屬於什麼單位 瀏覽:776
嵊州領帶批發市場有哪些 瀏覽:279
武漢葵花葯店代理怎麼樣 瀏覽:135
人事代理是指哪些 瀏覽:445
紅軍為什麼不投入轉會市場 瀏覽:138
資料庫一頁多少k 瀏覽:568
華為換蘋果x手機怎麼轉移數據 瀏覽:353
張氏絕密技術有哪些 瀏覽:932
如何在電腦上安裝顯卡驅動程序 瀏覽:175
如何編apk程序 瀏覽:863
上匯眼鏡市場怎麼樣 瀏覽:712