K,K線,Candle蠟燭圖。
T,技術分析,工具平臺
L,公式Language語言使用c++14,Lite小巧簡易。
專案倉庫:https://github.com/bbqz007/KTL
國內倉庫:https://gitee.com/bbqz007/KTL
CoreAnimation for Windows: https://github.com/bbqz007/xw
zqt5 一個超簡單的Qt5視窗語法: https://github.com/bbqz007/zhelper-qt5Widgets
zqlite3 一個超簡單的流式語法,整合封裝Sqlite3 capis 與 SQL 跟 c/c++程式繫結:https://github.com/bbqz007/sqlite3zz
KTL提供一個c++14編譯平臺,使用者可以使用c++14編輯自定義技術指標等。
使用者可以使用crt常用函式,c++標準庫容器以及演算法,c++14特性程式設計。
本期更新內容
新增方差等統計函式。
支援sqlite3 capi。
全新sqlite3zz流式語法,超簡單使用sqlite3 capi,輕鬆繫結SQL跟c/c++程式
本平臺在本期主要新增對sqlite3支援。
使用者可以使用sqlite3存入結果,載入資料,分析資料等。
為方便使用sqlite3 capi,本平臺開發了一個全新的sqlite3zz流式語法。
也許你是SQL高手,但是sqlite3 capi太繁瑣,無法集中業務邏輯。
也許你輕舟熟駕CREATE, INSERT, UPDATE, SELECT,但是妨礙於不知如何整合在c/c++程式中執行,並繫結引數或結果。
也許太多問號要繫結,SQL語句是否寫對了問號數量。
也許你忘了繫結的起始是0還是1,查文件除錯太不想。
也許..., 還有一千零一個理由讓你覺得麻煩。
現在本平臺提供一個全新的sqlite3zz流式語法。
1. 對於基本的SQL語法應用,你甚至不用寫任何SQL語句,也不必要認識SQL語法。
2. 簡化批量插入更新流程。
3. 完全c++程式碼定義表結構。
4. 輸出流(out << val)繫結引數變數。
5. 輸入流(in >> val)輸出結果到變數。
6. 自動生成SQL語句。
7. 編譯期靜態檢測型別繫結。
示例1,c++程式碼定義表結構。
1 auto tbl2 = make_zqlite3_table( 2 select_para<int>("1"), 3 select_para<string>("2"), 4 select_para<double>("dbl"), 5 select_para<vector<char>>("blob"), 6 index_para("1", "2"), 7 index_para("1", "2")); 8 9
示例2,自動生成SQL語句
1 cout << tbl2.create_table_statment("abc") << endl; 2 cout << tbl2.insert_statment("abc") << endl; 3 cout << tbl2.update_statment("abc") << endl; 4 cout << tbl2.select_statment("abc") << endl;
1 CREATE TABLE IF NOT EXISTS `abc` (`1` INTEGER, `2` VARCHAR, `dbl` REAL, `blob` BLOB, UNIQUE (`1` DESC, `2` DESC), UNIQUE (`1` DESC, `2` DESC)); 2 INSERT INTO `abc` (`1`, `2`, `dbl`, `blob`) VALUES (?,?,?,?); 3 UPDATE `abc` SET `1` = ?, `2` = ?, `dbl` = ?, `blob` = ?; 4 SELECT `1`, `2`, `dbl`, `blob` FROM `abc` ;
示例3,輸出流繫結引數變數,批量插入更新。
1 tbl2.open_db("db"); 2 tbl2.create_table("abc"); 3 { 4 auto oz = tbl2.insert_into("abc"); 5 auto ou = tbl2.update_where("abc", "where `1`=? AND `2` = ?"); 6 oz.begin_trans(); 7 oz(1, "2", 4., {0, 0}); 8 oz << 2 << "e" << 1. << make_pair((char*)NULL, 0) << ios_base::end; 9 if (oz.ignored()) 10 ou << 2 << "e" << 1. << make_pair((char*)NULL, 0) << where_para<int>(2) << where_para<string>("e") << ios_base::end; 11 oz.commit_trans(); 12 }
示例4,輸入流查詢count(0)輸入到變數。
1 auto cnttbl = make_zqlite3_table(select_para<int>("count(0)").expr()); 2 cnttbl.open_db("db"); 3 { 4 //// select statment would not lock the database until finalized. 5 auto iz6 = cnttbl.select_from("abc"); 6 int cnt = 0; 7 iz6 >> ios_base::beg >> cnt >> ios_base::end; 8 cout << cnt << endl; 9 }
對於上面4個示例,涉及create, insert, update, select的基本使用,完全可以不與SQL語法還有sqltie3 capi打交道。
示例5,輸入流查詢內聯。
1 auto join = make_zqlite3_table( 2 select_para<int>("a.`1`").expr(), 3 select_para<int>("b.`double`").expr()); 4 5 join.open_db("db"); 6 { 7 auto ij = join.select_from2("abc a, table1 b limit 1"); 8 auto row = join.create_row(); 9 ij >> ios_base::beg; 10 for (; !ij.eof(); ij >> ios_base::beg) 11 { 12 ij >> std::get<0>(row) 13 >> std::get<1>(row) 14 >> ios_base::end; 16 cout << std::get<0>(row) << ", " 17 << std::get<1>(row) << endl; 18 } 19 }
下期更新更加精彩。