使用.sql文件和FMDB创建数据库结构

时间:2013-09-09 07:03:53

标签: objective-c ios6 sqlite fmdb

我有一个.sql文件,我从 MySQL 导出。我正在尝试使用FMDB framework将该表格结构添加到 SQLite 中,但它未执行且始终 return false 。结构如下:

CREATE TABLE IF NOT EXISTS `admin` (
`admin_id` tinyint(4) NOT NULL AUTO_INCREMENT,
`first_name` varchar(30) NOT NULL,
`last_name` varchar(30) NOT NULL,
`email` varchar(30) NOT NULL,
`password` varchar(30) NOT NULL,
`date` datetime DEFAULT NULL,
`status` tinyint(2) NOT NULL,
PRIMARY KEY (`admin_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

您正尝试在另一个数据库中使用MySQL扩展。

您至少应将admin_id类型替换为INTEGER,将AUTO_INCREMENT替换为AUTOINCREMENT,然后移除ENGINEDEFAULT CHARSET设置

答案 1 :(得分:1)

SQL不符合SQLite的CREATE TABLE语法documented online。如果您查看FMDB lastErrorMessage方法(类似于sqlite3_errmsg),它将报告有关错误的详细信息。

值得注意的是,AUTO_INCREMENT语法不正确。即使您解决了这个问题,也无法识别ENGINEDEFAULT CHARSET选项。至少,你必须尝试类似的东西:

NSString *sql = @"CREATE TABLE IF NOT EXISTS `admin` ("
                "`admin_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
                "`first_name` varchar(30) NOT NULL,"
                "`last_name` varchar(30) NOT NULL,"
                "`email` varchar(30) NOT NULL,"
                "`password` varchar(30) NOT NULL,"
                "`date` datetime DEFAULT NULL,"
                "`status` tinyint(2) NOT NULL"
                ")";

或者,鉴于SQLite不会理解其中一些数据类型(虽然使用SQLite的“动态类型系统”,但这并不重要),您可能希望将varchar(30)替换为TEXTtinyint(2) INTEGERdatetime以及您计划存储日期的任何格式。请参阅Data Types讨论。

答案 2 :(得分:-1)

  • (IBAction)findContact:(UIButton *)sender {

    const char * dbPath = [databasePath UTF8String]; sqlite3_stmt * statement;

    if(sqlite3_open(dbPath,& contactDB)== SQLITE_OK){     NSString * querySQL = [NSString stringWithFormat:@" SELECT ADDRESS,PHONE FROM CONTACTS WHERE NAME = \"%@ \"",_ name.text];     const char * query_stmt = [querySQL UTF8String];     if(sqlite3_prepare_v2(contactDB,query_stmt,-1,& statement,NULL)== SQLITE_OK)     {

        if (sqlite3_step(statement)== SQLITE_ROW) {
    
            NSString *addressField = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
            _address.text = addressField;
            NSString *phoneField = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
            _phoneNo.text = phoneField;
            _status.text = @"Match Found";
        }else{
            _status.text = @"Match not found";
            _address.text = @"";
            _phoneNo.text = @"";
        }
        sqlite3_finalize(statement);
    }
    sqlite3_close(contactDB);
    }
    

}