坚持以编程方式创建数据库。使用Xcode 3.1.4

时间:2014-10-31 12:06:47

标签: ios objective-c xcode3.1

{    
    NSString *docsDir; 
    NSArray *dirPaths; 
    dirPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); 

    docsDir=[NSString stringWithFormat:@"%@",dirPaths[0]];


    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"contacts.db"]]; 

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

    const   char *dbpath = [databasePath UTF8String]; 

    if (sqlite3_open (dbpath,  &contactDB) == SQLITE_OK)   
    {
        theStatus = @"asss";

        if ([filemgr fileExistsAtPath: databasePath ] == NO) 
        { 

            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) 
            {           
                theStatus.text = @"database and table created"; 
            } 
            else {
                theStatus.text = @"Failed to open/create database"; 
            }       
        }

    }
   [filemgr release];}

}

1 个答案:

答案 0 :(得分:0)

试试这个

-(void)databasecreation{

// 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.db"]];

NSFileManager *filemgr = [NSFileManager defaultManager];

//check the database is exist
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)" UTF8String];


        if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK){
            NSLog(@"Failed to create tables");
        }
        sqlite3_close(contactDB);

    } else {
        NSLog( @"Failed to open/create database");
    }
}
}

<强>更新

这个适用于我

appdelegate.h

#import <UIKit/UIKit.h>
#import "sqlite3.h"


@interface AppDelegate : UIResponder <UIApplicationDelegate>{
    sqlite3 *contactDB;
    NSString *databasePath;
}

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic,readonly) sqlite3 *contactDB;
@property (nonatomic,retain) NSString *databasePath;

@end

appdelegate.m

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize contactDB,databasePath;
NSString *docsDir;
NSArray *dirPaths;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self databasecreation];
    return YES;
}
-(void)databasecreation{

    // 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.db"]];

    NSFileManager *filemgr = [NSFileManager defaultManager];

    //check the database is exist
    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)" UTF8String];


            if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK){
                NSLog(@"Failed to create tables");
            }
            sqlite3_close(contactDB);

        } else {
            NSLog( @"Failed to open/create database");
        }
    }
}