當前位置:首頁 » 參考文獻 » dao資料庫

dao資料庫

發布時間: 2021-03-13 03:39:50

㈠ java中,用DAO查詢一個資料庫步驟,分哪幾個步驟,原理解析

創建一個以JDBC連接資料庫的程序,包含7個步驟:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,
該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和
密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3
種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句
,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或
DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的
語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些
行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,並且從列1開始)
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲
明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}

㈡ vc資料庫使用

現在都不怎麼用了,ado比較方便,下面是我以前在網上找的例子:

一、ADO簡介
ADO(ActiveX Data Object)是Microsoft資料庫應用程序開發的新介面,是建立在OLE DB之上的高層資料庫訪問技術,請不必為此擔心,即使你對OLE DB,COM不了解也能輕松對付ADO,因為它非常簡單易用,甚至比你以往所接觸的ODBC API、DAO、RDO都要容易使用,並不失靈活性。本文將詳細地介紹在VC下如何使用ADO來進行資料庫應用程序開發,並給出示例代碼。
本文示例代碼

二、基本流程
萬事開頭難,任何一種新技術對於初學者來說最重要的還是「入門」,掌握其要點。讓我們來看看ADO資料庫開發的基本流程吧!
(1)初始化COM庫,引入ADO庫定義文件
(2)用Connection對象連接資料庫
(3)利用建立好的連接,通過Connection、Command對象執行SQL命令,或利用Recordset對象取得結果記錄集進行查詢、處理。
(4)使用完畢後關閉連接釋放對象。

准備工作:
為了大家都能測試本文提供的例子,我們採用Access資料庫,您也可以直接在我們提供的示例代碼中找到這個test.mdb。
下面我們將詳細介紹上述步驟並給出相關代碼。
【1】COM庫的初始化
我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的重載函數中完成,請看如下代碼:

BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......

【2】用#import指令引入ADO類型庫
我們在stdafx.h中加入如下語句:(stdafx.h這個文件哪裡可以找到?你可以在FileView中的Header Files里找到)
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
這一語句有何作用呢?其最終作用同我們熟悉的#include類似,編譯的時候系統會為我們生成msado15.tlh,ado15.tli兩個C++頭文件來定義ADO庫。

幾點說明:
(1) 您的環境中msado15.dll不一定在這個目錄下,請按實際情況修改
(2) 在編譯的時候肯能會出現如下警告,對此微軟在MSDN中作了說明,並建議我們不要理會這個警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned

【3】創建Connection對象並連接資料庫
首先我們需要添加一個指向Connection對象的指針:
_ConnectionPtr m_pConnection;
下面的代碼演示了如何創建Connection對象實例及如何連接資料庫並進行異常捕捉。

BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///連接資料庫
///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,需要改為:Provider=Microsoft.Jet.OLEDB.3.51; }
}
catch(_com_error e)///捕捉異常
{
CString errormessage;
errormessage.Format("連接資料庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///顯示錯誤信息
}

在這段代碼中我們是通過Connection對象的Open方法來進行連接資料庫的,下面是該方法的原型
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
ConnectionString為連接字串,UserID是用戶名, Password是登陸密碼,Options是連接選項,用於指定Connection對象對數據的更新許可權,
Options可以是如下幾個常量:
adModeUnknown:預設。當前的許可權未設置
adModeRead:只讀
adModeWrite:只寫
adModeReadWrite:可以讀寫
adModeShareDenyRead:阻止其它Connection對象以讀許可權打開連接
adModeShareDenyWrite:阻止其它Connection對象以寫許可權打開連接
adModeShareExclusive:阻止其它Connection對象打開連接
adModeShareDenyNone:允許其它程序或對象以任何許可權建立連接

我們給出一些常用的連接方式供大家參考:
(1)通過JET資料庫引擎對ACCESS2000資料庫的連接

m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown);

(2)通過DSN數據源對任何支持ODBC的資料庫進行連接:
m_pConnection->Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);

(3)不通過DSN對SQL SERVER資料庫進行連接: m_pConnection->Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);

其中Server是SQL伺服器的名稱,DATABASE是庫的名稱

Connection對象除Open方法外還有許多方法,我們先介紹Connection對象中兩個有用的屬性ConnectionTimeOut與State
ConnectionTimeOut用來設置連接的超時時間,需要在Open之前調用,例如: m_pConnection->ConnectionTimeout = 5;///設置超時時間為5秒
m_pConnection->Open("Data Source=adotest;","","",adModeUnknown);

State屬性指明當前Connection對象的狀態,0表示關閉,1表示已經打開,我們可以通過讀取這個屬性來作相應的處理,例如:
if(m_pConnection->State)
m_pConnection->Close(); ///如果已經打開了連接則關閉它

【4】執行SQL命令並取得結果記錄集
為了取得結果記錄集,我們定義一個指向Recordset對象的指針:_RecordsetPtr m_pRecordset;
並為其創建Recordset對象的實例: m_pRecordset.CreateInstance("ADODB.Recordset");
SQL命令的執行可以採用多種形式,下面我們一進行闡述。

(1)利用Connection對象的Execute方法執行SQL命令
Execute方法的原型如下所示:
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中CommandText是命令字串,通常是SQL命令。參數RecordsAffected是操作完成後所影響的行數, 參數Options表示CommandText中內容的類型,Options可以取如下值之一:
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一個表名
adCmdProc:表明CommandText是一個存儲過程
adCmdUnknown:未知

Execute執行完後返回一個指向記錄集的指針,下面我們給出具體代碼並作說明。 _variant_t RecordsAffected;
///執行SQL命令:CREATE TABLE創建表格users,users包含四個欄位:整形ID,字元串username,整形old,日期型birthday
m_pConnection->Execute("CREATE TABLE users(ID INTEGER,username TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected,adCmdText);
///往表格裡面添加記錄
m_pConnection->Execute("INSERT INTO users(ID,username,old,birthday) valueS (1, null,25,/1/)",&RecordsAffected,adCmdText);
///將所有記錄old欄位的值加一
m_pConnection->Execute("UPDATE users SET old = old+1",&RecordsAffected,adCmdText);
///執行SQL統計命令得到包含記錄條數的記錄集
m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM users",&RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset->GetCollect(vIndex);///取得第一個欄位的值放入vCount變數
m_pRecordset->Close();///關閉記錄集
CString message;
message.Format("共有%d條記錄",vCount.lVal);
AfxMessageBox(message);///顯示當前記錄條數

(2)利用Command對象來執行SQL命令
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;///定義為無參數
m_pCommand->ActiveConnection = m_pConnection;///非常關鍵的一句,將建立的連接賦值給它
m_pCommand->CommandText = "SELECT * FROM users";///命令字串
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///執行命令,取得記錄集

在這段代碼中我們只是用Command對象來執行了SELECT查詢語句,Command對象在進行存儲過程的調用中能真正體現它的作用。下次我們將詳細介紹。

(3)直接用Recordset對象進行查詢取得記錄集
例如

m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

Open方法的原型是這樣的:
HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
其中:
①Source是數據查詢字元串
②ActiveConnection是已經建立好的連接(我們需要用Connection對象指針來構造一個_variant_t對象)
③CursorType游標類型,它可以是以下值之一,請看這個枚舉結構:
enum CursorTypeEnum
{
adOpenUnspecified = -1,///不作特別指定
adOpenForwardOnly = 0,///前滾靜態游標。這種游標只能向前瀏覽記錄集,比如用MoveNext向前滾動,這種方式可以提高瀏覽速度。但諸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用
adOpenKeyset = 1,///採用這種游標的記錄集看不到其它用戶的新增、刪除操作,但對於更新原有記錄的操作對你是可見的。
adOpenDynamic = 2,///動態游標。所有資料庫的操作都會立即在各用戶記錄集上反應出來。
adOpenStatic = 3///靜態游標。它為你的記錄集產生一個靜態備份,但其它用戶的新增、刪除、更新操作對你的記錄集來說是不可見的。
};
④LockType鎖定類型,它可以是以下值之一,請看如下枚舉結構:
enum LockTypeEnum
{
adLockUnspecified = -1,///未指定
adLockReadOnly = 1,///只讀記錄集
adLockPessimistic = 2,悲觀鎖定方式。數據在更新時鎖定其它所有動作,這是最安全的鎖定機制
adLockOptimistic = 3,樂觀鎖定方式。只有在你調用Update方法時才鎖定記錄。在此之前仍然可以做數據的更新、插入、刪除等動作
adLockBatchOptimistic = 4,樂觀分批更新。編輯時記錄不會鎖定,更改、插入及刪除是在批處理模式下完成。
};
⑤Options請參考本文中對Connection對象的Execute方法的介紹

【5】記錄集的遍歷、更新
根據我們剛才通過執行SQL命令建立好的users表,它包含四個欄位:ID,username,old,birthday
以下的代碼實現:打開記錄集,遍歷所有記錄,刪除第一條記錄,添加三條記錄,移動游標到第二條記錄,更改其年齡,保存到資料庫。

_variant_t vUsername,vBirthday,vID,vOld;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)///這里為什麼是adoEOF而不是EOF呢?還記得rename("EOF","adoEOF")這一句嗎?
{
vID = m_pRecordset->GetCollect(_variant_t((long)0));///取得第1列的值,從0開始計數,你也可以直接給出列的名稱,如下一行
vUsername = m_pRecordset->GetCollect("username");///取得username欄位的值
vOld = m_pRecordset->GetCollect("old");
vBirthday = m_pRecordset->GetCollect("birthday");
///在DEBUG方式下的OUTPUT窗口輸出記錄集中的記錄
if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.vt != VT_NULL && vBirthday.vt != VT_NULL)
TRACE("id:%d,姓名:%s,年齡:%d,生日:%s\r\n",vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);
m_pRecordset->MoveNext();///移到下一條記錄
}
m_pRecordset->MoveFirst();///移到首條記錄
m_pRecordset->Delete(adAffectCurrent);///刪除當前記錄
///添加三條新記錄並賦值
for(int i=0;i<3;i++)
{
m_pRecordset->AddNew();///添加新記錄
m_pRecordset->PutCollect("ID",_variant_t((long)(i+10)));
m_pRecordset->PutCollect("username",_variant_t("葉利欽"));
m_pRecordset->PutCollect("old",_variant_t((long)71));
m_pRecordset->PutCollect("birthday",_variant_t("1930-3-15"));
}
m_pRecordset->Move(1,_variant_t((long)adBookmarkFirst));///從第一條記錄往下移動一條記錄,即移動到第二條記錄處
m_pRecordset->PutCollect(_variant_t("old"),_variant_t((long)45));///修改其年齡
m_pRecordset->Update();///保存到庫中

【6】關閉記錄集與連接
記錄集或連接都可以用Close方法來關閉
m_pRecordset->Close();///關閉記錄集
m_pConnection->Close();///關閉連接

至此,我想您已經熟悉了ADO操作資料庫的大致流程,也許您已經胸有成竹,也許您還有點胡塗,不要緊!建議你嘗試寫幾個例子,這樣會更好地熟悉ADO,最後我給大家寫了一個小例子,例子中讀出所有記錄放到列表控制項中、並可以添加、刪除、修改記錄。
點這里下載示例代碼

後記:限於篇幅ADO中的許多內容還沒有介紹,下次我們將詳細介紹Recordset對象的屬性、方法並解決幾個關鍵的技術:綁定方式處理記錄集數據、存儲過程的調用、事務處理、圖象在資料庫中的保存與讀取、與表格控制項的配合使用等

----------------------------------------------------------
注意這里還有一句話:上面的例子中更新資料庫,即向資料庫中插入新記錄的代碼有點奇怪,我用的時候不是那樣做的,下面是從我的一個程序中截出來的一段,供參考:
CString sql="INSERT INTO word(word,mean,wordlevel) VALUES('"+m_word+"','"+m_mean+"','"+m_level_index+"')";
_bstr_t _sql1(sql);
m_pConnection->Execute(_sql1,&RecordsAffected,adCmdText);

㈢ 如何用Dao方式連接 SQL Server資料庫

你用的什麼語言啊?
這個是VC++的

*****你說的是MFC的資料庫訪問類——class CDaoDatabase,這個類確實有Create()和Open()兩個成員函數,不過前者的功能是新建一個資料庫文件,而且只能是ACCESS文件(*.mdb),只有Open()能夠連接一個現有的SQL資料庫文件。
*****
*****連接代碼樣例:

CDaoDatabase dbSQL(); //括弧必須有,因為它有一個引用參數,引用目標是class CDaoWorkspace的一個對象,這個參數默認是NULL

CString strDBPath("");//連接SQL時為空,連接ACCESS時為文件路徑

CString strDBConn("driver={SQL Server};server=MySqlServer; uid=MyUserName;pwd=MyPassword;database=你的SQL資料庫文件" );
//連接SQL時這樣設置,連接ACCESS時此參數為空

dbSQL.Open( strDBPath,
FALSE, FALSE,
strDBConn
);

*****
*****另外,如樓上所言,DAO最初就是為ACCESS設計的。數據源只是一個適配器,讓DAO能夠擴展其功能連接其它資料庫。建議改用ADO,ADO功能非常完善,而且簡單易用。ADO採用COM組件技術,它提供了一套完全與開發平台無關的類庫。也就是說可以不用MFC,可以在不同開發環境,多做開發語言中使用。

㈣ 安裝DAO 資料庫失敗

您好,我來為您解答:
把安裝文件夾里的SQL語句直接復制到phpMyadmin中直接執行下看吧
操作前注意備份
希望我的回答對你有幫助。

㈤ 如何將資料庫中的一張表與結合在一起

關於將資料庫中的一張表與結合在以前思路大體有兩種:

第一種:不使用框架,使用JDBC(Java DataBase Connectivity)java連接資料庫。

  1. 載入驅動:class.forNname(" ");

  2. 得到連接:Connection connection = DriverManager.getConnection(" ");

  3. 聲明sql:String sql = " ";

  4. 執行sql語句:connection.createStatement().executeUpdate(sql);

第二種:使用框架。

  1. 創建實體類:實體的屬性與資料庫欄位對應

  2. 創建映射文件:將資料庫欄位與實體屬性關聯

  3. 在spring框架中管引入映射文件,並配置事物

  4. 在Dao層直接用

㈥ java中Dao如何訪問資料庫

用java訪問資料庫需要4步驟,只要按這個做就可以輕松訪問資料庫。

1、載入資料庫驅動
2、獲得資料庫連接
3、執行sql語句
4、(處理結果集)
5、關閉資源
第4歩看你的sql語句了,如果有返回結果則有第4歩,否則不用。

具體的:用一個類做例子
public class UserDaoImpl{
public void insertUserMessage(String name,String pwd){
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//上面是載入資料庫驅動
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為資料庫的SID
String user="test";//這個是資料庫的登錄用戶名
String password="test"; //登錄密碼
Connection conn =DriverManager.getConnection (url,user,password);
//獲得資料庫連接
PreparedStatement pst = conn.prepareStatement("Sql語句");
pst.setString(1,name);
pst.setString(2,pwd);
pst.excute();

pst.close();//關閉資源
conn.close();
}
}
以上就是連接資料庫的偽碼,不知道對你有沒有幫助

㈦ java中的Dao類是什麼意思

DAO類都是進行數據操作的類,

是對於資料庫中的數據做增刪改查等操作的代碼。

DAO(Data Access Object) 數據訪問對象是一個面向對象的資料庫介面,它顯露了 Microsoft Jet 資料庫引擎(由 Microsoft Access 所使用),並允許 Visual Basic 開發者通過 ODBC 像直接連接到其他資料庫一樣,直接連接到 Access 表。DAO 最適用於單系統應用程序或小范圍本地分布使用。

DAO層一般有介面和該介面的實現類,介面用於規范實現類,實現類一般用於用於操作資料庫! 一般操作修改,添加,刪除資料庫操作的步驟很相似,就寫了一個公共類DAO類 ,修改,添加,刪除資料庫操作時直接調用公共類DAO類。

(7)資料庫擴展閱讀:

DAO(Data Access Object)是一個數據訪問介面,數據訪問:顧名思義就是與資料庫打交道。夾在業務邏輯與資料庫資源中間。

在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應用,應該將所有對數據源的訪問操作抽象封裝在一個公共API中。用程序設計的語言來說,就是建立一個介面,介面中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個介面,並且編寫一個單獨的類來實現這個介面在邏輯上對應這個特定的數據存儲。

訪問對象

DAO(數據訪問對象)是一種應用程序編程介面(API),存在於微軟的Visual Basic中,它允許程序員請求對微軟的Access資料庫的訪問。DAO是微軟的第一個面向對象的資料庫介面。DAO對象封閉了Access的Jet函數。通過Jet函數,它還可以訪問其他的結構化查詢語言(SQL)資料庫。

㈧ JAVA 實現資料庫增刪改查的Dao和DaoImpl的寫法

package org.;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Date;
import org.dbc.DBManageer;
import org.dbc.DBUtil;
import org.vo.CardInfo;
public class CardInfoDao {
public void testResultSetMetaData() {
String sql = "select * from cardinfo";
Connection con = new DBUtil().getConnection();
PreparedStatement ps = null;
ResultSetMetaData rsmd = null;
ResultSet rs = null;
try {
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
rsmd = rs.getMetaData();
for (int i = 1; i < rsmd.getColumnCount(); i++) {
System.out.print(" 數據類型名:" + rsmd.getColumnClassName(i));
System.out.print(" 別名:" + rsmd.getColumnLabel(i));
System.out.print(" 列名:" + rsmd.getColumnName(i));
System.out.print(" 數據類型:" + rsmd.getColumnTypeName(i));
System.out.println(" 數據類型:" + rsmd.getColumnType(i));
}
while (rs.next()) {
// 通過反射可以對VO對象(CardInfo)自動賦值
// for(...)
// CardInfo ci=new CardInfo();
// ci.setId(rs.getInt(columnIndex))
/*
* CardInfo ca = new CardInfo(); Class cc = ca.getClass();
*/
/*Class<?> c = Class.forName("org.vo.CardInfo");
CardInfo ca = (CardInfo) c.newInstance();
ca.setCardId(rs.getString("cardId"));
ca.setCustomerName(rs.getString("customerName"));
ca.setCurrentMoney(rs.getFloat("currentMoney"));
ca.setOpenDate(rs.getDate("openDate"));
System.out.println(ca);//ok */

//載入一個CardInfo類
Class c = Class.forName("org.vo.CardInfo");
Object o = c.newInstance(); //獲得它的一個實例
//定義String類的對象數組
Class[] params = new Class[] { String.class};
//定義float類的對象數組
Class[] floatparams = new Class[] { float.class};
//定義Date(util)類的對象數組
Class[] dateparams = new Class[] { Date.class};
//獲得setCardId方法
Method me = c.getMethod("setCardId", params);
//實例方法的參數
Object []ostr = new Object[]{rs.getString("cardId")};
//如果底層方法是靜態的,那麼可以忽略指定的 obj 參數。該參數可以為 null。
//如果底層方法所需的形參數為 0,則所提供的 args 數組長度可以為 0 或 null。
//o 調用方法的對象 ostr 方法調用的參數
me.invoke(o, ostr);
//獲得setCustomerName方法
Method name = c.getMethod("setCustomerName", params);
Object []cusname = new Object[]{rs.getString("customerName")};
name.invoke(o,cusname);
//獲得setCurrentMoney方法
Method money = c.getMethod("setCurrentMoney", floatparams);
Object []cusmoney = new Object[]{rs.getFloat("currentMoney")};
money.invoke(o,cusmoney);
//獲得setOpenDate方法
Method date = c.getMethod("setOpenDate",dateparams);
Object []openDate = new Object[]{rs.getDate("openDate")};
date.invoke(o, openDate);
//列印
System.out.println(o);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public void showResultSet() {
String sql = "select * from cardinfo";
Connection con = new DBManageer().getConnection();
PreparedStatement ps = null;
try {
ps = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = ps.executeQuery();
System.out.println("---依次讀取------");
while (rs.next()) {
CardInfo ca = new CardInfo();
ca.setCardId(rs.getString("cardId"));
ca.setCustomerName(rs.getString("customerName"));
ca.setCurrentMoney(rs.getFloat("currentMoney"));
ca.setOpenDate(rs.getDate("openDate"));
System.out.println(ca);
}
System.out.println("---倒讀------");
while (rs.previous()) {
CardInfo ca = new CardInfo();
ca.setCardId(rs.getString("cardId"));
ca.setCustomerName(rs.getString("customerName"));
ca.setCurrentMoney(rs.getFloat("currentMoney"));
ca.setOpenDate(rs.getDate("openDate"));
System.out.println(ca);
}
rs.absolute(3);// 定位倒第幾行
rs.updateString("customerName", "star");
// rs.updateRow();
rs.beforeFirst();
while (rs.next()) {
CardInfo ca = new CardInfo();
ca.setCardId(rs.getString("cardId"));
ca.setCustomerName(rs.getString("customerName"));
ca.setCurrentMoney(rs.getFloat("currentMoney"));
ca.setOpenDate(rs.getDate("openDate"));
System.out.println(ca);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

㈨ 如何在VB中用DAO方法創建、打開、修改資料庫

引用DAO類型庫

1、從「工程」菜單中選擇「引用」菜單項;

2、在可引用列表框中選擇「Microsoft DAO 3.51 Object Library」項。

3、最後「確定」即可

設置DAO數據類型變數

DAO數據類型變數共分成兩種:

1、Database變數

對應於Access資料庫,通常在模塊中被定義為Public全程變數:

Public AccessDBF As Database

'定義資料庫對象實例AccessDBF

2、RecordSet變數

對應於Access資料庫中的一個表,可定義為全程變數或局部變數,亦可作為函數參數進行傳遞:

Dim thePrintTable As RecordSet

'定義一個表對象實例thePrintTable

打開DAO數據類型

1、打開Access的方法

通常可設置一個專門的Public函數用來打開一個Access資料庫,並且該函數在啟動窗體的Private Sub Form_load ( )過程中被調用,函數定義格式如下:

Public Sub OpenDatabase ( )

Dim sConeect As String

SConnect = ";PWD = 8830428; UID = admin "

'設置打開時的用戶名、口令等參數

Set AccessDBF = Nothing

'確認關閉對象實例

Set AccessDBF = WorksPaces (0 ).OpenDatabase (App.Path&&"/ToXls.MDB",False,sConnect)

'打開當前路徑的ToXls.MDB資料庫

End Sub

2、打開RecordSet的方法

RecordSet遵循即用即開的原則,所以它通常在函數中打開

Set thePrintTable = AcessDBF.OpenRecordSet ( "Table_1",dbOpenSnapshot )

相關的數據操作

數據實際需要對Access表中的記錄、欄位、數據項進行操作。下列雙重循環把數據輸出到Excel對應的單元格中:

For j = 0 To 2

For I = 0 To 3

ThePrintTable.MoveNext

Excel.Sheet.Range ( Trim ( chr ( 71+j*10+I ) )+"G").Value = thePrintTable.Fields (0)

Next I

Next j

關閉資料庫

1、關閉Database

它通常在整個應用程序的最後進行操作,即通常出現在Private Sub Form_unload (Cannel As Interger )過程中。命令格式實例如下:

AccessDBF.Close

2、關閉RecordSet

它遵循用完即關的原則,所以通常出現在函數中。當完成了相關的數據操作後就關閉它,下次再用時再打開即可:

thePrintTable.Close

熱點內容
塗鴉論文 發布:2021-03-31 13:04:48 瀏覽:698
手機資料庫應用 發布:2021-03-31 13:04:28 瀏覽:353
版面217 發布:2021-03-31 13:04:18 瀏覽:587
知網不查的資源 發布:2021-03-31 13:03:43 瀏覽:713
基金贖回參考 發布:2021-03-31 13:02:08 瀏覽:489
懸疑故事範文 發布:2021-03-31 13:02:07 瀏覽:87
做簡單的自我介紹範文 發布:2021-03-31 13:01:48 瀏覽:537
戰略地圖參考 發布:2021-03-31 13:01:09 瀏覽:463
收支模板 發布:2021-03-31 13:00:43 瀏覽:17
電氣學術會議 發布:2021-03-31 13:00:32 瀏覽:731