编辑“︁
High Level Database Access
”︁
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Navigation for Marauroa Top|Using}} {{Navigation for Marauroa Users}} {{Database Access}} __TOC__ This article describes how you can use Marauroa in your games to access the database on a high level. The internal works are explained in [[Low Level Database Access]]. The table structure of the Marauroa database is explained in [[Marauroa Database Structure]]. Most of the database access is transparent. For example if client requests the creation of an account and the game server logic accepts that request, Marauroa will automatically add the necessary rows to the database. But in some situations it may be necessary for you do database operations. For example you may want to log gameEvents or you might have a website allowing account creation. == Data Access Objects == In compliance to the Marauroa architecture, database access related code is not spread all over the code base but concentrated in a set of data access objects (DAO). There is JavaDoc available for the complete [http://stendhalgame.org/hudson/job/marauroa_HEAD/javadoc/marauroa/server/game/db/package-summary.html DAO package]. Note that games can add their own DAOs. So lets assume you want to log a gameEvent about a player logging out: <source lang="java"> gameEventDAO.addGameEvent(playerName, "logout"); </source> Games are able to subclass DAO objects in order to add or replace their own functionality. This, however, means that we cannot simple create a new GameEventDAO ourselves. Instead we have to use the DAORegister: <source lang="java"> GameEventDAO gameEventDAO = DAORegister.get().get(GameEventDAO.class); gameEventDAO.addGameEvent(playerName, "logout"); </source> Now games can register their own subclass of GameEventDAO and we use it automatically. == Transactions == All public methods in DAO classes have two signatures: One with a DBTransaction object as first parameter and one without. This is for your convenience: In most cases those functions are not part of a larger context so you do not have to care about transactions at all: The DAO-classes do the transaction handling on their own. There are, however, a small number of cases in which you want to do multiple calls to DAOs in one single transaction. In this case you get a DBTransaction from the TransactionPool and provide it as first parameter to DAO-methods. After you are done you must either commit or rollback your changes with the appropriate methods in the class TransactionPool. <source lang="java"> DBTransaction transaction = TransactionPool.get().beginWork(); try { DAORegister.get().get(GameEventDAO.class).addGameEvent(transaction, playerName, "saved"); DAORegister.get().get(GameEventDAO.class).addGameEvent(transaction, playerName, "logout"); } finally { TransactionPool.get().commit(transaction); } </source> Please note that commit() will automatically perform a rollback and throw an SQLException if there have been any errors. {{#breadcrumbs: [[Marauroa]] | [[Navigation for Marauroa Users|Using]] | [[High Level Database Access]] }}
摘要:
请注意,所有对gamedev的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Gamedev:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
Template:Br
(
编辑
)
Template:Database Access
(
编辑
)
Template:Navigation Menu Marauroa General
(
编辑
)
Template:Navigation Menu Marauroa Internals
(
编辑
)
Template:Navigation Menu Marauroa Users
(
编辑
)
Template:Navigation for Marauroa Top
(
编辑
)
Template:Navigation for Marauroa Users
(
编辑
)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息