在flutter和dart中,如何查询blob列?

问题描述 投票:0回答:1

sqlite 数据库表创建为:

        CREATE TABLE Books (id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT, hash blob);
        CREATE UNIQUE INDEX path_uni ON Books(path);
        CREATE UNIQUE INDEX hash_uni ON Books(hash);

将一些数据插入数据库后,我尝试查询“哈希”列,如下所示:

final int id = 1;
database?.query('Books', where: 'id= ?', whereArgs: [id]).then(
        (rows) {

      if (rows.isEmpty) {
          // do something...
     
      } else {
        final hash = rows.first['hash'] as Uint8List;
        print('hash: $hash'); // the printed hash is correct, 16 bytes array
        
        // use the "hash" from query result as a known existed value to do the next query:
        database?.query('Books', where: 'hash = ?', whereArgs: [hash]).then(
            (rows) {
              print('query hash: $rows'); // here print a empty list "[]"
        });
      }
    });

我可以确保所有表名和列名都是正确的,没有拼写错误。 那么,为什么哈希查询结果为空?

我尝试过使用 hexHash 查询数据库,但仍然没有得到任何结果。

final String hashToCheckHex = hash.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join('');
database?.query('Books', where: 'hex(hash) = ?', whereArgs: [hashToCheckHex]).then(
            (rows) {
              print('query hash: $rows'); // still get nothing.
        });
flutter sqlite dart blob
1个回答
0
投票

1- 确保您已设置数据库(下面是 SQLite 示例):

导入'包:sqflite/sqflite.dart';

//打开数据库

数据库 db = 等待 openDatabase('my_database.db');

2- 查询数据库并以 Uint8List 形式检索 blob 列数据:

List> 结果=等待db.rawQuery('从 my_table 中选择 my_blob_column');

if(结果.isNotEmpty)

{

Uint8List blobData = 结果[0]['my_blob_column']; // 根据需要使用 blobData

}

3- 确保根据应用程序的要求正确处理 blob 数据。 请记住根据您的具体数据库设置和软件包使用情况调整数据库访问代码。

© www.soinside.com 2019 - 2024. All rights reserved.