0
我目前有一个表,我可以从中提取数据。我想要做的是检查该表是否已经存在于该包中,如果不存在,我想创建该表并将其保存到包中(这意味着该路径将位于主包中)。我想要在setInput方法的顶部检查和创建数据库。我一直在搜索类似的东西,但我还没有提出任何事情。任何帮助非常感谢。这里是我的代码:检查一个表是否存在,如果它不存在,创建它... iOS/SQLite
-(IBAction)setInput:(id)sender
{
NSString *strStoreNumber;
NSString *strRegNumber;
strStoreNumber = StoreNumber.text;
strRegNumber = RegNumber.text;
lblStoreNumber.text = strStoreNumber;
lblRegNumber.text = strRegNumber;
NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
NSLog(@"Opened sqlite database at %@", databasePath);
sqlite3_exec(database, "CREATE TABLE IF NOT EXISTS tblStore (ID INTEGER PRIMARY KEY AUTOINCREMENT, Message TEXT)", NULL, NULL, NULL);
//...stuff
}
else
{
NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database));
sqlite3_close (database);
}
//
NSString *querystring;
// create your statement
querystring = [NSString stringWithFormat:@"SELECT strStore, strReg FROM tblStore WHERE strStore = %@ AND strReg = %@;", strStoreNumber, strRegNumber];
const char *sql = [querystring UTF8String];
NSString *szStore = nil;
NSString *szReg = nil;
sqlite3_stmt *statement = nil;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK) //queryString = Statement
{
NSLog(@"sql problem occured with: %s", sql);
NSLog(@"%s", sqlite3_errmsg(database));
}
else
{
// you could handle multiple rows here
while (sqlite3_step(statement) == SQLITE_ROW)
{
szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)];
szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)];
}
}
sqlite3_finalize(statement);
lblStoreNumber.text = szStore;
lblRegNumber.text = szReg;
//
}
我还是很新到iOS和SQLite,所以如果我没有提供我想要做的,让我知道足够准确的描述,我会尽力更具体。谢谢!
我在sqlite3_open方法下编辑了我的代码,并为表创建添加了类似的逻辑。我将我的现有表从我的项目中删除(通过Finder),当我尝试运行该应用程序时,出现错误:“error:/ Users/Matt ****/Documents/iOS Projects/CCoDBTry/CCoDBTry/tblStore。 sqlite:没有这样的文件或目录“。你能否提供更多的见解? – Skizz
我想我也没有关注如何让它不存在。我认为从Finder的项目位置移除它会做到这一点,但是当我这样做时我甚至无法编译。有什么想法吗? – Skizz
好像你不仅删除了表格,而且删除了整个数据库。您可以尝试恢复您在Finder中删除的数据库文件,然后重试。如果你只想删除那个特定的表,你可以使用'DROP TABLE tableName'。另外,请查看[本博客](http://www.icodeblog.com/2008/08/19/iphone-programming-tutorial-creating-a-todo-list-using-sqlite-part-1/#init- D b)。 – matsr