- 2
- 0
- 约7.36千字
- 约 13页
- 2016-10-19 发布于河南
- 举报
sqlite的方法
sqlite 的方法
sqlite3 ? ? ? ? ?*db, 数据库句柄,跟文件句柄FILE很类似
sqlite3_stmt ? ? ?*stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句sqlite3_open(), ? 打开数据库,没有数据库时创建。sqlite3_exec(), ? 执行非查询的sql语句Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。Sqlite3_close(), 关闭数据库文件还有一系列的函数,用于从记录集字段中获取数据,如sqlite3_column_text(), 取text类型的数据。sqlite3_column_blob(),取blob类型的数据sqlite3_column_int(), 取int类型的数据
(1)打开或者创建数据库
sqlite3 *database;
int result = sqlite3_open(/path/databaseFile, database);
如果/path/databaseFile不存在,则创建它,否则打开它。如果result的值是SQLITE_OK,则表明我们的操作成功。
注意上述语句中数据库文件的地址字符串前面没有@字符,它是一个C字符串。将NSString字符串转成C字符串的方法是:
const char *cString = [nsString UTF8String];
(2)关闭数据库
sqlite3_close(database);
(3)创建一个表格
char *errorMsg;
const char *createSQL = CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT);
int result = sqlite3_exec(database, createSQL, NULL, NULL, errorMsg);
执行之后,如果result的值是SQLITE_OK,则表明执行成功;否则,错误信息存储在errorMsg中。
sqlite3_exec这个方法可以执行那些没有返回结果的操作,例如创建、插入、删除等。
(4)查询操作
NSString *query = @SELECT ID, FIELD_DATA FROM FIELDS ORDER BY ROW;
sqlite3_stmt *statement;
int result = sqlite3_prepare_v2(database, [query UTF8String], -1, statement, nil);
如果result的值是SQLITE_OK,则表明准备好statement,接下来执行查询:
while (sqlite3_step(statement) == SQLITE_ROW) {
int rowNum = sqlite3_column_int(statement, 0);
char *rowData = (char *)sqlite3_column_text(statement, 1);
NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];
// Do something with the data here
}
sqlite3_finalize(statement);
使用过其他数据库的话应该很好理解这段语句,这个就是依次将每行的数据存在statement中,然后根据每行的字段取出数据。
(5)使用约束变量
实际操作时经常使用叫做约束变量的东西来构造SQL字符串,从而进行插入、查询或者删除等。
例如,要执行带两个约束变量的插入操作,第一个变量是int类型,第二个是C字符串:
char *sql = insert into oneTable values (?, ?);;
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(database, sql, -1, stmt, nil) == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, 235);
sqlite3_bind_text(stmt, 2, valueString, -1, NULL);
}
if (sqlite3_step(stmt) != SQLITE_DONE)
NSLog(@Something is Wrong!);
sqlite3_finalize(stmt
原创力文档

文档评论(0)