java userdao,Java Web 开发基础------DAO
DAO (Data Access Objects)數據訪問對象是第一個面向對象的接口,它顯露了 Microsoft Jet數據庫引擎(由 Microsoft Access 所使用),并允許 Visual Basic 開發者通過 ODBC 象直接連接到其他數據庫一樣,直接連接到 Access 表。DAO 最適用于單系統應用程序或小范圍本地分布使用。
1.訪問接口:
DAO(Data Access Object)是一個數據訪問接口,數據訪問:顧名思義就是與數據庫打交道。夾在業務邏輯與數據庫資源中間。
在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應用,應該將所有對數據源的訪問操作抽象封裝在一個公共API中。用程序設計的語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個接口,并且編寫一個單獨的類來實現這個接口在邏輯上對應這個特定的數據存儲。
2.訪問對象:
DAO(數據訪問對象)是一種應用程序編程接口(API),存在于微軟的Visual Basic中,它允許程序員請求對微軟的Access數據庫的訪問。DAO是微軟的第一個面向對象的數據庫接口。DAO對象封閉了Access的Jet函數。通過Jet函數,它還可以訪問其他的結構化查詢語言(SQL)數據庫。
J2EE開發人員使用數據訪問對象(DAO)設計模式把底層的數據訪問邏輯和高層的商務邏輯分開.實現DAO模式能夠更加專注于編寫數據訪問代碼.
3.數據訪問對象DAO的功能:
1. DAO:用來封裝Data Source
就比如,Connection conn = DAOFactory.createConnection()..
就可以把Driver. URL. username,passpword這一些放在DAO中
以后要更改數據庫的類型.比如要把MSSQL換成Oracle的話..只需要更改DAOFactory里面的getConnection()里面的Driver.URL.之類的..
2. DAO:封裝對數據庫的操作(比如最基本的CRUD操作)
比如說你要你要插入一個新的用戶..那么.在DAO中我們只需要提供一個insertUser(User user)這一個方法就可以了..具體的操作是在DAO中實現的...
那么對于要調用DAO的時候.我們只要知道insertUser(User)是用來插入一個新的用戶...而不需要知道是如何實現的..
一般 DAO是與Abstract Factory模式一起來用的...
Factory來建立數據庫和定位具體的DAO(比如說是UserDao..CustomerDao..)..一般將getConnection設置為static..也可以把HibernateSessionFactory這一個公共類放在這一AbstractFactory類中去...
public class DAOFactory {
private static final SessionFactory sessionFactory;
// 定義一個ThreadLocal .
static Session currentSession().....
public UserDao getUserDAO() { return new UserDaoImpl(sesssion);}
pulbic OtherDao getOtherDAO() { return new OtherDaoImpl(session);}
......
}
public interface UserDao {
public insertUser(FormBean)
public updateUser(FormBean);
}
然后就實現DAO的接口: (Struts的FormBean...VO來的..)
public ?class ?UserDaoImpl implements UserDao {
privateSession session;
public UserDaoImpl(Session session){
this.session = session;
}...
public insertUser(FormBean) {
..//..
session.save(UserPO);
..//..
return FormBean;
}
public FormBean updateUser(FormBean) {
..//..
session.update(UserPO);
..//..
return FormBean;
}
}
最后定義你的PO:
public?class?UserPO {
String firstname,lastname,password..........
}
4.?應用DAO編程:
4.1 打開數據庫
CDaoWorkspace對象代表一個DAO Workspace對象,在MFC DAO體系結構中處于最高處,定義了一個用戶的同數據庫的會話,并包含打開的數據庫,負責完成數據庫的事務處理。我們可以使用隱含的workspace對象。
CDaoDatabase對象代表了一個到數據庫的連接,在MFC中,是通過CDaoDatabase封裝的。
在構造CDaoDatabase對象時,有如下兩種方法:
創建一個CDaoDatabase對象,并向其傳遞一個指向一個已經找開的CdaoWorkspace對象的指針。
創建一個CDaoDatabase對象,而不明確地指定使用的workspace,此時,MFC將創建一個新的臨時的CDaoWorkspace對象。
如下代碼所示:
CDaoDatabasedb;
db.Open(“test.mdb”,FALSE,FALSE,_T(“”);
其中參數一包括要打開的文件的全路徑名。
4.2 查詢記錄
一個DAO recordset對象,代表一個數據記錄的集合,該集合是一個庫表或者是一個查詢的運行結果中的全部記錄。CDaoRecorset對象有三種類型:表、動態集、快照。
通常情況下,我們在應用程序中可以使用CDaoRecordset的導出類,這一般是通過ClassWizard或AppWizard來生成的。但我們也可以直接使用CDaoRecordset類生成的對象。此時,我們可以動態地綁定recordset對象的數據成員。
如下代碼所示:
COleVariant var;
long id;
CString str;
CDaoRecordset m_Set(&db);
m_Set.Open(“查詢的SQL語句”);
while(!m_Set.IsEOF())
{
/*
處理
m_Set.GetFieldValue(“ID”,var);
id=V_I4(var);
m_Set.GetFieldValue(“Name”,var);
str=var.pbVal;
*/
m_Set.MoveNext();
}
m_Set.Close();
4.3 添加記錄
添加記錄用AddNew函數,此時用SetFieldValue來進行賦值。
如下代碼所示:
m_pDaoRecordset->AddNew ();
sprintf(strValue,"%s",>m_UserName );
m_pDaoRecordset->SetFieldValue ("UserName",strValue);
sprintf(strValue,"%d",m_PointId );
m_pDaoRecordset->SetFieldValue ("PointId",strValue);
dataSrc.SetDateTime (m_UpdateTime .GetYear ),m_UpdateTime .GetMonth ),m_UpdateTime .GetDay (),
m_UpdateTime .GetHour (),m_UpdateTime .GetMinute (),m_UpdateTime .GetSecond ());
valValue=dataSrc;
m_pDaoRecordset->SetFieldValue ("UpdateTime",valValue);
sprintf(strValue,"%f",m_pRecordset->m_OldValue );
m_pDaoRecordset->SetFieldValue ("OldValue",strValue);
sprintf(strValue,"%f",m_pRecordset->m_NewValue );
m_pDaoRecordset->SetFieldValue ("NewValue",strValue);
m_pDaoRecordset->Update ();
此時,要注意,日期時間型數據要用SetDataTime函數來賦值,這里面要用到COleVariant類型數據,具體用法可以參考有關幫助。
4.4 修改記錄
修改記錄用Edit()函數,把記錄定位到要修改的位置,調用Edit函數,修改完成后,調用Update函數。
如下代碼所示:
m_Set.Edit();
m_Set.SetFieldValue(“列名”,”字符串”);
m_Set.Update();
4.5 刪除記錄
刪除記錄用Delete()函數,使用后不需調用Update()函數。
4.6 統計記錄
可以使用如下代碼來統計記錄數:
COleVariant varValue;
CDaoRecordset m_Set(&db);
m_Set.Open(dbOpenDynaset,”SQL語句”);
varValue=m_Set.GetFieldValue(0);
m_lMaxCount=V_I4(&varValue);
m_Set.Close();
如果是統計一張表中總記錄,可以使用CDaoTableDef對象,如下代碼所示:
CDaoTableDefm_Set(&gUseDB);
Count=m_Set.GetRecordCount();
m_Set.Close();
不能用CDaoRecordset對象的GetRecordCount()來取得記錄數。
總結:
使用DAO技術可以便我們方便的訪問Microsoft Jet引擎數據庫,由于Microsoft Jet不支持多線程,因此,必須限制調用到應用程序主線程的所有DAO。(來源CNET Networks )
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java userdao,Java Web 开发基础------DAO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每日签到html特效,前端这种连续签到的
- 下一篇: 子类怎么继承父类方法中的变量_JavaO