sqlite向表格中插入新字段

5 篇文章 0 订阅

先检查是字段否存已经在,不存在再执行插入。

代码:

/**
 * @brief 向sqlite数据表格中加入新字段(列)
 * @param pSqlite3DB sqlite数据库对象
 * @param pszTable 目标表格名字
 * @param pszColumn 目标列名字
 * @param pszType  目标列的类型
 * @return 执行插入成功或目标表格中指定字段已经存在,则返回true,否则返回false
 * @code
 *   项task表格中加入整数列output。
 *   assert( AddTableColumn(pDB, "Task", "output", "integer") ); 
 *
 */
bool AddTableColumn( 
    sqlite3* pSqlite3DB, const char* pszTable,
    const char* pszColumn, const char* pszType  )
{
        assert(pSqlite3DB);
        assert(pszTable);
        assert(pszColumn);
        assert(pszType);
        if( !pSqlite3DB || !pszTable || !pszColumn || !pszType)
        {
            Log( "Add Table new Column failed: some of param are null" );
            return false;
        }
	char szSql[256] = {0};
	//检查表格中是否存在指定字段
	sprintf( szSql,"select * from sqlite_master where name = '%s' and sql like '%%%s%%';",pszTable, pszColumn );

	sqlite3_stmt *pStmt = NULL;
	sqlite3_prepare( pSqlite3DB, szSql, -1, &pStmt, 0);
	if( SQLITE_ROW == sqlite3_step(pStmt) )
	{
                // 已经存在,认为是成功
		sqlite3_finalize(pStmt);
		return true;
	}
	sqlite3_finalize(pStmt);
	// 不存在尝试加入
	sprintf_s( szSql, "alter table %s add %s %s null",pszTable,pszColumn,pszType );
	int nResult = sqlite3_exec(pSqlite3DB, szSql ,NULL,NULL,NULL);
	
	if (nResult != SQLITE_OK)
	{ // 加入失败
                Log("alter failed when add new column:%s", sqlite3_errstr(nResult) );
		return false;
	}
	return true;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值