создать sqlite db программно в iphone SDK - PullRequest
8 голосов
/ 30 августа 2010

Привет, я пытаюсь создать базу данных sqlite программно во время выполнения.Кто-нибудь может сказать, как создать его в iphone SDK.

Ответы [ 3 ]

20 голосов
/ 30 августа 2010

Просто вызовите функцию sqlite3_open, которая создаст базу данных, если на пути нет базы данных.

// generate databasePath programmatically
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
{

// your  code here
}

оставьте комментарий, если вам нужно больше примеров кода для этого

3 голосов
/ 28 июня 2012
-(void)viewDidLoad
{
    [super viewDidLoad];
    NSString *docsDir;
    NSArray *dirPaths;
    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = [dirPaths objectAtIndex:0];

    // Build the path to the database file
    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.sqlite"]];
    NSFileManager *filemgr = [NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath: databasePath ] == NO)
    {
        const char *dbpath = [databasePath UTF8String];

        if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
        {
            char *errMsg;
    const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)";

            if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
            {
                NSLog(@"if");

            }

            sqlite3_close(contactDB);

        } else 
        {
            NSLog(@"else");

        }
    }
    [filemgr release];

}

-(IBAction)table
{
    NSString *docsDir;
    NSArray *dirPaths;

    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = [dirPaths objectAtIndex:0];

    // Build the path to the database file
    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.sqlite"]];

    NSFileManager *filemgr = [NSFileManager defaultManager];

   // if ([filemgr fileExistsAtPath: databasePath ] == NO)
    {
        const char *dbpath = [databasePath UTF8String];

        if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
        {
            char *errMsg;
            const char *sql_stmt = "CREATE TABLE LIST (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)";

            if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
            {

                  NSLog(@"tables failed");
               // status.text = @"Failed to create table";
            }

            sqlite3_close(contactDB);

        }
        else 
        {

            NSLog(@"tables failed");
            //status.text = @"Failed to open/create database";

        }
    }

    [filemgr release];
}  
2 голосов
/ 29 апреля 2013

импорт в .m файл #import sqlite3.h и добавление фреймворка в ваш проект libsqlite3.0.dylib

сначала создайте класс NSObject и назовите его Databaseв .h классе

  @interface database : NSObject

   {
    NSString *databasePath;
NSString *databaseName;
sqlite3 *myDatabase;
NSArray *documentPaths;
NSString *documentsDir;  

}

// --- начальные методы -------

 -(void)createDatabaseIfNeeded;

// ----------------- метод поиска пути --------------------- //

  -(void)pathFind;

// ----------------- записать значение ---------------------- //

  -(void)writeValueInSettings:(NSMutableArray *)arrayvalue;

// ------------------- получить значение из таблицы настроек ------------ //

    -(NSMutableArray *)fetchValue;

// ------------------- значение обновления --------------------- //

    -(void)updateSetting:(NSArray *)arr;

.mзапись класса

 -(id)init
  {
if((self=[super init]))
{
    [self createDatabaseIfNeeded];
}
return self;    
  }

 //-----------create database if needed method--------------//
 -(void)createDatabaseIfNeeded
  {
[self pathFind];

BOOL success;
NSFileManager *filemgr = [NSFileManager defaultManager];
success=[filemgr fileExistsAtPath:databasePath];

if (success)return;

NSLog(@"not success");

//Get the path to the database in the application package
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath]  stringByAppendingPathComponent:databaseName];
// Copy the database from the package to the users filesystem
[filemgr copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];


    }

// ---------------- поиск пути ----------------- //

  -(void)pathFind
    {
databaseName = @"accDataBase.DB";
// Get the path to the documents directory and append the databaseName
documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
  }

// ------------------ записать значение в настройку ---------------- //

  -(void)writeValueInSettings:(NSMutableArray *)arrayvalue
   {   
   NSLog(@"%@",arrayvalue);

   if(sqlite3_open([databasePath UTF8String],&myDatabase)==SQLITE_OK)

  {
    database *objectDatabase=[[database alloc]init];

    NSString *stringvalue2=[objectDatabase countValue];
    [objectDatabase release];
    int intvalue1=[stringvalue2 intValue];

    intvalue1=intvalue1+1;
    NSLog(@"opened");
    NSString *sql1;

    sql1=[[NSString alloc] initWithFormat:@"insert into setting values('%i','%i','%i','%@','%i','%i','%@','%i','%i','%i','%i','%i','%i','%@');",intvalue1,
          [[arrayvalue objectAtIndex:0] intValue],[[arrayvalue objectAtIndex:1] intValue],[arrayvalue objectAtIndex:2],[[arrayvalue objectAtIndex:3] intValue],[[arrayvalue objectAtIndex:4]intValue ],[arrayvalue objectAtIndex:5],[[arrayvalue objectAtIndex:6]intValue],[[arrayvalue objectAtIndex:7]intValue ],[[arrayvalue objectAtIndex:8] intValue],[[arrayvalue objectAtIndex:9] intValue],[[arrayvalue objectAtIndex:10]intValue ],[[arrayvalue objectAtIndex:11]intValue],[arrayvalue objectAtIndex:12]];
    char *err1;
    if (sqlite3_exec(myDatabase,[sql1 UTF8String],NULL,NULL,&err1)==SQLITE_OK)
    {
        NSLog(@"value inserted:");
    }
    [sql1 release];
    sqlite3_close(myDatabase);
}

} // ------------ получить все значения ------------- //

   -(NSMutableArray *)fetchValue
    {
NSMutableArray *list=nil;

    list=[[[NSMutableArray alloc]init] autorelease];

if(sqlite3_open([databasePath UTF8String],&myDatabase)==SQLITE_OK)
{

    NSString *sql=[NSString stringWithFormat: @"select * from setting where primaryKey=1"];
          sqlite3_stmt *statement;

    if(sqlite3_prepare_v2(myDatabase, [sql UTF8String], -1,&statement, NULL)==SQLITE_OK)
    {
        if(sqlite3_step(statement)==SQLITE_ROW)
        {
            for(int i=0;i<=13;i++)
            {
                char *pass=(char*)sqlite3_column_text(statement,i);
                NSString *msg=[[NSString alloc]initWithUTF8String:pass];
                [list addObject:msg];
                [msg release];
            }

        }
        sqlite3_finalize(statement);
    }
    sqlite3_close(myDatabase);
   }

  return list;

      }

// ---------------- обновить метод таблицы настроек --------------- //

    -(void)updateSetting:(NSArray *)arr
    {    
if(sqlite3_open([databasePath UTF8String],&myDatabase)==SQLITE_OK)
{
    NSLog(@"opened");
    sqlite3_stmt *compiledStmt;

   // NSLog(@"%@",arr);

    NSString *sqlStmt=[NSString stringWithFormat:@"UPDATE setting SET ragular=%i,cycle=%i, flow='%@', hour=%i,minute=%i,formate='%@' ,tenminute=%i ,thirtyminute=%i,sixtymin=%i, twentymin=%i, fourtyfivemin=%i ,other='%@',formatemessage ='%@' WHERE primaryKey=%i;",[[arr objectAtIndex:0]intValue],[[arr objectAtIndex:1]intValue],[arr objectAtIndex:2],[[arr objectAtIndex:3]intValue],[[arr objectAtIndex:4]intValue],[arr objectAtIndex:5],[[arr objectAtIndex:6]intValue],[[arr objectAtIndex:7]intValue],[[arr objectAtIndex:8]intValue],[[arr objectAtIndex:9]intValue],[[arr objectAtIndex:10]intValue],[arr objectAtIndex:11],[arr objectAtIndex:12],1];
 //   NSLog(@"%@",sqlStmt);
     if(sqlite3_prepare_v2(myDatabase, [sqlStmt UTF8String],-1,&compiledStmt, NULL)==SQLITE_OK) 
      {
    NSLog(@"updateding......cycle");
        }
    sqlite3_step(compiledStmt);
    sqlite3_close(myDatabase);
}

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...