c++内部的sqlite3(带有TABLE及其INDEX的存储过程或复杂sql)
sqlite3 inside C++ (stored procedure or complex sql with TABLE and its INDEX)
我正在尝试在我的c++应用程序sqlite3。我已经做了:
- sqlite3 my.db
- sqlite>创建表链接(UrlAsID VARCHAR(255)主键,所有者VARCHAR(255), ......
- sqlite> CREATE INDEX linkIDs ON links(UrlAsID, creatationtime ASC);
然后我打开了一个从c++代码到数据库的连接。
在代码中我有一个Url对象。现在我要做的是:
// check if url is in index (and in table as well)
string urlID = sqlite3_exec("SELECT UrlAsID FROM linkIDs WHERE UrlAsID = " + Url.id + ";");
if (urlID.empty()) {
sqlite3_exec("INSERT INTO links VALUES (" + Url.properties + ");");
sqlite3_exec("INSERT INTO linkIDs VALUES (" + Url.id + "," + int(Url.creationTime) + ");");
} else {
sqlite3_exec("UPDATE links SET (CreationTime = " + int(Url.creationTime) + "," + ... + ") WHERE UrlAsID = " + Url.id + ";");
sqlite3_exec("UPDATE linkIDs SET (CreationTime = " + int(Url.creationTime) + ") WHERE UrlAsID = " + Url.id + ";");
}
我想创建一个存储过程或使用一个复杂的SQL语句来封装上面的逻辑。你能提供给我更精确的代码来完成这个吗?
提前感谢!
为了安全性和速度,您的语句应该包装在事务中。此外,您应该使用带参数的预处理语句,同样是为了安全性和速度(不同类型的安全性,但即使如此)。您应该使用合适的COALESCE来使用INSERT或REPLACE。所有这些都与你嵌入的语言无关,但这些链接都指向相关的语法。
SQLite不支持存储过程:http://www.sqlite.org/whentouse.html
如果SQL代码很复杂,我会尝试放入一个。SQL文件,然后加载到一个变量并执行。
SQLite不支持存储过程。你最多能做的就是使用预处理语句。您还应该使用SQLite绑定方法来设置参数,而不是使用字符串连接。阅读这里的介绍:http://sqlite.org/cintro.html
相关文章:
- 在C++中调用 MS SQL 存储过程
- C++使用存储过程返回结果
- Visual样本存储过程从C 程序执行
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- SQL Server 2016 CLR 存储过程错误:"A system assertion check has failed"
- 将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?
- 在我的代码中执行存储过程时出现问题
- 读取 Firebird 存储过程的返回值
- 在C++中通过SOCI/ODBC实现SQL Server存储过程
- 如何使用 Oracle 存储过程中C++函数
- 使用 QSqlQuery 检索 MySQL 存储过程的输出
- C++/CLI 存储过程找不到资源
- ADO 不支持存储过程中的 XML
- MSSQL服务器存储过程在从c++调用时不返回输出参数
- ODBC,SQL_SUCCESS_WITH_INFO,游标类型已更改 - 发生在具有单个 SELECT 的存储过程上
- SQL Server-使用C++ODBC调用存储过程
- 通过OCI调用Oracle存储过程,并在C++中使用out-ref游标返回结果
- 如何用ADO和c++传递null给存储过程输入参数
- 为什么我的c++扩展存储过程不写入控制台
- c++内部的sqlite3(带有TABLE及其INDEX的存储过程或复杂sql)