使用 .sql 文件和 FMDB 创建数据库结构
Posted
技术标签:
【中文标题】使用 .sql 文件和 FMDB 创建数据库结构【英文标题】:create database structure using .sql file and FMDB 【发布时间】:2013-09-09 07:03:53 【问题描述】:我有一个从 MySQL 导出的 .sql 文件。我正在尝试使用 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;
我在这里做错了什么?
【问题讨论】:
你可能需要一些工具。试试sqlitemanager.org 【参考方案1】:该 SQL 不符合 SQLite 的 CREATE TABLE
语法 documented online。如果您查看 FMDB lastErrorMessage
方法(类似于 sqlite3_errmsg
),它将报告有关错误的详细信息。
值得注意的是,AUTO_INCREMENT
语法不正确。即使您解决了这个问题,ENGINE
和 DEFAULT 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)
替换为 TEXT
和 @987654334 @ 与 INTEGER
和 datetime
与您计划存储日期的任何格式。请参阅Data Types 讨论。
【讨论】:
【参考方案2】:您正在尝试在另一个数据库中使用 mysql 扩展。
您至少应该将admin_id
类型替换为INTEGER
,将AUTO_INCREMENT
替换为AUTOINCREMENT
,并删除ENGINE
和DEFAULT CHARSET
设置。
【讨论】:
【参考方案3】:(IBAction)findContact:(UIButton *)sender
const char *dbPath = [databasePath UTF8String]; sqlite3_stmt *语句;
if (sqlite3_open(dbPath, &contactDB)== SQLITE_OK) NSString *querySQL = [NSString stringWithFormat:@"SELECT ADDRESS,PHONE FROM 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);
【讨论】:
以上是关于使用 .sql 文件和 FMDB 创建数据库结构的主要内容,如果未能解决你的问题,请参考以下文章