我正在开始一个必须将数据从XML
转换为db
的新项目。 XMLs
具有自己的格式,不能用于填充db
。
我选择使用sqlite
,因为它是一个嵌入式平台,我需要一个轻量级的库。
我正在努力使用列类型。 我写了下面的sql:
static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i=0; i<argc; i++){ printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("n"); return 0; } static bool exec_sql (sqlite3 *db, char *sql, bool use_callback) { int rc; char *zErrMsg = 0; // Execute SQL statement if (use_callback == true) { rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); } else { rc = sqlite3_exec(db, sql, NULL, 0, &zErrMsg); } if( rc != SQLITE_OK ) { fprintf(stderr, "SQL: %s FAIL!!!nError: %sn", sql, zErrMsg); sqlite3_free(zErrMsg); return false; } return true; } int main ( int argc, char *argv[] ) { xmlDoc *doc; xmlNode *root_element; FILE *fw; int i, srcidx, next_start; sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; rc = sqlite3_open("Configuration.db", &db); if( rc ) { XML2DB_DEBUG_ERR("Can't open database: %sn", sqlite3_errmsg(db)); } else { XML2DB_DEBUG_INFO("Opened database successfullyn"); } sql = "CREATE TABLE Table2(" "ID INT NOT NULL PRIMARY KEY," "TABLE_1_ID INT FOREGN KEY REFERENCES Table1(ID) NOT NULL ," "COLUMN_1 INT[512] NOT NULL," "COLUMN_2 TEXT NOT NULL," "COLUMN_3 BOOLEAN DEFAULT FALSE);"; // Execute SQL statement exec_sql(db, sql, false); sql = "INSERT INTO Models (ID, TABLE_1_ID, COLUMN_1, COLUMN_2, COLUMN_3) " "VALUES (1, 1, '{1,2,3,4,5}', 'blabla', TRUE); "; // Execute SQL statement exec_sql(db, sql,true); sql = "SELECT * FROM Table2;"; // Execute SQL statement exec_sql(db, sql, true); sqlite3_close(db); return 0; }
该代码运行良好, 但现在我发现sqlite3
不支持boolean
和array
数据类型。
我写道,“它工作得很好”,因为SELECT
和DBVisualizer
可以显示数据并且不会给我错误。
所以,问题是:
SQLite使用动态类型 。
要检查数据类型,请使用CHECK约束 :
需要了解更多c/c++开发分享sqlite3列类型,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
CREATE TABLE Table2( ID INTEGER PRIMARY KEY, TABLE_1_ID INT FOREIGN KEY REFERENCES Table1(ID) NOT NULL, COLUMN_1 INT[512] NOT NULL COLUMN_2 TEXT NOT NULL CHECK (typeof(COLUMN_2) = 'text'), COLUMN_3 BOOLEAN DEFAULT 0 CHECK (COLUMN_3 IN (0, 1)) );
以上就是c/c++开发分享sqlite3列类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980597.html