Sqlite3的心得理解以及一些使用的经验(一)iOS的数据存储是一个很让新手们纠结的地方,一大堆的存储方法,搞的童鞋们都很迷茫,后来知道了有一种被称为Sqlite3的东东,大家都开心的想去用了。这
Sqlite3的心得理解以及一些使用的经验(一)
iOS的数据存储是一个很让新手们纠结的地方,一大堆的存储方法,搞的童鞋们都很迷茫,后来知道了有一种被称为Sqlite3的东东,大家都开心的想去用了。这个时候出现问题了。查起来迷茫的一米啊。
下面就说下我在学习Sqlite3过程中遇到的一些问题,以及个人对使用这玩意的一些心得。
当然,我没用第三方库,习惯用第三方库的童鞋就可以无视我了。哈哈。
1, 学习Sqlite3必须要有一款相匹配的软件,我现在用的是MesaSQLite,图形化的界面会极大的帮助理解;
2, 理解数据库操作步骤:打开——操作——关闭;一定要遵循这个步骤来,确保数据的安全性和准确性;
3, 理解Sql语句的地位和作用:这个时候就可以感受到数据库软件的作用了,每一条语句都可以在数据库软件里进行一个测试,如果相应的结果出来,那么下面的事情就很简单了,如果语句不正确,OK,找到正确的语句为止;
4, 数据库的一般操作:增、删、改、查,每样做一遍,理解下,做完后,ok,亲,你就升级了,一般的数据库问题你都阔以解决老。哈哈
下面来说下数据库操作的一般流程吧:
数据库一般都是存放在沙盒的Documents目录下,下面是iOS编程常用的一些目录的寻找方法:
1, // 资源目录
2, NSString *defaultDBPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filename];
3, //==============================================================================
4, //获取程序Documents目录路径
5, //目录列表
6, NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
7, //根目录
8, NSString *documentsDirectory = [pathsobjectAtIndex:0];
9,
10, //==============================================================================
11, // 获取程序Library目录路径
12, //目录列表
13, NSArray *paths =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
14, //根目录
15, NSString *documentsDirectory = [pathsobjectAtIndex:0];
16,
17,
18, //==============================================================================
19, //获取程序caches目录
20, NSArray *cache =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
21, NSString *cachePath = [cacheobjectAtIndex:0];
22,
23,
24, //==============================================================================
25, //根据文件名来获取文件路径 doucument
26,
27, - (NSString*)dataFilePath:(NSString *)sender
28, {
29, NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
30, NSString *documentDirectory = [pathobjectAtIndex:0];
31,
32, return [documentDirectorystringByAppendingPathComponent:sender];
33, }
34,
35, //==============================================================================
36, //获取程序app文件所在目录路径
37,
38, NSString *homePath = NSHomeDirectory();
39, //==============================================================================
40, //获取程序tmp目录路径
41,
42, NSString *tempPath =NSTemporaryDirectory();
43,
44, //==============================================================================
45, //获取程序应用包路径
46, NSString * path = [[NSBundlemainBundle]resourcePath];
47, //或
48, NSString * path = [[NSBundle mainBundle] pathForResource:@"info" ofType: @"txt"];
49, //
一般来说。我们建数据库文件都会把他保存在Documents目录下,即如下:
50, //获取程序Documents目录路径
51, //目录列表
52, NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
53, //根目录
54, NSString *documentsDirectory = [pathsobjectAtIndex:0];
//打开数据库的方法
-(BOOL) openDB{
NSString *path = [selfdataFilePath];//datafilepath就是数据库在documents目录的路径;
NSFileManager*fileManager = [NSFileManagerdefaultManager];
BOOL find =[fileManagerfileExistsAtPath:path];
if (find) {
//////NSLog(@"Database file have alreadyexisted");
if (sqlite3_open([pathUTF8String], &_database) !=SQLITE_OK) {
sqlite3_close(_database);
//////NSLog(@"Error:open database failed");
returnNO;
}
}
if (sqlite3_open([pathUTF8String], &_database) ==SQLITE_OK) {
returnYES;
}else {
sqlite3_close(_database);
//////NSLog(@"Error:open database failed");
returnNO;
}
returnNO;
}
//创建数据库的方法
-(BOOL) createTestList:(sqlite3 *)db withString:(NSString *)nameString{
//这就是sql语句,我这边的方法传的namestring就是这条sql语句的nsstring形式,创建数据库一般是通过创建其中的表的形式进行创建
//char *sql = "CREATE TABLE IF NOTEXISTS SHIBOR(ID INTEGER PRIMARY KEY AUTOINCREMENT,version text,oidtext,publishDate text,deadline text,shibor text,bp text,bpTrend text)";
//char *sql = "CREATE TABLE IF NOTEXISTS SHIBOR,INT,WHILE";
//////NSLog(@"%@",nameString);
sqlite3_stmt *statement;
NSInteger sqlReturn =sqlite3_prepare_v2(_database, [nameStringUTF8String] , -1, &statement,nil);
if (sqlReturn !=SQLITE_OK) {
//////NSLog(@"Error:failedto prepare statement :create Table");
returnNO;
}
int success =sqlite3_step(statement);
sqlite3_finalize(statement);
if (success !=SQLITE_DONE) {
//////NSLog(@"Error:failedto dehydrate :create table test");
returnNO;
}
//////NSLog(@"Create table\"Table\" successed");
returnYES;
}