Symbian数据库浅谈(转)

http://www.mobpub.net/viewthread.php?tid=2287

 

Symbian数据库浅谈(转)

主要涉及到的类:
RDbs
RDbStoreDatabase
RDbNamedDatabase
RDbTable
RDbView
TDbQuery
…相关类很多,最笨的办法可以在Doc中分别以C、R、T + Db进行查看

RDbs代表了一个连接到DBMS 服务器的Session。
RDbStoreDatabase、RDbNamedDatabase是Symbian里面的两种数据库,两者不能通用,后者是共享型的,使用更为广泛。
范例代码如下:
RDbs rdbs;
RDbNamedDatabase db;
User::LeaveIfError(rdbs.Connect());
User::LeaveIfError(db.Create(rdbs,_L(”C:/MyDb.db”),_L(”SECURE[0xEA3243EF]”)));
//当然,也可以使用另一个Create的重载版本创建数据文件,第一个参数是一个RFs,不过那是不加密型的数据库
db.Open(rdbs,_L(”C:/MyDb.db”),_L(”SECURE[0xEA3243EF]”));
// 建表
db.Execute(_L(”CREATE TABLE table1(id INTEGER,name VARCHAR(16))”));
// 注:RDbNamedDatabase直接提供了表/索引操作的API(如CreateTable),但是使用稍嫌麻烦,需要CDbColSet、TDbCol,不如直接使用Execute执行建表语句来得简单。但是直接使用建表SQL的坏处就是不支持事务,Execute之后直接生效,而使用CreateTable等函数后,需要调用Commit(),当然也能使用Rollback进行回滚。
// 插数据
db.Execute(_L(”INSERT INTO table1 VALUES(1,’Coastline’)”));
db.Compact();
// 查数据
RDbView dbView;
TDbQuery dbQuery(_L(”SELECT * FROM table1 WHERE id=1″));
dbView.Prepare(db,dbQuery);
dbView.EvaluateAll();
for(dbView.FirstL();dbView.AtRow();dbView.NextL())
{
dbView.GetL();
TInt id = dbView.ColInt(1);
TBuf<16> name(dbView.ColInt(1));
// do sth with id & name
}
// 关闭
dbView.Close();
db.Close();
rdbs.Close();
注:以上代码缺乏数据库文件存在与否的检测等常规容错机制

Symbian中使用的SQL:(摘录+本人汉化)
# ‘SELECT‘
SELECT select-list FROM table-name [ WHERE search-condition ] [ ORDER BY sort-order ]
* 3 search-condition types: compare, like, null

# DML : INSERT, DELETE, UPDATE
INSERT INTO table-name [ ( column-identifier,… ) ] VALUES ( column-value,… )
DELETE FROM table-name [ WHERE search-condition ]
UPDATE table-name SET update-column,… [ WHERE search-condition ]

# DDL : Work with the schema(即数据库)
CREATE TABLE table-name (column-definition,…)
DROP TABLE table-name
ALTER TABLE table-name { ADD add-column-set [ DROP drop-column-set ] | DROP drop-column-set }
CREATE [ UNIQUE ] INDEX index-name ON table-name ( sort-specification,… )
DROP INDEX index-name FROM table-name

常用数据类型(不完整)
[‘BIT’, ‘INTEGER’, ‘COUNTER’, ‘BIGINT’, ‘FLOAT’, ‘TIMESTAMP’, ‘VARCHAR(n)’, ‘LONG VARCHAR’]
* COUNTER is an auto-incremented unsigned integer 即自动递增的无符号整数,获取的时候要使用ColUint()。

DBMS错误码有四种类型分别是:
1 DBMS(ud_std.h)
———————
EDbUnimplemented, 0
EDbInvalidColumn, 1
EDbUninitialised, 2
EDbRowLengthOverflow, 3
EDbTooManyKeys, 4
EDbInvalidViewWindowParameters, 5
EDbWrongType, 6
EDbInvalidIncrementalStep, 7
EDbNoColumnsInSeekKey 8

2 DBMS-Server(sd_std.h)
————————-
EDbsUnimplemented, 0
EDbsInvalidColumn, 1
EDbsWrongType, 2
EDbsNoRowData, 3
EDbsNotInUpdate, 4
EDbsBadDescriptor, 5
EDbsBadHandle, 6
EDbsStreamMarkInvalid, 7
EDbsStreamLocationInvalid, 8
EDbsObserverRequestPending 9

3 DBMS-Store(us_std.h)
————————-
EDbUnimplemented, 0
EDbNoStore, 1
EDbCannotSeek, 2
EDbNotFixedFieldType, 3
EDbWrongType 4

4 DBMS-Table(ut_std.h)
————————-
EDbInvalidColumn, 0
EDbWrongType, 1
EDbInUpdate, 2
EDbNotInUpdate, 3
EDbInvalidRow, 4
EDbRowNotRead, 5
EDbReadOnly, 6
EDbTableOpen, 7
EDbNotEvaluated, 8
EDbStreamOpen, 9
EDbRowSetConstraintMismatch, 10
EDbBeginNestedTransaction, 11
EDbUpdatesPendingOnCommit, 12
EDbUpdatesPendingOnRollback, 13
EDbNoCurrentTransaction, 14
EDbStreamsPendingOnCommit, 15
EDbStreamsPendingOnRollback, 16
EDbInvalidBookmark 17

另外要说明的一点是:SQL语句末尾不要分号,否则执行返回错误码 -11
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值