SQLITE检查表users是不是存在的sql语句,如果不存在则创建表users

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLITE检查表users是不是存在的sql语句,如果不存在则创建表users相关的知识,希望对你有一定的参考价值。

使用命令提示窗口利用sqlite3 数据库名.db 进入数据库
输入.schema 注意前面的点号 就可以显示数据库中的表了。
create table users (name text);
参考技术A If Exists(Select ID From SYSOBJECTS Where ID=OBJECT_ID('users')) Drop Table users; 参考技术B CREATE TABLE IF NOT EXISTS tableName(
id INTEGER NOT NULL PRIMARY KEY,
);

检查列是不是已存在,如果不存在,则在 sqlite 中更改表

【中文标题】检查列是不是已存在,如果不存在,则在 sqlite 中更改表【英文标题】:Check If column already exist and if not Alter Table in sqlite检查列是否已存在,如果不存在,则在 sqlite 中更改表 【发布时间】:2012-04-15 20:02:39 【问题描述】:

我想在我的应用中更改一个 sqlite 表。

现在,我想检查该列是否已存在于我的表中?

因此,如果不存在,我想使用 alter table syntex 添加该列。

目前我正在使用。

-(void) alterDB
    sqlite3_stmt *statement; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:DATABASE_NAME];

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    

        NSString *updateSQL = [NSString stringWithFormat: @"ALTER TABLE diagramInfo ADD COLUMN testColumn VARCHAR"];
        const char *update_stmt = [updateSQL UTF8String];
        sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL);

        if(sqlite3_step(statement)==SQLITE_DONE) 
        
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"DB altered" message:@"Success" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];    
            [alert show];
            [alert release];
            alert=nil;

        
        else 
        
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"DB Updation" message:@"DB not Altered" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];   
            [alert show];
            [alert release];
            alert=nil;
           
        // Release the compiled statement from memory
        sqlite3_finalize(statement);    
        sqlite3_close(database);
    

【问题讨论】:

【参考方案1】:

使用以下函数检查列是否存在。实际上未检查,因此您可能必须检查语法。概念就像如果您能够创建准备好的语句而不是列存在,否则不存在。

-(BOOL)checkColumnExists

    BOOL columnExists = NO;

    sqlite3_stmt *selectStmt;

    const char *sqlStatement = "select yourcolumnname from yourtable";
    if(sqlite3_prepare_v2(yourDbHandle, sqlStatement, -1, &selectStmt, NULL) == SQLITE_OK)
        columnExists = YES;

    return columnExists;

斯威夫特 3.2:

private func tableHasColumn(db: OpaquePointer, tableName: String, columnName: String) -> Bool 

        var retVal = false

        var tableColumnsQueryStatement: OpaquePointer? = nil
        if sqlite3_prepare_v2(db, "PRAGMA table_info(\(tableName));",
                            -1,
                            &tableColumnsQueryStatement,
                            nil) == SQLITE_OK 

            while (sqlite3_step(tableColumnsQueryStatement) == SQLITE_ROW) 

                let queryResultCol1 = sqlite3_column_text(tableColumnsQueryStatement, 1)
                let currentColumnName = String(cString: queryResultCol1!)

                if currentColumnName == columnName 
                    retVal = true
                    break
                
            
        

        return retVal

【讨论】:

【参考方案2】:

PRAGMA table_info(table-name);

此 Pragma 用于获取表中的列列表。

For more details, visit here

- (BOOL)checkForField

    NSString *desiredColumn = @"tblName";
    const char *sql = "PRAGMA table_info(tblTest)";
    sqlite3_stmt *stmt;

    if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK)
    
        return NO;
    

    while(sqlite3_step(stmt) == SQLITE_ROW)
    

        NSString *fieldName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];
        if([desiredColumn isEqualToString:fieldName])
            return YES;
    

    return NO;

【讨论】:

别忘了完成声明!

以上是关于SQLITE检查表users是不是存在的sql语句,如果不存在则创建表users的主要内容,如果未能解决你的问题,请参考以下文章

检查列是不是已存在,如果不存在,则在 sqlite 中更改表

带有 Sqlite 的 Android - 如何检查表是不是存在以及是不是为空

sqlite 判断表中字段是不是存在

SQL求助:想创建一个表,但在创建前先判断是不是存在。如存在就删除它,不存在就创建。

如何检查 Android SQLite 数据库中是不是存在表?

如何检查 SQL Server CE 3.5 中是不是存在表