Symbian Security Studio

About symbian software programming ,security analysis and other things about symbian.

Monday, March 24, 2008

Symbian中数据库DBMS使用的一点经验

最近研究了一下Symbian中的数据库使用,因为第一次接触数据库所以中间遇到了一些问题,也发现了一些解决办法,这里写出来,希望大家能够有所借鉴。
关于数据库的例子主要有三个,一个是官方提供的BookStore的例子,还有一个是SDK目录下面example里面base中的DBMS例子,还有一个比较复杂的是在8.1SDK, 就是第二版3fp中的根目录下面,叫做news-store。建议都看一下,第二个比较简单,第一个稍微复杂,最后一个相对复杂。
使用数据库有两种方法,一种是SQL,一种是利用系统提供的API。有人说前者速度要快一些,这个我没有测试,仅作为参考。
关于具体的知识我就不多说了,这里主要说下这几个例子中没有涉及到一些问题。
1.首先一定要注意对各种panic的理解,具体的panic表见下面。程序的问题一定要看对应的panic,以这个为思路,一般都能找到问题所在。
2.如果你要从数据库中读取数据
TDbSeekKey seekKey(aContactID); // Initialize one-column seek key
err = rowset.Open(iPbkExDb, KCMTable, rowset.EReadOnly);
注意这里第一个是索引,索引一定要类型匹配,否则会panic;第二句中关键的问题是EReadOnly,这样就说明这个行是不会改变的,所以在读取时,要用
rowset.GetL();
读取完成关闭就行了。
rowset.Close();
3.如果你要向数据库中写数据
err = rowset.Open(iPbkExDb, KCMTable, rowset.EUpdatable);
这里就要使用EUpdatable,标志这个行是可以改变的,接着在写入时,要用
rowset.UpdateL();
再进行写入操作,
rowset.SetColL(ContactImagePathColumNo,aPath);
写入的时候一定要跟你在建立数据库时定义的类型相匹配。
最后不要忘记
rowset.PutL();
这样修改后的数据才能提交到数据库中。
rowset.Close();
最后再关闭。
其他的发现以后再补充吧,下面是panic列表
DBMS panic 错误码只是在头文件中定义了而没有出现在SDK文档中。查阅起来比较繁琐。

DBMS错误码有四种类型分别是:
1 DBMS
2 DBMS-Server
3 DBMS-Store
4 DBMS-Table

当你遇到关于DBMS的错误的时候首先要注意是那种错误。

他们分别位于不同的头文件中如下:

ud_std.h (DBMS)
EDbUnimplemented, 0
EDbInvalidColumn, 1
EDbUninitialised, 2
EDbRowLengthOverflow, 3
EDbTooManyKeys, 4
EDbInvalidViewWindowParameters, 5
EDbWrongType, 6
EDbInvalidIncrementalStep, 7
EDbNoColumnsInSeekKey 8

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

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

ut_std.h (DBMS-Table)
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

Labels: , ,

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home