将SQLITE3数据库设置为应用程序中的永久存储。我需要检查是否存在填充了表的数据库对象,并且如果没有表存在则执行SQL DDL语句(即在首次启动APP时),想知道接下来的最佳方法是我下面的内容还是完全错误/有没有更好的办法?!我可以在int ri = sqlite3_open_v2(" schoolDatabase.db",& _database,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL)之后检查数据库属性为null / nil;命令或即使数据库没有表,它会返回一个值吗?
@interface DBAccess ()
@property (nonatomic,strong) sqlite3 *database;
@implementation DBAccess
@synthesize database = _database
-(id)init
int check =sqlite3_initialise();
if(check==SQLITE_OK){
int ri = sqlite3_open_v2("schoolDatabase.db",&_database, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL);
if(ri==SQLITE_OK){
NSLOG(@"Database created successfully};
else{ NSLog(@"problem creating database");}
sqlite3_stmt *statement;
const char *databaseExistence = "SELECT name FROM sqlite_master WHERE Type = table";
sqlite3_prepare_v2(self.database,databseExistence,-1,&statement,NULL);
while(sqlite3_step(statement)==SQLITE_ROW)
{
//I am presuming column indexes are zero based in sqlite3 ?
const unsigned char *tableNames = sqlite3_column_text(statement,2);
if(tableNames=nil){
NSLog(@"Tables in database do not exist......creating tables"
//insert SQL statement to prepare and execute CREATE TABLE commands for the Blank database
答案 0 :(得分:1)
您可以查看application_id
和/或user_version
个pragma。
如果它们为零,那么您已经打开了一个新数据库,并且可以设置您的架构(并将它们设置为您自己的幻数)。如果它们匹配您的幻数,那么数据库就存在了。如果他们不是非零但不匹配,那么有人会更改它们,您可能会提前出错。