Mysql++學習(四)------模板查詢
MySQL++提供的另外一個強大的功能就是模板查詢,它提供像c語言中printf類似的機制:你提供給MySQL++一個包含固定串和變數佔位符的查詢字串,之後可以替換這些佔位符的變數.
下面例子顯示瞭如何使用這一特性
#include <iostream>
#include <mysql++.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
mysqlpp::Connection conn(false);
//connect to the database
if(conn.connect("mysql_cpp_data", "127.0.0.1", "comoon", ""))
{
//build a template query
mysqlpp::Query query = conn.query("select * from stock where item = %0q");
query.parse();
//get query result in a storeResult
mysqlpp::StoreQueryResult res = query.store("Hotdog Buns");
if(res)
{
cout << res[0]["item"] << endl;
cout << res[0]["num"] << endl;
cout << res[0]["price"] << endl;
}
else
{
perror("Failed to get data!");
exit(EXIT_FAILURE);
}
query.reset(); //reset previous template query data
query << "update stock set item = %0q where item = %1q";
query.parse();
mysqlpp::SimpleResult res1 = query.execute("abc", "Hotdog Buns");
}
else
{
perror("Connect Failed");
exit(EXIT_FAILURE);
}
return 0;
}
query.parse()之前的程式碼用於設定模板,parse()呼叫用於使其生效,自生效開始,你可以通過呼叫查詢的多個函式來多次使用這個模板
建立一個模板查詢
建立一個模板查詢,首先你得把內容插入到查詢物件中,用數字來表示要替換的佔位符,然後呼叫parse() 函式,告訴查詢物件,這是一個查詢模板,需要被解析
query << "select (%2:field1, %3:field2) from stock where %1:wheref = %0q:what";
query.parse();
佔位符的形式為:
%###(modifier)(:name)(:)
“###” 為最大三位的數字,表示給SQLQueryParms物件的引數序列,從0開始
modifier可以是下面任意一個:
%列印一個實際的“%”符號
“”不管什麼,都不要引號或者忽略
q將被用單引號括起來,不被作為關鍵字解釋
Q將被用引號括起來,不過不會避免關鍵字檢測
設定引數
在查詢的時候,你需要指定引數.“parm0”對應於第一個引數,依次類推.
例如:
StoreQueryResult res = query.store("Dinner Rolls", "item", "item", "price")
上面的查詢將會被解析為:
select (item, price) from stock where item = "Dinner Rolls"
預設引數
模板查詢機制,允許你設定預設引數.你只需要給Query::template_defaults
array對應元素賦值就可以了
query.template_defaults[1] = "item";
query.template_defaults["wheref"] = "item";
這種預設引數機制類似C++的函式預設引數.