SQLite绑定数值数据类型

时间:2014-02-11 21:15:20

标签: c++ visual-studio-2010 sqlite

我正在尝试更新一些代码,我必须使用Binding而不是本机查询。

我正在使用ETL模型加载此数据。

这一切都始于我创建一个包含所有列定义为Text的表。

Create Table TableA ( Col1 Text, Col2 Text);

然后我使用本机查询填充表格,如

INSERT INTO TABLEA ('A', '2');
INSERT INTO TABLEA ('B', 'Bad_VALUE_Not_INT');

然后我创建一个真实的数据表

 Create Table RealTableA ( Col1 Text, Col2 Integer);

然后将值插入实际表中并使用错误的数据类型删除那些here

INSERT INTO RealTableA SELECT * FROM TABLEA;

DELETE FROM RealTableA WHERE typeof(col2) != 'integer'

当我编写查询并以原生方式提交查询时,这非常有用。但我现在想要将变量绑定到一个语句而不是使用本地查询,如解释here

因此,我将代码更改为使用sqlite3_bind_text col2

现在,当我使用'text'进行查询时,SQLite认为typeof(col2)中的每个值都是sqlite3_bind_value,这样就会删除一切

我觉得这很奇怪,因为类型亲和力的例子SQLite有prepared_statement

如何在不重写初始加载后重写所有ETL查询的情况下解决此问题?

我发现了一个名为numeric的绑定函数,它的定义听起来像是将SQLite3_value*绑定到它的值视为我想要的。问题是需要一个{{1}}而且我不能为我的生活找出如何将文件中的文本值转换成文件值。

想法?我采用这种方法了吗?

同样为什么当我绑定值时,它们会得到一个很难的“TEXT”类型,但当我插入“TEXT”列时,它允许其他类型的摆动空间?

注意:我正在使用Visual Studio 2010的C / C ++接口,而我正在使用SQLite的3.7.13版本。

1 个答案:

答案 0 :(得分:1)

sqlite3_bind_value仅适用于您从SQLite获得的值,仅使用用户定义函数的参数。

要绑定除文字以外的其他类型,请使用相应的sqlite3_bind_xxx function,例如sqlite3_bind_int