MySQL应用

来源:互联网 发布:app软件大全 编辑:程序博客网 时间:2024/04/30 12:24

1. mysql存储过程示例

DROP PROCEDURE IF EXISTS P_QueryRecord;
CREATE PROCEDURE P_QueryRecord(Para_Query VARCHAR(16),Para_Condition INTEGER)
BEGIN
DECLARE query VARCHAR(36);
SET query := '';
SET query := CONCAT(query,Para_Query,'%');
IF Para_Condition = 0 THEN
SELECT * FROM T_Record WHERE name LIKE query;
ELSEIF Para_Condition = 1 THEN
SELECT * FROM T_Record WHERE phone LIKE query;
ELSEIF Para_Condition = 2 THEN
SELECT * FROM T_Record WHERE room_no LIKE query;
ELSEIF Para_Condition = 3 THEN
SELECT * FROM T_Record WHERE address LIKE query;
ELSE
SELECT * FROM T_Record WHERE 1=2;
END IF;
END;

注意事项:赋值语句:=;传参数的方式;END IF结束后要加;号.

2. 删除索引存储过程

DROP PROCEDURE IF EXISTS P_DelIndex;

CREATE PROCEDURE P_DelIndex(IN para_table_name VARCHAR(200), IN para_index_name VARCHAR(200))
BEGIN
  DECLARE str VARCHAR(250);
  SET @str=CONCAT('DROP INDEX ',para_index_name,' ON ',para_table_name);
  SELECT COUNT(*) INTO @cnt FROM information_schema.statistics WHERE TABLE_NAME=para_table_name AND INDEX_NAME=para_index_name;
  IF @cnt >0 THEN 
        PREPARE stmt FROM @str;
        EXECUTE stmt ;
END IF;
END;

3. MySQL Connectors C++使用注意事项

PreparedStatement对象通过传入参数读取数据有问题,第二次调用就报错,读取数据集时用Statement代替,外部传入参数用其提供的escapeString转换即可.

OpenMySql();
string format = "CALL P_QueryRecord('%s',%d)";
string param1 = m_pMySqlConnection->escapeString(query);
char sql[128] = {0};
sprintf_s(sql,sizeof(sql),format.c_str(),param1.c_str(),condition);
auto_ptr<Statement>pState(m_pMySqlConnection->createStatement());  
auto_ptr<ResultSet>pSet;
pState->execute(sql);

do
{
string col_value = "";
pSet.reset(pState->getResultSet());
while(pSet->next())
{
string sValue = pSet->getString("name");
}
}while(pState->getMoreResults());



0 0
原创粉丝点击