SQLite Blob 插入 C++

2023-11-23

在访问了数十个包含 SQLite 信息的网站后,我仍然找不到解决方案来修复绑定 blob 时的错误。这是表减角:

CREATE TABLE ONE ( 
ID    INTEGER     PRIMARY KEY AUTOINCREMENT
                  NOT NULL,
NAME  CHAR( 50 )  NOT NULL,
LABEL CHAR( 50 ),
GRP   CHAR( 50 ),
FILE  BLOB 
);

这是插入代码:

int InsertFile(string name)
{
const char* dbname = name.c_str();
sqlite3 *database;
int rc = sqlite3_open(dbname, &database);
char *zErrMsg = 0;
unsigned char *buffer = (unsigned char*) malloc(sizeof(char)*MAX);

ifstream file;
file.open("Sql.pdf", ios::in|ios::binary);

    if ( ! file )
{
        cout << "An error occurred opening the file" << endl;
}

int count = 0;

const void* fileptr = NULL;


fileptr = buffer;

while(file.good())
{
    char c=file.get();
    buffer[count]=c;
    count++;
}
file.close();


sqlite3_stmt *stmt = NULL;

char* statement = "INSERT INTO ONE(     ID,    NAME,    LABEL,    GRP,    FILE ) VALUES (     NULL,    'fedfsdfss',    NULL,    NULL,  ?);";

rc = sqlite3_prepare_v2(database, statement, 0, &stmt, NULL);


rc = sqlite3_bind_blob(stmt, 1, fileptr, sizeof(char)*count, SQLITE_TRANSIENT);


const char* result = sqlite3_errmsg(database);


rc = sqlite3_step(stmt);

result = sqlite3_errmsg(database);

sqlite3_close(database);


free(buffer);

fileptr=NULL;

return 0;

} 编辑:粘贴完整功能,我尝试插入的字符量约为 350K。

binb_blob 的结果始终为 21,错误代码不包含任何内容。缓冲区包含二进制文件数据,该数据很可能不会太大,因此会出现错误代码。任何提示将不胜感激。


您的代码有太多错误无法计数。

尝试这样的事情:

int InsertFile(const string& db_name)
{
    ifstream file("Sql.pdf", ios::in | ios::binary);
    if (!file) {
        cerr << "An error occurred opening the file\n";
        return 12345;
    }
    file.seekg(0, ifstream::end);
    streampos size = file.tellg();
    file.seekg(0);

    char* buffer = new char[size];
    file.read(buffer, size);

    sqlite3 *db = NULL;
    int rc = sqlite3_open_v2(db_name.c_str(), &db, SQLITE_OPEN_READWRITE, NULL);
    if (rc != SQLITE_OK) {
        cerr << "db open failed: " << sqlite3_errmsg(db) << endl;
    } else {
        sqlite3_stmt *stmt = NULL;
        rc = sqlite3_prepare_v2(db,
                                "INSERT INTO ONE(ID, NAME, LABEL, GRP, FILE)"
                                " VALUES(NULL, 'fedfsdfss', NULL, NULL, ?)",
                                -1, &stmt, NULL);
        if (rc != SQLITE_OK) {
            cerr << "prepare failed: " << sqlite3_errmsg(db) << endl;
        } else {
            // SQLITE_STATIC because the statement is finalized
            // before the buffer is freed:
            rc = sqlite3_bind_blob(stmt, 1, buffer, size, SQLITE_STATIC);
            if (rc != SQLITE_OK) {
                cerr << "bind failed: " << sqlite3_errmsg(db) << endl;
            } else {
                rc = sqlite3_step(stmt);
                if (rc != SQLITE_DONE)
                    cerr << "execution failed: " << sqlite3_errmsg(db) << endl;
            }
        }
        sqlite3_finalize(stmt);
    }
    sqlite3_close(db);

    delete[] buffer;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite Blob 插入 C++ 的相关文章

随机推荐

  • Google Apps 脚本使用replaceText()使文本成为可点击的URL

    我有这段代码可以打开文件并使用replaceText 替换字符串 var url http www test com var doc DocumentApp openById file getId doc replaceText lt
  • JQuery UI 对话框速度慢

    我最近遇到了一点痛苦 我一直在使用 JQuery 对话框在 Web 应用程序中显示一些配置屏幕 没什么特别的 然而 我有一些边缘情况 其中此配置表单将显示一些 11000 个选项的下拉列表 躲避烂番茄 不用说 它很慢 JQuery 对话框最
  • 使用初始值设定项列表初始化成员数组的正确方法是什么?

    我有一个struct它包含一个数组 我想将一个初始值设定项列表传递给该结构的构造函数以转发到该数组 为了说明这一点 我尝试了 include
  • except 与 Distinct 有类似的效果吗?

    我刚刚发现Except 将从第一个列表中删除第二个列表中的所有元素 但它还具有使返回结果中的所有元素不同的效果 我正在使用的简单方法是Where v gt secondList Contains v 谁能向我解释为什么会出现这种行为 如果可
  • Hibernate 批量插入如何工作?

    有人可以解释一下怎么做吗 hibernate jdbc batch size 1000 and if i 100 0 i gt 0 session flush session clear 一起工作吗 休眠属性hibernate jdbc b
  • 将包含美元符号的字符串传递给 -Replace Variable

    我正在尝试使用 powershell 替换 config 文件中的句子 c Web config c Web config replace BASE PATH Test bin Test TYPE WebTest dll c program
  • 如何使用react-router-dom创建受保护的路由?

    如何创建受保护的路由react router dom并将响应存储在 localStorage 中 以便用户下次尝试打开时可以再次查看其详细信息 登录后 他们应该重定向到仪表板页面 所有功能都添加到 ContextApi 中 代码沙箱链接 C
  • SqlParameter名称前是否需要加@?

    在我们的一个应用程序中 参数以这种方式传递给存储过程 Dim parm As New SqlParameter searchText SqlDbType VarChar parm Direction ParameterDirection I
  • setSize 不影响按钮的大小

    我有一个示例代码 import java awt import javax swing import javax swing border BevelBorder public class AWT extends JFrame public
  • 按固定宽度将字符串拆分为子字符串

    我有数据看起来像这样 1 TESTAAA SERNUM A DESCRIPTION 2 TESTBBB ANOTHR ANOTHER DESCRIPTION 3 TESTXXX BLAHBL 我的问题是 将这些数据分割成更小的子字符串的最有
  • 解析 JavaScript 中的相对 URL

    我正在构建一个 JS 库 它需要查看 form action 和 a href 值并将它们解析为绝对 URL 例如 我在 http a b c d p q 上遇到 href 值 g 假设没有 元素 生成的绝对值将是 http a b g 有
  • Postman 向 Binance API 发出 GET 请求

    我正在尝试发送GET向 Binance 的 API 请求 但我不知道该怎么做 这是文档页面 https github com binance exchange binance official api docs blob master re
  • 如何在IOS SDK 8.0中获取当前位置经纬度

    如何获取当前位置的纬度和经度 我已经尝试过这个 使用 Xcode 6 01 和 IOS SDK 8 0 CLLocationCoordinate2D getLocation locationManager CLLocationManager
  • getResultSet()“每个结果应该只调用一次”

    根据文档 for getResultSet in java sql Statement 它说 以 ResultSet 对象的形式检索当前结果 这个方法应该 每个结果仅被调用一次 使用一些测试代码 我跑了executeQuery 并多次致电g
  • 我的业务逻辑应该如何与数据层交互?

    所以我正在起草我的计划草案 这是我的计划 GUI Business Logic Data 您应该能够更换GUI or the Data层没有问题 每一层都在观察自己 所以GUI将从中调用方法Business logic这些方法将始终返回状态
  • 如何让单个组件同时支持VCL和FMX?

    我有一个TComponent它控制一些 UI 该组件旨在通过使用条件来支持 VCL 和 Firemonkey 此类条件指示我的组件是接受 VCL 控件还是 FMX 控件 目前预计该条件是在应用程序级别定义的 以指示运行时的组件是否要管理 V
  • 为什么在解析二进制数据时memcpy比reinterpret_cast慢?

    TLDR 我忘记启用编译器优化 启用优化后 性能 几乎 相同 原帖 当从二进制数据读取整数时 我注意到 memcpy 比转换解决方案慢 版本 1 reinterpret cast 由于潜在的对齐问题而有臭味 但也更快 int get int
  • 屏幕旋转上的片段

    我已将 viewpager 添加到包含两个页面的活动中 在活动的 onCreate 中 我将片段添加到fragmentAdapter public void onCreate Bundle savedInstanceState Fragme
  • 使用 ThreadPoolExecutor 的活动任务数

    我正在使用 ThreadPoolExecutor 在 Java 应用程序中执行任务 我有一个要求 我想获取执行程序队列中任何时间点队列中活动任务的数量 我抬头看了看javadoc对于ThreadPoolExecutor 找到了两个相关的方法
  • SQLite Blob 插入 C++

    在访问了数十个包含 SQLite 信息的网站后 我仍然找不到解决方案来修复绑定 blob 时的错误 这是表减角 CREATE TABLE ONE ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL N