使用 sqlite3 和 C++ 绑定和返回文本数据
Binding and returning text data with sqlite3 and C++
我正在尝试重新为我想从事的个人项目编程,但我在弄清楚 sqlite3 c/c++ API 时遇到了麻烦。 我正在修改在各种教程中找到的代码片段,并尝试让它们从数据库中返回数据和字段名称。 这是我遇到困难的代码部分:
sqlite3 *db;
sqlite3_stmt *ppStmt;
int col_num;
char *zErrMsg = 0;
const char *zSql = "SELECT ?,? FROM basic_table";
string s = "Field1";
string t = "Field2";
rc = sqlite3_prepare_v2(db,zSql,-1,&ppStmt,0);
sqlite3_bind_text(ppStmt,1,s.c_str(),s.length(),SQLITE_TRANSIENT);
sqlite3_bind_text(ppStmt,2,t.c_str(),t.length(),SQLITE_TRANSIENT);
if(rc)
{
cerr << "SQL error: " << sqlite3_errmsg(db) << endl;
}
else
{
col_num = sqlite3_column_count(ppStmt);
do
{
rc = sqlite3_step(ppStmt);
switch(rc)
{
case SQLITE_DONE:
break;
case SQLITE_ROW:
for( int i=0; i<col_num; i++)
{
cout << sqlite3_column_name(ppStmt, i) << " " <<
sqlite3_column_text(ppStmt,i) << endl;
}
break;
default:
cerr << "Inside error " << sqlite3_errmsg(db) << endl;
break;
}
} while( rc==SQLITE_ROW );
sqlite3_finalize(ppStmt);
column_name返回正确的值,但数据只是返回一个问号。 我可以通过使用回调函数调用sqlite3_exec来使代码工作,但 sqlite3 的文档建议使用 sqlite3_prepare_v2、sqlite3_bind、sqlite3_step 和 sqlite3_finalize 而不是此方法,所以我只是想看看我是否可以让该方法工作。 我犯了一个简单的错误吗? 任何建议将不胜感激。
这些列的名称是 ?
,因为它们在查询中就是这样写的。
这些列的值是Field1
和Field2
的,因为您告诉数据库您希望这些字符串值由 SELECT 返回。
数据库按设计工作。
参数只能用于替换表达式的值;不能使用它们来替换列/表名等标识符。您必须直接在 SQL 语句中写入列名:
const char *zSql = "SELECT Field1, Field2 FROM basic_table";
相关文章:
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中将十六进制字符串转换为文本数据
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 将文本文件解析为树状数据结构
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 如何读取文本文件中的数据并为每列 c++ 分配数组
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 用于分解大量文本数据的算法
- 使用 sqlite3 和 C++ 绑定和返回文本数据
- 接收文本数据从远程安卓蓝牙到Windows xp PC
- 视觉读取列文本数据并在C++中放入 3D 数组
- 是否有任何中间件/库可以将二进制或文本数据从64位转换为32位
- 使用C++或任何windows脚本语言格式化文本数据
- C++在 ActiveDirectory 和 Sqlite3 之间复制文本数据时出现问题
- 需要帮助加载简单的文本数据与c++
- 如何在现代c++中解析文本数据文件
- Qt模型/视图委托:如何简单地转换文本数据
- c++ / ATL.连接二进制和文本数据的最佳实践