我有一个.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;
我在这里做错了什么?
答案 0 :(得分:1)
您正尝试在另一个数据库中使用MySQL扩展。
您至少应将admin_id
类型替换为INTEGER
,将AUTO_INCREMENT
替换为AUTOINCREMENT
,然后移除ENGINE
和DEFAULT CHARSET
设置
答案 1 :(得分: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
和tinyint(2)
INTEGER
和datetime
以及您计划存储日期的任何格式。请参阅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);
}
}