我開始一個新項目,必須將數據從XML
轉換爲db
。 XMLs
有其自己的格式,不能用於填寫db
。sqlite3列類型
我選擇使用sqlite
,因爲它是一個嵌入式平臺,我需要一個輕量級庫。
我正在努力與列類型。 我寫了下面的SQL:
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", 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: %s\n", 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: %s\n", sqlite3_errmsg(db));
}
else
{
XML2DB_DEBUG_INFO("Opened database successfully\n");
}
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
能夠顯示數據,不給我的錯誤。
所以,問題是:
- 爲什麼SQL的執行以及即使數據類型,不支持並插入值不正確?
- *是否有一個功能可以啓用,以始終檢查插入的值是否格式良好? *
你看了[文件](http://www.sqlite.org/datatype3.html)您所選擇的DB的? –
@CL。是的,我做到了。在哪裏解釋說我可以用「{1,2,3,4,5}」數據設置一個clomun INT? – LPs
「在SQLite中,值的數據類型與值本身相關聯,而不與其容器相關聯。」 –