4.4 使用TDbQuery 类 该类的设计目的是传递一些能够容纳SQL的描述符,用以替代缺省组织方式为普通文本比较的TDbQuery对象。例如,在下列代码片断中: _LIT(KSQLStatement ="SELECT Author, Title FROM Books WHERE Author LIKE 'BR*'"); RDbView dbview; view.Prepare(iBookDb, KSQLStatement); the view.Prepare statement is functionally equivalent to: view.Prepare(iBookDb, TDbQuery(KSQLStatement, EDbCompareNormal)); 为了确定其他比较类型,查询对象必须安规定格式定义,例如: view.Prepare(iBookDb, TDbQuery(KSQLStatement, EDbCompareFolded));
4.5 SQL架构与数据更新 可以通过使用SQL命令对SQL架构和数据进行修改,DBMS接口中等价的函数为RDbDatabase和RDbIncremental。 提示:使用SQL语句可能不能完成本地DBMS API所提供的全部功能。 4.5.1 数据库定义语言(DDL) DDL被用来修改数据库中的高级功能;这些功能包括在数据库中创建和删除表以及索引。 DDL语句不能在数据库中修改数据;然而,当一个表被删除时,表名下的所有数据都丢失了。删除一个索引即简单的移除了通过该索引获取特殊的表数据的能力。 4.5.1.1 创建表语句 CREATE TABLE table-name (column-definition,…) 4.5.1.2 删除表语句 DROP TABLE table-name 4.5.1.3 修改表语句 ALTER TABLE table-name { ADD add-column-set [ DROP drop-column-set ] | DROP drop-column-set } 4.5.1.4 创建索引语句 CREATE [ UNIQUE ] INDEX index-name ON table-name ( sort-specification,… ) 4.5.1.5 删除索引语句 DROP INDEX index-name FROM table-name
4.5.2 SQL 数据跟新语言(DML) DML语言可在列级修改数据库,用法包括行插入操作,删除操作以及更新操作。 DML语句可以修改数据库中已经存在的数据内容。 4.5.2.1 插入语句 INSERT INTO table-name [ ( column-identifier,… ) ] VALUES ( column-value,… ) 4.5.2.2 删除语句 DELETE FROM table-name [ WHERE search-condition ] 4.5.2.3 更新语句 UPDATE table-name SET update-column,… [ WHERE search-condition ]
4.5.3 例子 使用DDL或DML语句最简单的方法是执行RdbDatabase。如果操作耗时太长,推荐使用增量方法(参见第5章,“增量数据库操作”)。 下列代码片断简要显示了数据库架构与数据的更新: private: // 数据成员 RDbStoreDatabase iBookDb; // 可以用 RDbNamedDatabase 替换 ... TInt CBookDb::AddDateColumn() { _LIT(KSqlAddDate, "ALTER TABLE Books ADD PublishDate DATE"); return iBookDb.Execute(KSqlAddDate); } TInt CBookDb::DropBooksTable() { _LIT(KSqlDropBooks, "DROP TABLE Books"); return iBookDb.Execute(KSqlDropBooks); } TInt CbookDb::DeleteAllBooks() { _LIT(KSqlDeleteAllBooks, "DELETE FROM Books"); return iBookDb.Execute(KSqlDeleteAllBooks); } // 删除以F-letter名字起始的书。 TInt CbookDb::DeleteFBooks() { _LIT(KSqlDeleteFBooks, "DELETE FROM Books where Title like ‘F*’"); return iBookDb.Execute(KSqlDeleteFBooks); } TInt CBookDb::UpdateBookTitle(const TDesC& aOldTitleKey, const TDesC& aNewTitle) { _LIT(KSQLUpdateStart, "UPDATE Books SET Title = '"); _LIT(KSQLUpdateMiddle, "' WHERE Title = '"); _LIT(KSQLUpdateEnd, "'"); // SQL: UPDATE Books SET Title = ‘aNewTitle’ // WHERE Title = ‘aOldTitleKey’ TBuf<KCustomSqlMaxLength> sqlStr; sqlStr.Append(KSQLUpdateStart); sqlStr.Append(aNewTitle); sqlStr.Append(KSQLUpdateMiddle); sqlStr.Append(aOldTitleKey); sqlStr.Append(KSQLUpdateEnd); return iBookDb.Execute(sqlStr); }
此文为开发视界翻译转载者请注明出处否则追究法律责任
|